1 Git介绍
git是一种分布式的版本控制软件。
分布式vs集中式
git和svn分别是分布式和集中式的版本控制软件。
在使用svn时,版本库是存放在唯一的中央服务器里的。当在本地进行提交(submit)操作时,svn会将本地修改提交到中央服务器的版本库;而在本地进行更新(up)操作时,会将中央服务器版本库中的最新版本更新到本地。
这种版本控制方式被称为集中式版本控制。团队的协作是以中央服务器作为枢纽来进行的,如下图所示
而在使用git时,git会在每一台机器上建立一个版本库,称为仓库(repository)。在使用git进行新建(init)、提交(commit)、分支(branch)等操作时,都只对本地仓库进行修改。
那么,团队之间怎么进行协作的呢?
git是用远程仓库来实现的,通过从远程仓库克隆(clone)、拉取分支(pull),想远程仓库推送分支(push)来实现与其他机器上的仓库进行交流。
一般来说,在团队协作时,会在某台服务器上搭建一个gitlab远程仓库平台,这台服务器行使类似于“中央服务器”的功能。团队中每一个人首先在本地的仓库进行操作,需要的时候,把本地的分支推送到远程仓库里,这样,别人就可以看到了。
这种版本控制方式被称为分布式版本控制,如下图所示
注意,这里提到了“分支”的概念。每次本地仓库向远程仓库推送时,只能推送某一个分支,而不能推送整个版本库。有关分支管理的概念在后面会介绍。
暂存区的概念
svn中没有暂存区的概念,如果想提交某一个文件,需要用commit命令后面加文件名作为参数
而git中使用了暂存区:每次执行commit,不需要文件名作为参数,而是直接把暂存区的文件全部提交。因此,在执行commit命令之前,需要先执行add命令,把需要提交的文件存入暂存区。工作流如下图所示
分支的概念
比如现在手头上有一个项目的初始化版本,我们在这个版本的基础上新建分支A、分支B。这个时候,分支A和分支B的内容是一样的。这时,我们在分支A下进行修改、提交,分支A迭代了一个版本。这些操作仅仅会影响分支A,而影响不了分支B。
所以,每条分支相当于一条独立的版本控制的路。那么,两条分支之间如何进行交流呢?
git是通过合并分支来实现分支之间的交流的。
假设分支A修改了文件1,分支2修改了文件2,这时,我们将分支A合并到分支B上,那么分支B里的文件1会变成分支A修改过的样子。这就是最简单的分支合并。
在项目实践中,一般会建立一个master分支,作为发布版本的分支,一个develop分支,作为开发分支,一些feature分支,作为每一个功能开发时的分支。