码迷,mamicode.com
首页 > 其他好文 > 详细

git概述

时间:2017-04-11 13:00:07      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:基于   区别   cad   ref   3.2   版本   不能   推送   pull   

声明:本文主要转载自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概述

标签:基于   区别   cad   ref   3.2   版本   不能   推送   pull   

原文地址:http://www.cnblogs.com/smartjourneys/p/6692780.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!