GIT和SVN之间的五个基本区别

红薯
 红薯
发布于 2010年10月20日
收藏 110

开源中国 Git 代码托管平台 —— http://git.oschina.net

如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了。

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

那好,这就开始吧…

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

这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。如果你能理解这个概念,那么你就已经上手一半了。需要做一点声明,GIT并不是目前第一个或唯一的分布式版本控制系统。还有一些系统,例如BitkeeperMercurial等,也是运行在分布式模式上的。但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的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。

Git logo

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点更有趣的,请共享出来,欢迎。

英文原文:5 Fundamental differences between GIT & SVN,编译:外刊IT评论

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:GIT和SVN之间的五个基本区别
加载中

最新评论(37

limeng32
limeng32
Git支持团队间硬盘异步开发,无论在公司团队内还是在开源社区中 Pull Request 都成为最受欢迎的合作方式,光这一点就足够了。
万事通
万事通
GIT和SVN之间的五个基本区别 详细讲解,谢谢分享。
Barret_Guo
Barret_Guo

引用来自“my_ro”的评论

引用来自“ArLiWeng”的评论

1,git在不联网状态,针对没有本地历史的IDE有点用(省了CTRL+Z),否则就是脱裤子放P,不联网不传播本地建历史跟未提交的svn没有区别。。
2,git就是把东西都拖到你盘里,然后要与别人合并不要讲究先后也没有所谓顺序,合并时就象http下载补丁一样要到处拉,然后合并时冲突就打电话吼吧。。svn有顺序,今天一次启动很容易知道别人昨晚的改动而不是等人家醒了到人家硬盘去拉(如果你昨晚push了,那比svn有区别?)。。这根本是针对性很强的组织结构,个人认为不应推广
3,svn敲命令合并就是麻烦了,git难道不用命令吗,所谓的简单快捷不知所以
4,脸皮够厚的,版本号是多少年来多少高传播率代码的依据,看看wowace、sf.net,曾经多少人之间的交流以rXXX 为依据的
5,这个就不现实了,干脆说盘坏了也没事,反正仓库大把还分布式。。

git 我认为,优在于包括了许多linux标准的base-devel代码侧工具,并且有和很强的分支推进能力(或故意鼓励人们多clone去分支,这样能够促进代码完善和改进),在项目团队被很远分隔时有用(虽然svn同样能镜像)。。
现在放弃中央仓库而盲目推进git,有受教化之嫌疑,何况commit是一种主动责任,对程序员管理非常有利。。野团那就没所谓了,如上所述,巴不得你多clone

非常赞同第一点
潇潇洒洒_007
潇潇洒洒_007

引用来自“xunxun”的评论

引用来自“TTT”的评论

这些都不是关键,关键是:GIT支持windows吗?

显然支持
支持
渺渺一粟
渺渺一粟

引用来自“xunxun”的评论

引用来自“TTT”的评论

这些都不是关键,关键是:GIT支持windows吗?

显然支持
linux支持的东西 windows都支持。 但是反过来就不一定,开源你懂的
jackchanxj
jackchanxj

引用来自“my_ro”的评论

引用来自“ArLiWeng”的评论

1,git在不联网状态,针对没有本地历史的IDE有点用(省了CTRL+Z),否则就是脱裤子放P,不联网不传播本地建历史跟未提交的svn没有区别。。
2,git就是把东西都拖到你盘里,然后要与别人合并不要讲究先后也没有所谓顺序,合并时就象http下载补丁一样要到处拉,然后合并时冲突就打电话吼吧。。svn有顺序,今天一次启动很容易知道别人昨晚的改动而不是等人家醒了到人家硬盘去拉(如果你昨晚push了,那比svn有区别?)。。这根本是针对性很强的组织结构,个人认为不应推广
3,svn敲命令合并就是麻烦了,git难道不用命令吗,所谓的简单快捷不知所以
4,脸皮够厚的,版本号是多少年来多少高传播率代码的依据,看看wowace、sf.net,曾经多少人之间的交流以rXXX 为依据的
5,这个就不现实了,干脆说盘坏了也没事,反正仓库大把还分布式。。

git 我认为,优在于包括了许多linux标准的base-devel代码侧工具,并且有和很强的分支推进能力(或故意鼓励人们多clone去分支,这样能够促进代码完善和改进),在项目团队被很远分隔时有用(虽然svn同样能镜像)。。
现在放弃中央仓库而盲目推进git,有受教化之嫌疑,何况commit是一种主动责任,对程序员管理非常有利。。野团那就没所谓了,如上所述,巴不得你多clone

非常赞同第一点
git可以用stash放些实验性的代码,不影响分支,git能做的就没必要在ide做
syw1990
syw1990
Git版本控制软件结合GitHub从入门到精通常用命令学习手册
真心不错的文章
http://www.ihref.com/read-16369.html
cnlinjie
cnlinjie

引用来自“ArLiWeng”的评论

1,git在不联网状态,针对没有本地历史的IDE有点用(省了CTRL+Z),否则就是脱裤子放P,不联网不传播本地建历史跟未提交的svn没有区别。。
2,git就是把东西都拖到你盘里,然后要与别人合并不要讲究先后也没有所谓顺序,合并时就象http下载补丁一样要到处拉,然后合并时冲突就打电话吼吧。。svn有顺序,今天一次启动很容易知道别人昨晚的改动而不是等人家醒了到人家硬盘去拉(如果你昨晚push了,那比svn有区别?)。。这根本是针对性很强的组织结构,个人认为不应推广
3,svn敲命令合并就是麻烦了,git难道不用命令吗,所谓的简单快捷不知所以
4,脸皮够厚的,版本号是多少年来多少高传播率代码的依据,看看wowace、sf.net,曾经多少人之间的交流以rXXX 为依据的
5,这个就不现实了,干脆说盘坏了也没事,反正仓库大把还分布式。。

git 我认为,优在于包括了许多linux标准的base-devel代码侧工具,并且有和很强的分支推进能力(或故意鼓励人们多clone去分支,这样能够促进代码完善和改进),在项目团队被很远分隔时有用(虽然svn同样能镜像)。。
现在放弃中央仓库而盲目推进git,有受教化之嫌疑,何况commit是一种主动责任,对程序员管理非常有利。。野团那就没所谓了,如上所述,巴不得你多clone

引用来自“Mr_Anarchy”的评论

这文章有点老,这评论也不客观,完全就是带着主观感情在吐槽git。实在看不下去,特地注册来发表个人看法,写的有点长了,见我博客http://my.oschina.net/u/1580062/blog/214850

返回顶部
顶部