代码版本控制用 SVN 还是 Git 好?
DevWeekly 收集整理每周优质开发者内容,包括开源项目、工具资源、技术文章等方面,每周五首发于DevWeekly,欢迎大家 Star 并收藏!
工作几年,项目开发过程中,刚好 SVN 和 Git 都用过很长时间。
在对比 SVN 和 Git 到底哪个好之前,首先需要解释一个概念:版本控制系统。
这样更加有助于大家对代码版本控制有个全局清晰的认识。
1 版本控制系统
版本控制系统是用来跟踪、制作和管理软件代码变化的工具。它能够帮助开发者存储不同阶段对文件所做的每一个改动,这样我们、或者与我们协作开发的同事就可以在检索到这些改动。
目前主要包含 3 种类型的版本控制系统:
本地版本控制系统
集中式版本控制系统
分布式版本控制系统
下面,就分别介绍一下这 3 种版本控制系统。
1.1 本地版本控制系统
本地版本控制系统是位于你本地计算机上的一个本地数据库,其中每个文件的变化都以补丁的形式存储。
每一个补丁集只包含自上一版本以来对该文件所做的修改。
为了看到文件在任何给定时刻的样子,有必要将文件的所有相关补丁按顺序罗列在一起,直到逐个查看找到对应的版本为止。
本地版本控制系统有一个很大的问题,所有东西都储存在本地。如果本地数据库出了什么问题,所有的补丁都会丢失。如果一个版本发生了什么事情,那么这个版本之后的所有修改都会丢失。
另外,与其他开发者或团队合作是非常困难的。
1.2 集中式版本控制系统
集中的版本控制系统有一个包含所有文件版本的服务器,多个用户可以同时访问服务器上的文件,把它们拉到他们的本地计算机上,或者从他们的本地计算机上把它们推到服务器上。
相对本地版本控制系统,这与其他开发者或团队的合作变得容易。
这种结构的最大问题是,所有东西都存储在集中式服务器上。如果该服务器出了问题,没有人可以保存他们的版本变化,拉动文件或进行协作。
与本地版本控制类似,如果数据库被破坏,而备份没有被保留,你就会失去整个项目的历史,除了人们碰巧在他们的本地机器上有的单一快照。
比较知名的集中式版本控制系统有 Microsoft Team Foundation Server (TFS)和 SVN。
1.3 分布式版本控制系统
有了分布式版本控制系统,用户不仅是从服务器上拉取最新的文件快照,而是一种完全镜像存储库,包括全部历史。
因此,在一个项目上合作的每个人都拥有整个项目的本地拷贝,换句话说,拥有自己的本地数据库和自己的完整历史。
在这种模式下,如果服务器变得不可用或出了问题,任何一个用户资源库都可以将项目的版本拷贝发送给其他用户,或者在服务器可用时再推回到服务器上。只要一个用户包含一个正确的副本就足够了。
2 Git vs SVN
下面,就分别从服务器架构、分支管理、访问控制、存储要求、可用性等方面对比 Git 和 SVN 的差异。
2.1 服务架构
Git 软件被安装在本机上,每个开发者在个人电脑上都有一个项目完整版本历史的拷贝。
Git 的各种操作发生在本地,同时充当客户端和服务器,所以,开发人员不必一直处于联机状态。
SVN 具有相互独立的服务器和客户端。只有开发者正在处理的文件被保存在本地机器上,而开发者必须处于联机状态,每次操作,用户检出最新文件,然后再将修改提交到服务器上。
2.2 分支
SVN 分支是在版本库中以目录形式创建的,这种目录结构是 SVN 分支的核心痛点。
由于 SVN 是一种目录,因此,它不能反映出开发者信息,这样,就很容易造成冲突、缺失、杂乱无章等问题。
这使得分支和合并模式变得复杂,这在管理上也很费时。
Git 分支只是对某次提交的引用,它是轻量级的。
你可以在任何时候创建、删除和改变一个分支,而不会影响到提交的内容。
如果你需要测试一个新功能或发现一个错误,你可以建立一个分支,进行修改,将提交推送到中央仓库,然后删除该分支。
2.3 访问控制
默认情况下,Git 假设所有的开发者都有相同的权限。
相反,SVN 可以指定每个文件级别和每个目录级别的读和写权限控制,权限控制方面更加精细。
2.4 存储要求
Git 仓库不能处理大型二进制文件。
SVN 仓库除了可以处理代码外,还可以处理大型二进制文件。
在 SVN 中存储大型二进制文件会比在 Git 中占用更少的空间。
2.5 可用性
SVN 不仅可以使用命令行,也可以作为一款客户端工具使用,不仅可以用于管理代码,还可以管理非代码类文件。
Git 以命令行使用为主,而且,由于服务架构相对复杂,因此,使用方面有一定学习成本。
3 Git 和 SVN 哪个更好?
作为版本管理方面比较知名的两款工具,它们分别是集中式管理和分布式管理的代表,各有擅长的方向,很难下定结论哪个更好。
如果你要管理大型二进制文件或者非代码资产,SVN 更具有优势。如果你对离线管理,或者对于分支和合并有更复杂的要求,那么可以选择 Git。
建议大家有空可以多浏览 Github,有很多非常优秀的开源项目。但是,目前 Github 上项目多如牛毛,而且刷榜现在也非常严重,想要找到优质的项目变得越来越难。这里,给大家推荐 Github 上一个非常不错的项目《DevWeekly》,这个项目每周都会精挑细选一些优质的开源项目,涵盖 C++、JAVA、JavaScript、Python、Go 等不同编程语言。此外,还有一些开源工具、优秀的技术文章,喜欢的同学可以 Star 并收藏一下,每周五会定期更新:
GitHub - Jackpopc/DevWeekly: 每周五发布,精选优质开发者内容,包括开源项目、工具资源、技术文章等方面。
版权声明: 本文为 InfoQ 作者【Jackpop】的原创文章。
原文链接:【http://xie.infoq.cn/article/8fe291785926a438aae9a7d68】。文章转载请联系作者。
评论