告别 SVN,Git 成“独苗”:GitHub 在 13 年后宣布淘汰 Subversion 支持

作者 | 核子可乐、Tina

在 Git 绝对的统治下,你还记得 SVN 吗?

明年一月,GitHub 将从 GitHub.com 删除 Subversion 支持,GitHub Enterprise Server 不久后也将遵循此操作。

GitHub 是全球规模最大的 Subversion 主机,但目前由于维护成本和版本控制的演变,GitHub 正在淘汰这个服务。

GitHub 告别 Subversion

GitHub 于 2010 年引入 Subversion 支持,那时候版本控制软件的格局与目前有很大的不同,大部分人使用的是有十年发展历史的聚焦式版本控制系统 Subversion ,而 Git 则是一个新生事物。当时,谁都没有料到分布式版本控制最终会接管聚焦式版本控制,更不会有人预料到 Git 会在十年后发展成为主流。

如今,十三年已经过去,有高达 94% 的开发人员在使用Git,而 Subversion 比以前少见得多。而且,根据 GitHub 的说法,每个月只有 5000 个存储库收到 SVN 请求,其中仅 0.02%的请求通过 Subversion 端点发送。

GitHub 的联合创始人 Scott Chacon 发推表明,“13 年前的愚人节,GitHub 发布了有史以来最好的愚人节帖子: SVN 在 GitHub 上完全可用。尽管它已经有了很长的历史,但目前它终于要结束了。”

告别 SVN,Git 成“独苗”:GitHub 在 13 年后宣布淘汰 Subversion 支持

对此,有网友表明惊讶:“GitHub 居然到目前还支持 SVN??”在 Git 后端上提供 SVN 并不是常用方法。列如 GitHub 的老对手 GitLab 仅支持 Git 以及最大的云提供商的托管服务 AWS CodeCommit、Cloud Source Repositories,而 Azure Repos 从未有过 Subversion 接口。

GitHub 停止 Subversion 支持也给其他企业敲响了警钟,Newfold Digital WP 战略负责人 Joost de Valk 跟评道:“GitHub 正在淘汰 Subversion 支持。也许是 WordPress 停止使用 Subversion 的时候了?”

告别 SVN,Git 成“独苗”:GitHub 在 13 年后宣布淘汰 Subversion 支持

为什么 Git 会成为版本控制市场上的独苗?

根据 2022 年 Stack Overflow 开发者调查报告,对于目前的版本控制软件市场份额,Git 占据了约 94%,其次是 SVN (Apache Subversion) 和 Mercurial。

告别 SVN,Git 成“独苗”:GitHub 在 13 年后宣布淘汰 Subversion 支持

曾经有一段时间,SVN 和 Mercurial表现也很突出,信任许多有十年以上开发经验的人会记得它们。只是如今,很明显,Git 成为了绝对的赢家。目前,让我们一起回忆一下版本控制的演变历史吧。

Apache Subversion

Subversion(SVN)是一套开源版本控制系统,通过中央服务器进行源代码维护;任何打算变更代码的用户都可以通过客户端访问到这些文件。与 Git 使用的分布式模型相比,SVN 的客户端-服务器模型显得比较老派,变更会先被存储在本地,并在推送到上游代码仓库时被分发至中央历史记录(及其他分支)。实际上,SVN 的确 是以之前的版本控制为基础,最初就是想成为 CVS(并发版本系统)的高兼容度继任方案。有些朋友可能不太熟悉,CVS 最初发布于 1982 年,属于版本控制系统(RCS)的一种前端和扩展。

上一代版本控制方案主要面向 10 到 15 年前的软件构建方式。当时,软件会被构建成聚焦代码仓库,所添加的全部功能都被合并至单一主干当中。分支本身很少见,即使有最终也会被吸纳进主干内。各种重大文件——特别是那些大型二进制文件——都可以进行“锁定”,防止其他开发人员在我们处理的同时做出变更。另外,文件、分支、标签等一切都以目录的形式存在。这种模型超级适合聚焦工作的开发团队,最终成果就是特定的一个版本,通过光盘或者下载链接的形式分发。

SVN 就是这种模型的免费开源版本。作为付费型客户端-服务器版本控制系统的典型代表,Perforce 在大型企业(特别是谷歌)中具备必定吸引力;但对于不打算为此额外花钱的用户,SVN 是个不错的选择。不少小公司(包括我们自己)刚开始都会用聚焦式版本控制来管理代码,这甚至成了许多开发团队的习惯和偏好。

但过去十几年间,工程组织的运作方式发生了颠覆性的变化。不再由中央开发团队在单一代码仓库上工作;目前我们面对的是多个独立团队,每个团队各自负责一项或多项服务。VonC 是一位版本控制专家,协助许多企业摆脱了 SVN。他认为 SVN 是一种专为“灵敏性较为低下的工作方式”而设计的方案。“这已经妨碍到了管理、代码仓库的创建/注册、以及常规开发工作流程。与之相对应的是,分布式模型在这些方面更加灵敏。我认为近期不断壮大的远程办公声势,将会进一步冲击这些封闭的环境系统。”

