经常使用的版本控制系统有VSS、SVN、CVS等等,Git是最近几年使用得比较多的分布式版本控制系统,存在即合理,Git的出现总有它出现的理由,之前的版本控制系统确定有一些不足的地方,因此才出现了Git。git
[1].Git简介
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git的读音为/gɪt/。github
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到很是大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。web
Torvalds 开始着手开发 Git 是为了做为一种过渡方案来替代 BitKeeper,后者以前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人以为 BitKeeper 的许可证并不适合开放源码社区的工做,所以 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,可是咱们已经发如今不少其余自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,不少 Freedesktop 的项目也迁移到了 Git 上。算法
Git特色
分布式相比于集中式的最大区别在于开发者能够提交到本地,每一个开发者经过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
下图是经典的git开发过程。服务器
Git的功能特性:
从通常开发者的角度来看,git有如下功能:
一、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
二、在本身的机器上根据不一样的开发目的,建立分支,修改代码。
三、在单机上本身建立的分支上提交代码。
四、在单机上合并分支。
五、把服务器上最新版的代码fetch下来,而后跟本身的主分支合并。
六、生成补丁(patch),把补丁发送给主开发者。
七、看主开发者的反馈,若是主开发者发现两个通常开发者之间有冲突(他们之间能够合做解决的冲突),就会要求他们先解决冲突,而后再由其中一我的提交。若是主开发者能够本身解决,或者没有冲突,就经过。
八、通常开发者之间解决冲突的方法,开发者之间可使用pull 命令解决冲突,解决完冲突以后再向主开发者提交补丁。网络
从主开发者的角度(假设主开发者不用开发代码)看,git有如下功能:分布式
一、查看邮件或者经过其它方式查看通常开发者的提交状态。
二、打上补丁,解决冲突(能够本身解决,也能够要求开发者之间解决之后再从新提交,若是是开源项目,还要决定哪些补丁有用,哪些不用)。
三、向公共服务器提交结果,而后通知全部开发人员。svn
优势:
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间能够很容易的解决冲突。
离线工做。工具
缺点:
资料少(起码中文资料不多)。
学习周期相对而言比较长。
不符合常规思惟。
代码保密性差,一旦开发者把整个库克隆下来就能够彻底公开全部代码和版本信息。学习
Via: http://baike.baidu.com/subview/1531489/12032478.htm
[2].推荐!手把手教你使用Git
这篇文章写的Git教程写得太好了,很是实用,适合对Git刚刚入门的朋友学习,教程很是全面。
一:Git是什么?
Git是目前世界上最早进的分布式版本控制系统。
二:SVN与Git的最主要的区别?
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是本身的电脑,因此首先要从中央服务器哪里获得最新的版本,而后干活,干完后,须要把本身作完的活推送到中央服务器。集中式版本控制系统是必须联网才能工做,若是在局域网还能够,带宽够大,速度够快,若是在互联网下,若是网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每一个人的电脑就是一个完整的版本库,这样,工做的时候就不须要联网了,由于版本都是在本身的电脑上。既然每一个人的电脑都有一个完整的版本库,那多我的如何协做呢?好比说本身在电脑上改了文件A,其余人也在电脑上改了文件A,这时,大家两之间只需把各自的修改推送给对方,就能够互相看到对方的修改了。
Via: http://blog.jobbole.com/78960/
[3].GIT和SVN之间的五个基本区别
1.GIT是分布式的,SVN不是:
这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。若是你能理解这个概念,那么你就已经上手一半了。须要作一点声明,GIT并非目前第一个或惟一的分布式版本控制系统。还有一些系统,例如Bitkeeper, Mercurial等,也是运行在分布式模式上的。但GIT在这方面作的更好,并且有更多强大的功能特征。
GIT跟SVN同样有本身的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每一个开发人员从中心版本库/服务器上chect out代码后会在本身的机器上克隆一个本身的版本库。能够这样说,若是你被困在一个不能链接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然可以提 交文件,查看历史版本记录,建立项目分支,等。对一些人来讲,这好像没多大用处,但当你忽然遇到没有网络的环境时,这个将解决你的大麻烦。
一样,这种分布式的操做模式对于开源软件社区的开发来讲也是个巨大的恩赐,你没必要再像之前那样作出补丁包,经过email方式发送出去,你只须要建立一个分支,向项目团队发送一个推请求。这能让你的代码保持最新,并且不会在传输过程当中丢失。GitHub.com就是一个这样的优秀案例。
有些谣言传出来讲subversion未来的版本也会基于分布式模式。但至少目前还看不出来。
2.GIT把内容按元数据方式存储,而SVN是按文件:
全部的资源控制系统都是把文件的元信息隐藏在一个相似.svn,.cvs等的文件夹里。若是你把.git目录的 体积大小跟.svn比较,你会发现它们差距很大。由于,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上全部的东西,例如标签,分 支,版本记录等。
3.GIT分支和SVN的分支不一样:
分支在SVN中一点不特别,就是版本库中的另外的一个目录。若是你想知道是否合并了一个分支,你须要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。感谢Ben同窗指出这个特征。因此,常常会发生有些分支被遗漏的状况。
然而,处理GIT的分支倒是至关的简单和有趣。你能够从同一个工做目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
4.GIT没有一个全局的版本号,而SVN有:
目前为止这是跟SVN相比GIT缺乏的最大的一个特征。你也知道,SVN的版本号实际是任何一个相应时间的源代 码快照。我认为它是从CVS进化到SVN的最大的一个突破。由于GIT和SVN从概念上就不一样,我不知道GIT里是什么特征与之对应。若是你有任何的线 索,请在评论里奉献出来与你们共享。
更新:有些读者指出,咱们可使用GIT的SHA-1来惟一的标识一个代码快照。这个并不能彻底的代替SVN里容易阅读的数字版本号。但,用途应该是相同的。
5.GIT的内容完整性要优于SVN:
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时下降对版本库的破坏。这里有一个很好的关于GIT内容完整性的讨论 –http://stackoverflow.com/questions/964331/git-file-integrity
Via: http://www.oschina.net/news/12542/git-and-svn
延伸阅读:
http://www.baidu.com/s?wd=git
http://www.sogou.com/web?query=git
http://www.so.com/s?q=git
http://baike.baidu.com/subview/1531489/12032478.htm
http://blog.jobbole.com/78960/
http://www.oschina.net/news/12542/git-and-svn
http://git-scm.com/
https://github.com/git/git