最近在玩Git,就谈一谈Git与SVN的区别。
1.最核心的区别在于Git是分布式的,而SVN不是分布式的。
Git和SVN一样有自己的集中式版本库和Server端,但是Git是分布式的,在中心版本库或者说服务器上check out之后会在自己的机器上克隆一个自己的版本库,当不能连接网络时,你仍然可以提交文件,查看历史记录,创建分支等,等有网络再次连接上Push到Server端即可。
2.Git把内容按元数据方式存储,SVN是按文件。
因为.git目录是处于你机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,比如标签,分支,版本记录等。所有的资源控制系统都是把文件的原信息隐藏在一个类似的.svn,.cvs等的文件夹里。.git目录的体积大小跟.svn比较,会有较大的差距。这两个都是新建的文件,体积大小可以比较。
3.Git没有一个全局版本号,而SVN有。
4.Git的内容的完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。Linux kernel开创者和Git的开发者——Linus说,Git使用了SHA-1并非是为了安全性,而是为了数据的完整性;它可以保证,在很多年后,你重新checkout某个commit时,一定是它多年前的当时的状态,完全一摸一样,完全值得信任。
5.克隆一份全新的目录以同样拥有五个分支来说,svn是同时复制5个版本的文件,也就是说重复五次同样的动作。而Git只是获取文件的每个版本的 元素,然后只载入主要的分支(master),将大大节约了时间。
6.版本库(repository):SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git可以有无限个版本库。或者,更正确的说法,每一个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。如果主要版本库(例如:置于GitHub的版本库)发生了什么事,工作成员仍然可以在自己的本地版本库(local repository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他的版本库!