SVN 越来越无人问津的另一个缘由,就是 Git 用实际证明了自己更好、更强。高级软件工程师 Quentin Headen 在刚开始工作那会曾用过 SVN。“在我看来,SVN 有两个致命缺点。第一,它采用聚焦式设计,就是说 SVN 服务器必须处于运行状态才能接收开发者提交的变更。一旦互联网发生故障,麻烦就大了。第二点,分支是种负担。一旦创建了分支,就没法将其删除(如果我没记错的话)。虽然有一条命令可以删掉分支,但它依旧会被保留在历史记录中。Git 分支就更轻松易用,能在必要时直接删除。”

很明显,随着新一代版本控制系统的诞生,SVN 失去了其优势地位。而且需要注意的是,当时冲击 SVN 的绝不止 Git 这一位。

Mercurial

没错,Git 并不是分布式版本控制家族的唯一成员。Mercurial 与 Git 同样于 2005 年首次亮相,取得的江湖地位也在伯仲之间。但最终,天下尽归于 Git,这个信任大家已经看到了。

当初,Mercurial 似乎更照顾用过早期版本控制系统的开发者。VonC 指出,“这有点类似于 VHS 与 Betamax(两种磁带格式)之争。”

Mercurial 的核心开发人员 Raphaël Gomès 和 Pierre-Yves David 提到,时至今日不少大型企业仍在以某种形式使用着 Mercurial,包括 Mozilla、Facebook(可能已经转移到 Mercurial 的 Rust 移植版本,名为 Eden)、谷歌(在其 Piper 自定义版本控制方案中保留了部分 Mercurial 功能)、诺基亚和 Jane Street。

“如今,Mercurial 的核心优势就是它能在体量极大的项目(处理数百万次提交和数百万个文件)上进行扩展。多年以来,众多公司在性能改善和专用功能方面做出贡献,这让 Mercurial 成为管理极大 monorepos 的可行选择。”

来自谷歌的 Ry4an Brase 解释了 Mercurial 仍具生命力的缘由:“Git 已经与文件系统紧密结合。甚至 GitHub 也将代码仓库当成了磁盘上的文件进行访问。而大量用户针对单个代码仓库执行提交的并发需求,必定会超过文件系统的访问承载上限。谷歌和 Facebook 发现,Mercurial 能够适应这类数据存储需求,但 Git 不行。但随着 Git v2.38 和 Scalar 等近期发布的新成果,这种优势可能会逐步减弱。”

但 Mercurial 在吸引那些掌握大量 monorepos 的客户方面,还有另外一手绝活——可移植性与可扩展性。它是用 Python 编写的,所以不需要被编译成本地代码。只要具备 Python 解释器,它就能在任意操作系统上成为可行的版本控制选项。Mercurial 还具有强劲的扩展系统。Gomès 和 David 解释道,“扩展系统允许用户对 Mercurial 的各个方面做出调整,包括自定义行为或接入现有系统,这种灵活性在企业环境中超级受欢迎。”

如今,Mercurial 依旧拥有不少铁杆粉丝。该项目也还是个挺活跃的项目,Gomès 和 David 依旧在做代码贡献、管理发布周期,并举办年度会议。虽然算不上市场领先的工具,但 Mercurial 牢牢守住了自己的一席之地。

为什么 Git 能笑到最后?

纵观 2022 年版本控制领域的基本格局,实则不难理解为什么分布式版本控制成了软件开发者们的首选方案。但是,为什么 Git 的市场份额会比 Mercurial 大那么多?它们的诞生时间类似、功能配置接近,颇有种既生瑜、何生亮之感。Brase 给出的理由是,“对于个人项目,我会选择 Mercurial。但如果是要创办一家公司,我会使用 Git 来避免重新培训和新人难上手等问题。”

Mercurial 当然也有自己的优势,SVN 用户对它的设计和聚焦式操作会感觉超级熟悉。VonC 表明,“Mercurial 实则上手更快、用起来感觉更熟悉,由于它跟 Subversion 有那么几分类似,只是采用了分布式模型。”但这种过于忠实旧时光的思路未必就是好事,“这也成了反对者拒绝 Mercurial 的理由,由于在去中心化开发成为主流的今天,在分布式模型外面套上传统工具的壳子实在没什么必要。”

至于 Git 为什么能压倒性胜出,也许可以简单归结为强劲的平台与可观的首发用户群体。Gomès 和 David 坦言,“Mercurial 之所以在 2010 年代之初输给了 Git,一方面是由于当时 GitHub 的飞速发展,另一方面是由于 Linux 社区对 Git 拥有天然认同。”

尽管 Mercurial 最初也占据了一点有利位置,但随着时间推移,这种优势逐渐消散。Brase 认为,“Mercurial 的最初定位是通过内置的 Web UI 提供精心设计且连贯顺畅的用户体验。GitHub 虽然没能为 Git 提供同等水平的 Web 用户界面和连贯性,但庞大的贡献者群体和创始者的感召力最终牢牢压制住了 Mercurial。”

