首页 > 代码库 > git概述
git概述
声明:本文主要转载自http://www.wowotech.net/x_project/git_record.html,为了个人理解的方便,做了排版的修改,感谢原作者
1. 前言
git是一种分布式版本管理工具,本文将主要从版本管理和分布式两个方面介绍git的基本原理
2. git的本质
使用一个“链表”,记录仓库里每一次的“修改记录”。
注:此处的修改记录指的是每一次的patch,也就是提交,git会根据每次的提交内容计算一个40bytes的SHA-1字符串,用来唯一标识这次提交
图 git的commit链表
上图即是某一仓库下每一次提交的commit组成的链表
3. git版本管理
3.1 分支
上面提到的“用于保存commit记录的链表”是可以被命名的,它就是我们常说的分支,如master分支(可以当作一个链表头,指向最新一次commit):
图 git的分支(master)
当然,一个仓库中可以同时存在多个分支,我们可以基于任何一次提交,新建一个分支,并让之后的提交沿着新分支“流动”,如下:
图 git多分支
为了方便,git使用一个称作HEAD的指针,指向当前正在操作的分支(当然,HEAD可以任意切换,指向任何一个分支),如下:
图 git HEAD
最后,分支之间,可以自由的合并,例如将bY合并到bX上,然后再把bX合并到master上。
3.2 其它
由于git仓库是使用“链表”的形式管理各个提交的,随意修改链表头的位置,即可回退到某一个版本上,如下:
4. git管理的分布式
我们在3 章介绍git版本管理的时候,没有提到“服务器”的概念,所有的版本管理操作,都是在本地进行的。这就是git与其它版本管理工具(如CVS、SVN等)最本质的区别所在:分布式。
所谓的分布式,是指git仓库不是以client-server的形式组织的,而是以对等的形式,在所有的机器上保存相同的copy(当然,是在各自修改之前),并在需要的时候,同步各自的改动,完成“版本控制”的目的。
假设上面图片4是位于github上的某一个仓库的当前快照,任何人都可以把它copy到自己的电脑上(这个过程称作clone),这时就存在两个一模一样的仓库(和图片4一样,这里就不给出图示了)。
一般情况下,自己电脑上的仓库称作本地仓库(local),github上的仓库称作远端仓库(remote)。我们可以在本地仓库为所欲为,不用担心影响远端仓库,如下:
图 远端仓库和本地仓库
上图中,本地仓库删除了master分支的两个提交,并在bX分支上新增了两个提交。当然,在本地仓库的任何修改,都不会影响远端仓库,直到将本地的改动同步到的远端为止。
毫无疑问,如果只是在本地仓库操作,就不能称作“版本管理”了。我们可以通过git push命令,将本地的修改推送到远端,同样,也可以通过git pull/git rebase等命令,将远端的改动同步到本地。
5.参考文档
[1]http://www.wowotech.net/x_project/git_record.html
git概述