29_版本控制SVN和Git的区别
SVN
SVN 作为一个开源的版本控制系统,管理着碎时间改变的数据,这些数据放置在一个中央资料档案库(repository
)中。这个档案库就像一个普通的文件服务器,它会记住每次文件的变动。我们可以浏览文件的变动历史,把当前版本的文件恢复到旧的版本。
集中式代码管理的核心是服务器,所有的版本信息都放在服务器上,因此受到网络的限制。所有开发者在开始一天的工作前都要从服务器获取最新版本的代码,然后进行开发,再提交代码,解决冲突。
Git
Git 是一款开源的分布式版本控制系统,可以敏捷高效的处理或大或小的项目。 分布式和 SVN 等集中式的最大区别在于每个开发人员从中心版本库/服务器上 check out 代码后会在自己的机器上克隆一个自己的版本库。这样在没有网络的情况下在本地也可以进行开发,代码管理。
Git 分布式模型Git 的一些功能特性:
- 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上;
- 在自己的机器上根据不同的开发目的,创建分支,修改代码;
- 在单机上自己创建的分支上提交代码;
- 在单机上合并分支;
- 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并;
- 生成补丁(patch),把补丁发送给主开发者;
......
Git 是一个系统,相当于一个工具,而 Github 就是基于这样一个系统的平台,让开发者更高效地使用 Git 去托管自己的代码。
Git 与 SVN 区别
-
Git 是分布式的,SVN 是集中式的。好处是跟其他同事不会有太多冲突,自己写的代码放在自己电脑上,一段时间后再提交、合并,也可以在不用联网在本地提交。
-
Git 把内容按元数据方式存储,而 SVN 是按文件。所有的资源控制系统都是把文件的元信息隐藏在一个类似
.svn
,.cvs
等的文件夹里。如果你把.git
目录的体积大小跟.svn
比较,你会发现它们差距很大。因为,.git
目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。 -
Git 分支和 SVN 的分支不同。分支在 SVN 中一点不特别,就是版本库中的另外的一个目录。而 Git 可以从同一个工作目录下快速的在几个分支间切换。
-
Git 没有一个全局的版本号,而 SVN 有。SVN 里容易阅读的数字版本号,它实际是任何一个相应时间的源代码快照。
-
Git 的内容完整性要优于 SVN。Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
SVN 和 Git 的适用性
SVN 更适用于项目管理, Git 仅适用于代码管理。一个研发队伍的成员正常包括:需求分析、设计、美工、程序员、测试、实施、运维,每个成员在工作中都有产出物, 包括了文档、设计代码、程序代码,这些都需要按项目集中进行管理的。SVN 能清楚的按目录进行分类管理,使项目组的管理处于有序高效的状态。
参考文章
项目管理Git与SVN
Git和SVN之间的五个基本区别
注,文章只作为个人知识整理,学习使用。如有违规可随时@我,谢谢。