Git简明教程

Github的使用

小羽

2 minute read

Github是目前世界上最先进的分布时版本控制系统。我们可以借助它来托管我们的项目。可以说Github是程序员必不可少的高效工具,事实上,我的博客网站正是借助Github来发布到网上的。既然Github如此重要,下面我就来介绍一下Github以及它的基础使用吧。

Github是一种分布式版本控制系统,极大的方便了开发者们存储项目以及多人开发。开发者们可以将项目上传到Github托管,然后团队中不同的人可以将项目下载到本地进行修改,完成后再将其传回到Github上,所有的修改日志都会显示在Github上,这样就极大的方便了团队共同开发项目。Github也是一个非常大的开源社区,开发者们可以在这里将自己的代码发布出来供其它人观看和使用,Github用户可以查看、星标、Fork各种各样的项目,这样的社区方便了开发者们的交流,促进了项目的发展,帮助了学者学习代码。

I. Github基础概念

下面我们首先来介绍一下Github的基础概念。

仓库(Repository)

仓库是用来存放项目代码的地方,每个项目对应一个仓库,每个Github用户可以有多个仓库。开发者们也可以对别人的项目进行关注(Watch)、收藏(Star)、复制克隆(Fork)、发起请求(Pull Request)、发送事务卡片(Issue)。下面我们来一一解释这些概念。

关注(Watch):如果一个开发者关注了别人的项目,那么他将会收到项目的修改、更新等信息的通知。

收藏(Star):如果一个开发者收藏了别人的项目,那么他就可以在自己的Github主页上找到这个项目的链接。

复制克隆项目(Fork):如果一个开发者Fork了别人的仓库,那么这个仓库就会被复制到他的Github主页上,复制的仓库和原仓库是彼此独立的,开发者对复制到自己主页的仓库内容进行修改不会影响到原仓库内的项目。

发起请求(Pull Request):发起请求是基于Fork之上的。当一个开发者Fork了别人的仓库内的项目,加以修改后想要通知原项目的Git用户代码在他的修改下被优化了,希望原用户将原项目改为他修改后的版本,就可以发送Pull Request申请。如果原项目的用户同意了,那么原项目就会被修改成新的版本。

发送事务卡片(Issue):当一个开发者在查看别人仓库中的项目时发现了bug,可以在仓库中发送Issue来和项目开发者进行交流。

II. Git工作原理

git原理

下面我来介绍一下Git的工作原理。如上图所示,Git仓库分为本地和远程仓库两个部分,本地部分又分为三个区域:工作区(workingspace)、缓存区(index)和仓库区(repository)

  • 工作区(workingspace):工作区就是我们本地对项目修改的区域
  • 缓存区(index):当修改完成后,我们可以将修改的内容上传,为了避免传入之后又想修改,Git会让修改的文件首先传入缓存区
  • 本地仓库区(local repository):当我们确定所有修改都已完成的时候,就可以将缓存区内的所有文件传入到Git本地仓库;
  • 远程仓库区(remote repository): 最后,我们再将本地仓库的文件传到远程仓库即可

git原理2

上传代码流程

  1. 使用命令git clone url(仓库地址)将项目从远程仓库下载到本地。
   git clone url
  1. 修改项目代码。

  2. 使用命令git add xxx (要添加的文件,”.“代表所有文件)将指定文件从工作区传入缓存区。

   git add xxx
  1. 使用命令git commit -m ‘描述’将缓存区内的所有文件传入Git本地仓库。
   git commit -m '描述'
  1. 使用命令git remote add origin url(远程项目地址) 将Git本地仓库和Git远程仓库连接起来。
   git remote add origin url
  1. 使用命令git push -u origin master 将Git本地仓库内的项目上传到Git远程仓库。
   git push -u origin master

从远程更新本地代码

git pull # 相当于 git fetch + git diff

III. 常用命令

  1. 首次在本地使用git时,需要将本地与git账户进行关联,可以使用命令:
   git config --global user.name "username"
   git config --global user.email "useremail@xxx.com"
  1. 当我们想要清除缓存区的某个内容或全部内容时,可以使用命令:
   git rm -r --cached xxx
   git rm -r --cached .
  1. 当我们想要查看文件的状态时可以使用命令:
   git status
  1. 当我们想要删除remote origin时可以使用命令:
   git remote rm origin
  1. 如果项目还从未传入到git,那么需要在项目目录下使用以下命令将项目初始化为git项目
   git init
  1. 如果想直接删除仓库内的文件,可以使用命令:
   git rm xxx		//删除文件
   git rm -r xxx	//删除文件夹

