Git分布式版本控制系统使用心得

写在前面

Git对于经常写代码的码农同志们并不陌生,几乎是必备的工具之一。由于本人现在经常参与机器人相关的项目,需要管理大量的项目代码。之前一直在电脑保存各式各样的代码版本,时间一长根本记不住每个版本之间的区别和改动,这才入了Git的坑,在了解了Git的工作原理和基本操作之后,便一发不可收拾,真后悔没有早些了解这个神奇的工具。下面我就以我对Git的了解介绍一下什么是Git以及Git的基本使用方法。

什么是Git

Git专业的叫法是:一种分布式版本控制系统。很多人不了解分布式版本控制系统的概念,没关系,我会用一种通俗的方式解释一下。

假设你现在要开发一个程序,你已经写好了一份代码,但是这份代码有很多BUG,而且功能也很不完善,你需要不断的修改这份代码,并且需要记录每次的改动,以便万一哪次改错了可以恢复之前的版本,如果没有Git,你会怎么做?

很简单,我可以把每次的代码文件名后面加一个版本号,假设是code1,code2,…..,code100 等等。如果我修改过100次,那么就需要在电脑上保留100份代码,怎么样?是不是很简单?而且很直观,我还可以在每次修改的代码文件里加入一些修改的描述,比如此次修改了什么什么之类的话。

似乎看上去已经很完美了,无非是多存一些文件而已嘛,怕什么?!老子硬盘4个TB!!好吧,那我们再考虑一些情况,很多时候一个项目代码需要几个人一起维护,那么怎么去协调每个人修改的部分呢?

这个稍微有一些麻烦了,不过没关系,我们可以让其中一个人先改,改完了将文件发给第二个人改,第二个人改完了发给第三个人,以此类推。当最后一个人改完了,将这个文件标记为最终版!!额。。。假设每个人都做过100次改动,有四个人来维护这个项目,那么产生的文件个数就是400个!这还只是一个项目而已,如果很多项目呢?对这些项目版本的管理会产生极其高昂的成本。

那么我们再假设一种情况,这个项目想新加入一个功能,但是不知道这个功能好不好,如果好就加到项目中去,如果不好就还是使用原来的项目。那么我们又该怎么管理这个项目的版本呢?

提出了以上问题,就是Git诞生的原因,最初就是为了方便管理Linux内核代码而设计的工具。在我看来,Git的用处在于可以记录每次的项目文件改动,而且可以方便的新建项目分支、合并项目分支。以我在Github上的个人简历为例,我的个人简历是用LaTeX写的,从写简历开始,每一次的修改都被Git记录了下来,而且由于我的简历分为中文版和英文版,我的项目里就新建了2个分支,一个叫en分支,是英文版简历,一个叫zh分支,是中文版简历。所有的这些在我的电脑里,仅仅有一份文件就足够了,这就是神奇的Git。

Git的安装

如果你在Linux下,那么Git的使用将会是异常方便的。你只需要在终端输入

1
$sudo apt-get install git

便可以使用Git了。当然,如果你不喜欢指令行形式的Git,你也可以使用一些GUI软件,个人比较推荐GitKraken,界面很漂亮,而且跨平台。

如果你在Windows下,你可以安装Git Bash,同样利用指令行来使用Git,或者使用GitKraken之类的GUI软件来管理你的项目版本。由于个人喜好,我喜欢直接利用指令来使用Git,这对于理解Git的工作原理也有很多好处,当然你也可以更直观的利用GUI来使用,下面我介绍的都是Git指令,理解了Git指令同样可以在GUI里游刃有余的使用Git。

Git的使用

其实,Git只是一个记录文件改动的工具,因此完全可以独立在电脑上使用,并不一定非要将文件存放到网上。初始化Git很简单,新建一个你需要管理的项目文件夹,假设名为proj,进入文件夹,在终端里输入:

1
usr@proj $ git init

你会发现,在文件夹里出现了一个隐藏的文件夹,名为.git,别小看了这个文件夹,今后你文件夹中所有的文件改动它都一清二楚地记录在里面,Git就是利用这个文件夹中的文件来进行版本控制的。

假设你的需要版本控制的文件名叫file.doc,那么你需要在终端输入:

1
usr@proj $ git add file.doc

来告诉Git,我要跟踪file.doc这个文件的版本。或者如果文件夹下有很多文件,你全部需要跟踪,你可以输入:

1
usr@proj $ git add .

Git同时可以利用.gitignore文件控制需要忽略的文件,这个可以查看Git教程,这里不再赘述。下面你便可以对这个文件夹的文件进行修改,修改之后,在终端输入:

1
usr@proj $ git status

你会发现,你所有的文件改动,包括修改,删除、新建的文件都没有逃过Git的法眼,但是根据Git的机制,Git目前还没有将这些改动暂存,如果你认为这一时刻的状态需要被Git记录下来,那么你就需要输入:

1
usr@proj $ git commit -m "这是我的修改"

这样你的这次改动就被Git存储了下来,今后不管到什么版本,你都可以随时恢复到这次暂存的这个版本。怎么样?很神奇吧。神奇的还在后面呢。假如你想新建项目的另一个版本,同时又不想影响当前的版本,你可以在终端输入:

1
usr@proj $ git checkout -b another

这样,你会看到Git新建了一个分支,叫another分支,今后你所有的修改就会发生在another分支上,而对之前的分支(默认分支master)没有任何影响,如果你有一天想要回到之前的分支,继续之前的工作,那么简单,在终端输入:

1
usr@proj $ git checkout master

这样就轻松的切换回了主分支master,你会看到所有的文件都恢复到了master分支的状态。

这就是Git最基本的用法,当然了,版本回退、分支合并等操作也可以轻松实现,你也可以将代码push到GitHub或者Gitee等代码托管网站上,你也可以将别处的改动pull到本地,或是git clone网站上的代码到本地,这些在这里不在赘述,可以参考文献《Pro Git中文版》,里面有关于Git的详细用法。

写在后面

Git可以管理几乎你的任何文件,虽然不推荐使用Git来管理非文本类的文件,but anyway,这是你的自由,只要你想Git就可以做!