GIT与Subversion的简单比较

最近买了本《version control with git》的动物书。给自己下了规定,一定要每天看一点。免得像之前的书一样,买了不怎么看,只是偶尔翻翻,有点浪费。目前看到DIFF这章。本章的结尾是比较了git 和 subversion的diff机制。于是想上网查一下具体git和subversion还有些什么比较大的区别。在GIT官方的WIKI上看到一下总结,简单翻译一下:

  • Git is much faster than Subversion   GIT比 SVN快
  • Subversion allows you to check out just a subtree of a repository; Git requires you to clone the entire repository (including history) and create a working copy that mirrors at least a subset of the items under version control.  SVN允许从服务器拿库中的某个子目录;GIT要求你clone整个库。
  • Git’s repositories are much smaller than Subversions (for the Mozilla project, 30x smaller)  git库比subversion小。mozilla项目中小了30倍
  • Git was designed to be fully distributed from the start, allowing each developer to have full local control  GIT完全基于分布式设计,开发人员具有代码库的完全控制。
  • Git branches are simpler and less resource heavy than Subversion’s   git分支比subversion好用且省资源。
  • Git branches carry their entire history  git分支带有完整历史记录
  • Merging in Git does not require you to remember the revision you merged from (this benefit was obviated with the release of Subversion 1.5)
  • Git provides better auditing of branch and merge events。 git提供更好的分支合并的检查。
  • Git’s repo file formats are simple, so repair is easy and corruption is rare. git的repo文件系统简单,易于修复,也不容易损坏。
  • Backing up Subversion repositories centrally is potentially simpler – since you can choose to distributed folders within a repo in git.
  • Git repository clones act as full repository backups. git中clone就是整个库的备份
  • Subversion’s UI is more mature than Git’s. svn的UI比git的UI成熟。
  • Walking through versions is simpler in Subversion because it uses sequential revision numbers (1,2,3,..); Git uses unpredictable SHA-1 hashes. Walking backwards in Git is easy using the “^” syntax, but there is no easy way to walk forward. SVN的版本号人性化,git中使用SHA1作为commit标识。难懂。

 

总的来说GIT先进很多。但是也并非什么都比SVN好。其中我觉得它那SHA1的commit ID就很难用。在图形化的git中还好,但是命令行下要输入commit ID真是累。SVN使用上必须要建立一个服务器就很麻烦,这点远不如git来的轻量。也是我个人比较喜欢git的主要原因。或者说这也是分布式SCM的主要优点。

By Lu Jun

80后男,就职于软件行业。习于F*** GFW。人生48%时间陪同电子设备和互联网,美剧迷,高清视频狂热者,游戏菜鸟,长期谷粉,临时果粉,略知摄影。

6 comments

  1. 我尝试点击你的副标题AV,但是当我鼠标移动到AV字眼的时候,我失望了。字体什么没有任何改变,我又自我欺人的点了一下,没有东西,博主,你坑爹呢!!!

  2. 那不是链接,那是对本博客的描述,AV也不是你喜欢的那种,只是表示audio-video.哈哈。。

  3. 关于git repositories尺寸小的结论,我有一点疑惑,我想知道这个比较是否是在记录了相同的信息量的前提下比较的?比如,我用git clone一个分支,然后在这个分支上面做了很多改动,并提交了很多次,最后推送到中心服务器,那么我在本地的那些提交记录是否也会被一并推送到中心服务器,还是只推送最后的结果?如果只推送最后 结果,那么实际在中心服务器丢失了很多中间修改的信息,那么尺寸小是应该的,但是你要清楚,这个尺寸小是以丢失信息为代价的。如果你想保留所有信息,那么在git上你除了要维护一个中心服务器以外,还要维护所有的本地repositories,我觉得这样不如像svn那样,只维护一个中心服务器简单。在git上,如果你想用一个中心服务器维护所有的信息,那么你需要每做完一个修改,先提交到本地repository,然后再推送到中心服务器,需要2步来完成svn里面一步需要做的事情,感觉很麻烦。

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.