用上GIT你必定会爱上他

前言

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到很是大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Torvalds 开始着手开发 Git 是为了做为一种过渡方案来替代 BitKeeper,后者以前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人以为 BitKeeper 的许可证并不适合开放源码社区的工做,所以 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,可是咱们已经发如今不少其余自由软件项目中也使用了 Git。例如,X.org 最近就迁移到 Git 上来了,不少 Freedesktop.org 的项目也迁移到了 Git 上。git

GIT优点

分支更快、更容易。
支持离线工做;本地提交能够稍后提交到服务器上。
Git 提交都是原子的,且是整个项目范围的,而不像 CVS 中同样是对每一个文件的。
Git 中的每一个工做树都包含一个具备完整项目历史的仓库。
没有哪个 Git 仓库会天生比其余仓库更重要。算法

Git与SVN的区别

若是你在读这篇文章,说明你跟大多数开发者同样对GIT感兴趣,若是你尚未机会来试一试GIT,我想如今你就要了解它了。服务器

GIT不只仅是个版本控制系统,它也是个内容管理系统(CMS),工做管理系统等。若是你是一个具备使用SVN背景的人,你须要作必定的思想转换,来适应GIT提供的一些概念和特征。因此,这篇文章的主要目的就是经过介绍GIT能作什么、它和SVN在深层次上究竟有什么不一样来帮助你认识它。网络

那好,这就开始吧…分布式

1. GIT是分布式的,SVN不是:

这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。若是你能理解这个概念,那么你就已经上手一半了。须要作一点声明,GIT并非目前第一个或惟一的分布式版本控制系统。还有一些系统,例如Bitkeeper, Mercurial等,也是运行在分布式模式上的。但GIT在这方面作的更好,并且有更多强大的功能特征。svn

GIT跟SVN同样有本身的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每一个开发人员从中心版本库/服务器上chect out代码后会在本身的机器上克隆一个本身的版本库。能够这样说,若是你被困在一个不能链接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然可以提交文件,查看历史版本记录,建立项目分支,等。对一些人来讲,这好像没多大用处,但当你忽然遇到没有网络的环境时,这个将解决你的大麻烦。工具

一样,这种分布式的操做模式对于开源软件社区的开发来讲也是个巨大的恩赐,你没必要再像之前那样作出补丁包,经过email方式发送出去,你只须要建立一个分支,向项目团队发送一个推请求。这能让你的代码保持最新,并且不会在传输过程当中丢失。GitHub.com就是一个这样的优秀案例。动画

有些谣言传出来讲subversion未来的版本也会基于分布式模式。但至少目前还看不出来。ui

2. GIT把内容按元数据方式存储,而SVN是按文件:

全部的资源控制系统都是把文件的元信息隐藏在一个相似.svn,.cvs等的文件夹里。若是你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。由于,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上全部的东西,例如标签,分支,版本记录等。.net

3. GIT分支和SVN的分支不一样:

分支在SVN中一点不特别,就是版本库中的另外的一个目录。若是你想知道是否合并了一个分支,你须要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。感谢Ben同窗指出这个特征。因此,常常会发生有些分支被遗漏的状况

然而,处理GIT的分支倒是至关的简单和有趣。你能够从同一个工做目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
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

GIT和SVN之间只有这五处不一样吗?固然不是。我想这5个只是“最基本的”和“最吸引人”的,我只想到这5点。若是你发现有比这5点更有趣的,请共享出来,欢迎。

更多其余资料

为何说 Git 比 SVN 更好:http://www.oschina.net/news/29214/why-git-is-better-than-svn
Git初体验:http://my.oschina.net/dxqr/blog/134811
git官网:http://git-scm.com
git快速入门(gif动画版):http://git.oschina.net/wzw/git-quick-start

相关文章
相关标签/搜索