git概述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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概述的主要内容,如果未能解决你的问题,请参考以下文章

Git概述

git概述

Git分支概述

Git分支概述

git-概述安装

GIT-概述与架构