Git 对比 SVN

转自:http://www.aqee.net/5-fundamental-differences-between-git-svn/git

我是一开始就用Mercurial, Git这类的系统。(如今已经百分百用Git了。)
用过Git以后才接触SVN,发现了一些很是大的差异。在这裡提出我我的一些主要理由為何弃SVN而用Git。svn

1。速度:
克隆一份全新的目录,以一样拥有五个(才五个)分支来讲,SVN是同时复製5个版本的文件,也就是说重复五次一样的动做。而Git只是获取文件的每一个版本的元素,而后只载入主要的分支(master)。在个人经验,克隆一个拥有将近一万个提交(commit),五个分支,每一个分支有大约1500个文件的SVN,耗了将近一个小时!而Git只用了区区的1分鐘!测试

2。版本库(repository):
据我所知,SVN只能有一个指定中央版本库。当这个中央版本库有问题时,全部工做成员都一块儿瘫痪直到版本库维修完毕或者新的版本库设立完成。.net

而Git能够有无限个版本库。或者,更正确的说法,每个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。若是主要版本库(例如:置於GitHub的版本库)发生了什麼事,工做成员仍然能够在本身的本地版本库(local repository)提交,等待主要版本库恢复便可。工做成员也能够提交到其余的版本库!get

3。分支(Branch)
在SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。若是工做成员想要开啟新的分支,那将会影响“全世界”!每一个人都会拥有和你同样的分支。若是你的分支是用来进行破坏工做(安检测试),那将会像传染病同样。同步

而Git,每一个工做成员能够任意在本身的本地版本库开啟无限个分支。举例:当我想尝试破坏本身的程序(安检测试),而且想保留这些被修改的文件供往后使用,我能够开一个分支,作我喜欢的事。彻底不需担忧妨碍其余工做成员。只要我不合并及提交到主要版本库,没有一个工做成员会被影响。等到我不须要这个分支时,我只要把它从个人本地版本库删除便可。无痛无痒。
Git的分支名是可使用不一样名字的。例如:个人本地分支名為testing,而在主要版本库的名字实际上是master。
最值得一提,我能够在Git的任意一个提交点(commit point)开啟分支!(其中一个方法是使用gitk –all 可观察整个提交记录,而后在任意点开啟分支。)it

4。提交(Commit)
在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经没法阻止事情的发生了。若是网路中断,你根本没办法提交!ast

而Git的提交彻底属於本地版本库的活动。而你只需“推”(git push)到主要版本库便可。Git的“推”实际上是在执行“同步”(Sync)。test

5。从新设立起点(Rebase)
我没在SVN尝试过,不知道有没有这样的功能。程序

在Git,若是你想把别人的最新提交设立為如今这个分支的起点,只要执行git rebase branch_name 便可。这个和合并(merge)不一样点是,merge会依据修改的时间视為最新,而Rebase会要求你去解决双方都有修改过的地方的矛盾(conflict)。

A - B - E
\- C - D
A - B - E
\ - C - D


6。系统档案
SVN会在每个目录置放一个.svn。若是想移除这些.svn是很累的。
而Git会在目录起点拥有一个.git目录,以及.gitignore。

对我而言,管理一个Git 的版本库是很容易的事。

相关文章
相关标签/搜索