IV. Git分支

在协同开发的工程中,我们往往是不同程序员负责不同的项目模块,同时进行开发。为了保证每个人的代码不受其他人更改的影响,我们可以创建不同的分支进行开发,然后最终再将这些分支合并起来。

  1. git分支中的常用指令:
# 列出所有本地分支 
git branch

# 列出所有远程分支 
git branch -r

# 新建一个分支,但依然停留在当前分支 
git branch [branch-name]

# 新建一个分支,并切换到该分支 
git checkout -b [branch]

# 合并指定分支到当前分支 
$ git merge [branch]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name] 
$ git branch -dr [remote/branch]

Note: 如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建 的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

  1. git分支命名规范

    分支 命名 说明
    主分支 master 主分支,所有提供给用户使用的正式版本,都在这个主分支上发布
    开发主分支 dev 开发分支,永远是功能最新最全的分支
    功能分支 feature-* 新功能分支,某个功能点正在开发阶段
    发布版本 release-* 发布定期要上线的功能
    修复发布版本分支 bugfix-release-* 修复测试bug
    紧急修复分支 bugfix-master-* 紧急修复线上代码的 bug
  • 主分支 Master

    代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。 主分支必须是可用的、稳定的、可直接发布的版本,不能直接在主分支上开发。

  • 开发主分支Dev

    Master主分支只用来发布重大版本,日常开发应该在另一个分支上完成,我们把开发用的分支,叫做Dev。 这个分支可以用来生成代码的最新隔夜版本(nightly)。 如果想正式对外发布,就在Master分支上对Dev分支进行合并(merge)。 Dev分支代码永远是最新的,所有新功能以这个分支来创建自己的开发分支,该分支只做合并操作,不能直接在该分支上开发。

  • 功能分支Feature

    功能分支的名字,可以采用feature-*的形式命名,以自己开发的功能命名。 功能分支是分配开发不同的功能用的,从Dev创建功能分支,然后完成相应功能开发后合并回Dev分支并删除该功能分支

  • 预发布分支Release

    预发布分支名字,可以采用release-*的形式命名 预发布分支是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。 预发布分支是从Dev分支上分出来的,预发布结束之后(即测试没有问题之后),必须合并进Dev和Master。

  • 修复预发布分支Release-bug

    修复预发布分支的bug,可以采用release-bug-*的形式命名 在预发布版本测试出现bug时,从release分支创建分支进行bug修复,bug修复完成后在合并会release分支

  • 紧急修补分支Bug

    修补分支的名字,可以采用bugfix-master-*的形式。 该分支是为了紧急修复线上的bug。 软件正式发布之后,难免会出现bug。这时就需要创建一个分支,进行bug修补。 修补bug分支是从Master分支上面分出来的。修补结束之后,再合并进Master和Dev分支。 尽量避免线上问题的出现

    Note:一个分支尽量开发一个功能模块,不要多个功能模块在一个分支上开发. feature分支申请合并之前,最好先pull一下dev分支下来,看一下有没有冲突,如果有冲突就先解决冲突后再合并回dev

V. IDEA使用Git

IDEA中可以直接使用Git取代Git命令,使得用Git开发变得更加轻松便捷。

IV. Gitpage

此外,我们还可以使用Github来托管静态网页。步骤如下:

  1. 建立一个项目仓库,名字为username.github.io
  2. 将网页代码上传到这个仓库中,在项目根目录下必须包括index.html文件。

这样就成功将我们的静态网页托管到了Github上。访问的地址为username.github.io。如果你想使用自己的域名,请等待本博客的下次更新。

V. 总结

Github是一个功能强大的分布式控制系统,我们可以借助它来托管项目,从来实现储存和多人分布式开发,这样极大的提高了我们开发项目的效率。可以说Github是每一个开发者必不可少的工具,这篇文章介绍了Github最基本的使用方法,深层次的东西还等待着大家自己的开发。