庞大贡献者群体所对应的,自然就是“雪崩”般的功能发布;再加上对用户需求的关注,无疑让 Git 顺利斩获可观的市场份额。近 15 年前,曾经有人将 Git 比作是“百战天龙”(特别擅长用身边小物件达成意外惊喜的特工片主角),而 Mercurial 则更像“007”。只要熟悉命令行,那 Git 能帮我们为几乎一切问题拼凑出定制化解决方案;而 Mercurial 相对更挑工作,如果合适则更加快速高效。面对现状,他的最新观点是“我当初对 Git 的用户界面最不满意,但它在多年的发展中逐步做出了改善(我目前用的是基于 Emacs 的 Git 前端,体验很好);而 Mercurial 的主要缺点是在大型代码仓库上执行程度很慢,而且直到目前也没能解决。”

与“百战天龙”中的 MacGyver 一样,Git 一直在即兴发挥、迎接挑战。而如同 007 的经典男主 James Bond,Mercurial 也坚持着自己的行事风格——在某些情况下效果很好,但有时候则相当拉胯。Brase 认为,“我们可以通过一个例子来体会 Git 和 Mercurial 在处理新功能时的差别,即「config」命令。「git config」和「hg config」都是用于编辑用户邮件地址等设置的命令。「git config」命令会自动为用户修改「~/.gitrc」,而且大多数情况下是正确的。Mercurial 的缔造者则坚决拒绝一切会编辑配置文件的提交贡献。相反,「hg config」只会在「~/.hgrc」上启动文本编辑器。这就像在嘲讽我们,被文本配置文件吓倒的程序员,就像是会晕血的医生——统统不合格。”

总而言之,虽然 Git 好像已经成了版本控制市场上的独苗,但这个世界总有更多解决问题的办法,如果大家对目前的某些选项感到沮丧,不妨再多探究一番。必定还有别的途径,必定还有其他值得学习的新思路。

参考链接:

https://www.infoq.com/news/2023/02/github-subversion-svn/

https://survey.stackoverflow.co/2022/#version-control-version-control-system

https://stackoverflow.blog/2023/01/09/beyond-git-the-other-version-control-systems-developers-use/

本文转载来源:

https://www.infoq.cn/article/9W1zPkwUqT1Zyx0QGt3J

© 版权声明

相关文章

20 条评论

您必须登录才能参与评论!
立即登录
  • 头像
    開杺 读者

    git能够成功,林纳斯和linux的起了很大作用

    无记录
  • 头像
    搬米粒的小蚂蚁 读者

    题目写错了吧

    无记录
  • 头像
    我是月月呀_sub 投稿者

    感觉挺好用的,可惜了

    无记录
  • 头像
    智能金刚指营销 读者

    傻子才把自己商用代码放git上,连个服务器都买不起的公司,你还指望老板能给你发几个钱

    无记录
  • 头像
    迈克尔 读者

    你到底要跟谁说再见

    无记录
  • 头像
    来自二次元的兔子 投稿者

    20人以内,svn是无敌的存在

    无记录
  • 头像
    不理你了呦 投稿者

    我的服务器还是用svn,反正就两三个人,也没啥分支,会更新和提交就行了呗

    无记录
  • 头像
    医疗观光 读者

    只知道git

    无记录
  • 头像
    FlyWang爱吃鱼 投稿者

    标题什么意思?

    无记录
  • 头像
    宅党 读者

    svn的主干开发真的很香的。虽然我现在用git,但还是怀念之前的svn主干开发,

    无记录
  • 头像
    卷娟 读者

    svn版本分支管理太麻烦等于手动操作

    无记录
  • 头像
    -鸢尾信笺- 投稿者

    论一个简洁名字的重要性

    无记录
  • 头像
    有福在线商城 读者

    公司git有二三十个分支,一旦一个分支开发超过10天,提交的内容非常多,合并分支时简直是车祸现场,最最关键是合并后无法撤销,因为你根本不知道哪次提交内容是你的分支,简直要命!

    无记录
  • 头像
    飞弹有话说 读者

    现在用git,但svn也有它的独到优势: 目录文件级别的权限控制。这样可以做到一个项目团队共用一个根目录,但不允许无关人员接触源码,不允许开发人员修改设计和测试文档。一个项目相关的所有东西都在一个目录下储存,归档管理异常方便,给甲方交付时打包即可。内部管理上也不需要为各个职能建立散落各处的不同平台,减少了管理成本。继续用svn并不一定就是落后,适合的就是最好的。

    无记录
  • 头像
    孤儿再生 读者

    一直用svn,挺好用的,小规模公司就是要集中管理。

    无记录
  • 头像
    陪伴 读者

    其实感觉git也是集中式的 难道你不push吗 一push还不是推送到服务器了

    无记录
  • 头像
    董学仁 读者

    我到现在都不知道svn和git的区别。。。

    无记录
  • 头像
    仲子 读者

    版本控制系统,用过Rational的clearcase,微软的sourcesafe,svn,到现在的git。

    无记录
  • 头像
    秋日落栀提 投稿者

    很多年没使用SVN了,一直使用git

    无记录
  • 头像
    小龙虾好想当锦鲤 投稿者

    这真的算是仁至义尽➕为民除害了。

    无记录