1) 最核心的区别Git是分布式的,而Svn不是分布的。能理解这点,上手会很容易,声明一点Git并非目前惟一的分布式版本控制系统,还有好比Mercurial等,因此说它们差不准多。话说回来Git跟Svn同样有本身的集中式版本库和Server端,但Git更倾向于分布式开发,由于每个开发人员的电脑上都有一个Local Repository,因此即便没有网络也同样能够Commit,查看历史版本记录,建立项 目分支等操做,等网络再次链接上Push到Server端。git
从上面看GIt真的很棒,可是GIt adds Complexity,刚开始使用会有些疑惑,由于须要建两个Repositories(Local Repositories & Remote Repositories),指令不少,除此以外你须要知道哪些指令在Local Repository,哪些指令在Remote Repository。算法
2)Git把内容按元数据方式存储,而SVN是按文件:由于,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上全部的东西,例如标签,分支,版本记录等。.git目录的体积大小跟.svn比较,你会发现它们差距很大。网络
3) Git没有一个全局版本号,而SVN有:目前为止这是跟SVN相比Git缺乏的最大的一个特征。分布式
4) Git的内容的完整性要优于SVN: GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时下降对版本库的破坏。svn
5) Git下载下来后,在OffLine状态下能够看到全部的Log,SVN不能够。测试
6) 刚开始用时很狗血的一点,SVN必须先Update才能Commit,忘记了合并时就会出现一些错误,git仍是比较少的出现这种状况。版本控制
7) 克隆一份全新的目录以一样拥有五个分支来讲,SVN是同时复製5个版本的文件,也就是说重复五次一样的动做。而Git只是获取文件的每一个版本的 元素,而后只载入主要的分支(master)在个人经验,克隆一个拥有将近一万个提交(commit),五个分支,每一个分支有大约1500个文件的 SVN,耗了将近一个小时!而Git只用了区区的1分钟!开发
8) 版本库(repository):SVN只能有一个指定中央版本库。当这个中央版本库有问题时,全部工做成员都一块儿瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git能够有无限个版本库。或者,更正确的说法,每个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。若是主要版本库(例如:置於GitHub的版本库)发生了什麼事,工做成员仍然能够在本身的本地版本库(local repository)提交,等待主要版本库恢复便可。工做成员也能够提交到其余的版本库!同步
9)分支(Branch)在SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。若是工做成员想要开啟新的分支,那将会影响“全世界”!每一个人都会拥有和你同样的分支。若是你的分支是用来进行破坏工做(安检测试),那将会像传染病同样,你改一个分支,还得让其余人从新切分支从新下载,十分狗血。而 Git,每一个工做成员能够任意在本身的本地版本库开啟无限个分支。举例:当我想尝试破坏本身的程序(安检测试),而且想保留这些被修改的文件供往后使用, 我能够开一个分支,作我喜欢的事。彻底不需担忧妨碍其余工做成员。只要我不合并及提交到主要版本库,没有一个工做成员会被影响。等到我不须要这个分支时, 我只要把它从个人本地版本库删除便可。无痛无痒。it
Git的分支名是可使用不一样名字的。例如:个人本地分支名为OK,而在主要版本库的名字实际上是master。
最值得一提,我能够在Git的任意一个提交点(commit point)开启分支!(其中一个方法是使用gitk –all 可观察整个提交记录,而后在任意点开啟分支。)
10)提交(Commit)在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经没法阻止事情的发生了。若是网路中断,你根本没办法提交!而Git的提交彻底属於本地版本库的活动。而你只需“推”(git push)到主要版本库便可。Git的“推”实际上是在执行“同步”(Sync)。
最后总结一下:
SVN的特色是简单,只是须要一个放代码的地方时用是OK的。
Git的特色版本控制能够不依赖网络作任何事情,对分支和合并有更好的支持(固然这是开发者最关心的地方),不过想各位能更好使用它,须要花点时间尝试下。