在充满热情的开发人员的酒吧里,有许多种开始战斗的方法。 一种更有效的方法是大喊“您怎么能说SVN比Git更好?” (反之亦然)在人群中随机出现。 然后坐下来,观察混乱,然后将钱投入获胜者(如果您是博彩类)。
实际上,SVN( Apache Subversion )和Git都是有效且流行的版本控制系统(VCS),可在软件开发中实现工作流和项目管理。 总体方法和行业推荐的最佳实践都有差异。 每个程序员(或开发团队的负责人)都要为他们从事的每个项目选择正确的版本控制系统。 信不信由你,但是做出错误的决定可能会耗费开发人员许多时间,大量的汗水和眼泪。
真的有什么区别? 你什么时候该选哪个? 让我们首先回顾一下Git与SVN之间的区别。
Git和SVN之间的区别
主要的也许是最著名的区别在于其核心体系结构。 Git版本控制在SVN集中时进行分发 。 但是,那只是冰山一角。 如果您想有效地使用这两种方法,则两者之间在方法和功能上的其他变化也很重要。
吉特 | SVN | |
服务器架构 | 在本地安装,同时充当服务器和客户端。 | 需要集中式服务器和用户客户端。 |
修订版 | Git是一种SCM(源代码管理)工具。 因此,它没有全局修订号功能。 | SVN是版本控制系统 。 因此,它具有全局修订号。 |
储存库克隆 | 是 | 没有 |
储存格式 | 元数据 | 档案 |
储存要求 | 处理大型二进制文件的能力有限。 | 除代码外,还可以处理大型二进制文件。 |
分枝 | 分支是对特定提交的引用。 可以随时创建,删除和更改它们,而不会影响其他提交。 | 在存储库中将分支创建为目录,并且当分支准备就绪时,会将其提交回主干。 |
访问控制和权限 | 假定所有贡献者对整个代码库都具有相同的权限。 | 允许使用按文件级别和目录级别的读写访问控制的精细权限。 |
使用方便 | 难以学习 | 更容易学习 |
加密哈希 | 为了防止存储库损坏(由于网络问题或磁盘故障),Git支持加密散列的内容。 | 不适用 |
执照 | GNU(通用公共许可证) | 在Apache许可下开源 |
变更追踪 | 储存库级别 | 文件等级 |
原始开发者 | Linus Torvalds(为Linux内核代码控制开发) | CollabNet,Inc |
在此比较的基础上,我们可以查明每种方法的优缺点。
SVN相对于Git的优势
Web上的普遍观点是Git作为其项目中版本控制的首选解决方案。 但是,一些值得注意的开源项目仍然选择Subversion over Git( WordPress代码库 ),其中大约有24%的OpenHub项目使用SVN 。 这正是我们选择专注于SVN优于Git的原因。
卓越的架构性能
可以说支持诸如SVN之类的集中版本控制体系结构的一件事是,它可以有效地处理网络流量并确保团队与开发人员之间的同步 。
使用SVN时,只需要同步本地资源和服务器上最新资源之间的差异即可。 这比使用Git快得多 。 由于它是分布式的,因此您必须下载所有更改,即使这些更改添加了千兆字节的无用资产,这些资产自此已从分支中删除。
这很浪费,尤其是当您在拥挤的网络上工作并且在存储库同步时不想打na时。 更重要的是,如果您醒来后发现自己下载了数十亿字节的存储库,那么您签出的分支根本没有被其他人触摸过。
更好地处理二进制文件
SVN与Git相比,最大的优势也许在于它处理二进制文件的方式 。 之所以具有这种优势,是因为Subversion为Lock-Modify-Unlock模型提供了支持 。 它使用锁定命令(svn:needs-lock属性)在SVN中实现,而Git由于其分布式特性,根本不提供独占文件锁定 。
对于代码库中具有多个不可合并的二进制资产的企业项目,这是一个真正的交易突破点,并且通常是他们选择坚持使用SVN的原因 。
可用性和易用性
这可能是争论的话题,但是许多开发人员坚持认为SVN比Git更易于学习和使用 。 通过提供更好的抽象功能,可以更快地添加功能,并且语法也更简洁。
访问控制
Git架构假定使用它的每个人都具有相同的权限。 事实上,在自己的分支中获得对整个代码库的读写访问权是事实。 实际上,它没有自己的用户权限指定。 尽管在开源世界中完全可以接受,但是这种方法在企业环境中可能会带来风险 。 在许多情况下,由于不良的访问控制,机密和专有信息可能会泄露给从事代码某些部分工作的第三方承包商。
SVN并非如此,在SVN中, 系统内置了基于路径的精细用户权限,从而可以实现更严格的代码安全性和控制。
Git比SVN的优势
有人声称Git成为许多开发者的默认选择的主要原因实际上是GitHub , 它易于共享代码 。 这本身并不是选择SVN而不是Git的理由,但可能会阐明为什么有很多人这样做的原因。
Git的普及
关于Git优越性的一种鸡肉和鸡蛋的困境正在显现。 感谢GitHub和开放源代码运动,它真的更好还是仅仅拥有更好的PR? 无论哪种方式,似乎所有很酷的孩子都在做,甚至那些很酷的孩子都在追赶。
(几乎每个reddit上的开发者)
合并更容易
无论使用哪种版本控制体系结构,合并存储库都绝非易事。 也就是说, Git是用于合并存储库的更好的体系结构 。 这仅仅是因为合并来自多个贡献者的代码的能力是Git的主要重点,并且该体系结构旨在支持社区协作。
离线支持
假设您正在旅途中,并且需要修复一个严重的错误。 您可以同步存储库,在飞行或会议中对修复进行编码,然后快速推送并提交。 到目前为止一切都很好,但是如果您发现自己离线,会发生什么? Git的分布式特性确保可以在本地独立于主存储库地推送和提交代码 。 这使得Git版本控制不仅减轻了网络流量 ,而且确保了与集中式服务器的独立性 ,而集中式服务器在您需要时可能会崩溃也可能不会崩溃。
提交并提交版本控制趋势
毫无疑问,软件版本控制很重要,主要争论在于哪种架构和方法最好以及何时使用。
随着Git成为针对开源开发的去中心化解决方案,而SVN仍然是企业的最爱,辩论可能会持续数年。 奇怪的是,它将像Mercurial,Bazaar以及旧玩家(CVS)和新玩家(Microsoft Azure DevOps)这样的系统的代表更加发声。