我应该查看Subversion以外的版本控制系统吗?

28

在过去的一年中,我已经成瘾于版本控制工具Subversion。我是一个唯一的开发者,也在处理一些自己的项目。使用SVN非常容易管理所有事情,因为它通过HTTPS托管在在线服务器上,所以我可以从任何地方访问我的代码。这也非常适合将代码部署到我们的生产/开发服务器。

我的观点是它做到了我需要它做到的一切,并且从未让我失望。

有更好的选择吗?是否有其他产品中的某些功能可以让我的生活更轻松?我总是尽量使用最好的软件,而且没有问题迁移到新技术。

我听说过GIT并进行了一些研究。我计划尝试一下,但与此同时,还有其他被认为是“行业标准”的源代码控制系统吗?它们是否比SVN更好?


2
你可能想尝试使用Mercurial。对于之前接触过svn的人来说,它已经足够了。 - Joshua Partogi
12个回答

27

Git、Mercurial和Bazaar是分布式版本控制系统,它们的运作理念是您不必始终连接到网络,并且不需要一个中央版本库。

如果您经常在“飞行模式”下(例如在飞机上无法提交),进行大量离线工作,请看看Bazaar。我发现它比Git或Mercurial更容易适应。

如果您始终连接到网络并且是唯一的开发人员,则可以使用Subversion。

此外,请考虑将您的主目录保留在Subversion的价值。


9
我会将其表述为:“如果你始终拥有非常好且快速的网络连接到你的中心化服务器,中心化服务器始终无误地工作,你只在一台机器上进行工作,并且没有其他人参与项目,那么它可能并不比 git 差多少。” - Dustin

16

Mercurial

我之前主要使用CVS和SVN,感到很满意。但后来开始了解分布式源代码控制 (DSVC),因为对此有很多热议。使用DSVC后,我发现我的开发风格发生了变化,更加流畅和适应性强,使我可以轻松地合并回主干或实验分支。

  • Mercurial可以从一人团队扩展到大型项目(例如OpenJDK),而几乎没有任何问题。
  • Mercurial的速度很快,虽然可能不如GIT快,但仍然非常迅速。
  • Mercurial Queues是管理补丁的绝佳方式,速度非常快。
  • 它可以运行在不同的操作系统上,兼容性非常好,因为它是基于Python的。
  • 学习曲线比GIT低,读几篇文档就可以基本掌握 (http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/)。
  • hg允许(像许多DSVC一样)您使用hg-svn和hgsubversion与企业SVN源代码控制进行接口交互,后者是一个很棒的扩展,可以进行检出,但还不能推送或提交功能。
  • 您还可以设置一个HTTP服务器通过SSH进行推送和拉取。
  • 还有一个非常好的选项,与您的编程伙伴一起简单地启动HTTP服务器,在本地主机上运行,并在您进行代码冲刺时使他们能够推送和拉取。
  • 您还可以通过此HTTP页面查看项目的当前状态。
  • 最后,这里提供了简要命令描述 (http://edong.net/2008v1/docs/dongwoo-Hg-PDF.pdf)

Git

  • 我试用过,它对SVN的支持比Mercurial更好。但由于hgsubversion越来越流行,正在成为git svn的竞争对手。

Git非常酷,但你需要不断地维护你的源代码仓库并重新打包它。由于它由许多bash脚本组成,在Windows上运行时会出现问题。但它非常快速,并且具有许多功能供您使用。实际上,功能的数量可能是一个缺点。

BZR

  • 从未尝试过它

自从我开始使用HG以来,我就没有回头看Git了。


Bazaar 比 Mercurial 慢,不过几乎相同。 - Joshua Partogi

10

我个人会选择使用Subversion。从专业的角度来看,我发现比起GIT,更多的工作机会要求使用(并知道)Subversion。此外,有很多基于Subversion开发的开源和免费工具,更不用提Subversion庞大的社区了。

版本控制不一定是最新和最好的,更多时候它是经过验证可靠的。


如果你因为懂得Subversion而接受了一份工作,那么你可能会在办公室度过一些无聊的时光。GIT可以实现即时协作,更加有趣。 - Hugo
评论是说这是一种能让你脱颖而出的技能,仅此而已 :-) - Jason Whitehorn
3
使用版本控制系统(VCS)有多难?或者学习一个VCS有多难?当然,了解雇主所使用的VCS的细节会有所帮助,但是无论在哪个工作岗位上,VCS都只是一个辅助工具,而不是整个工作的核心 - 比如编写一些应用程序或产品。 - Jonathan Leffler

10
改变的最好理由是必要性。但是,听起来好像没有真正需要改变的必要。你是一支"单兵作战"的部队,所以大多数强大的功能并不适用于你的情况。是的,人们会同我争论这一点,但他们会推销这个或那个功能,而你很可能真的不需要。时间是关键,如果将来你的需求发生了变化,那就改变解决方案。
问题空间总会有更好或不同的解决方案,例如源代码控制,但你应该平衡个人发展、过程/实践改进和交付工作成果。你可以学习更多关于源代码控制的不同解决方案/应用程序,以扩展你的知识,认识到何时该切换解决方案,但现在还是坚持使用有效的解决方案。

9

以下是从MarkMcB那里得到的从Subversion转换到git的3个原因

  • 无限的、易于操作的、非基于文件系统的本地分支
  • 暂存临时工作
  • 在公共提交之前进行协作

(阅读链接文章,以获取完整的解释和直接比较如何在git和Subversion中执行这三个操作。)


SVN 文件系统基于哪个版本开始使用的? - oxbow_lakes

5

我个人也会选择使用Subversion, 有更好的选择吗?

Subversion是一个很棒的版本控制系统,你很满意它的表现。如果你想进一步了解,我可以向你推荐一些关于持续集成的信息。有很多工具可以帮助你自动构建、进行自测、检查每次提交的完整性等等...


3

Mercurial也值得考虑;分支更加友好,而且可以在没有网络连接的情况下工作。直到我从SVN转移到Mercurial之后,我才认真尝试将工作分成分支。

我最想念的是TortoiseSVN;有一个类似的替代品(TortoiseHg)非常不错,但它并不完全相同。

无论如何,从SVN创建Mercurial仓库非常容易...尝试一下,看看是否适合您。


2

规则1:"永远不要改变一个正在运行的系统"

此外,由于有许多闪亮的新解决方案(对于您没有的问题,因为您是独自工作),您应该考虑切换到新的版本控制系统的成本:

导入subversion到Mercurial/git并不是一项容易的任务。目前没有工具可以使用dumpformat导入svn repos。因此,如果您不使用dumpformat,则需要手动/通过脚本从svn检出所有分支/标签,并将它们添加到git/BZR/Mercurial中。

所以我不知道您的存储库有多大(我的存储库范围从20 MB到24 GB),但是检出整个存储库需要很长时间,即使是带有许多标签的小型项目也会占用大量硬盘空间。

另一个问题是,在迁移完成之前,您无法继续工作。


git svn init -s http://svn-project.com/svn/my_proj git svn fetch git repack -d
这样可以将它压缩得非常好,硬盘不是问题。实际上使用Git也不错。
- Setori
Git、Mercurial和Bazaar都有很好的从Subversion导入器;通常可以用它来在DVCS和Subversion之间交换提交(有一些限制,例如Subversion 1.5之前没有合并跟踪)。 - Jakub Narębski

1

我和你一样,经常探索以获取最佳工具。

我曾尝试过 SVN 用于 SOLO 工作,有人向我推荐了 Mercurial(hg)。现在我已经开始做关于它的演讲了。在 Windows 上,它比 git 更加友好。现在我想,“为什么 SVN 要把像标签这样简单的任务复杂化呢?” SVN 不知道标签是什么。对于 SVN 来说,标签只是一个副本。而在 Mercurial 中,标签是一个修订版本的别名。这有多复杂呢?

性能是另一个问题。在 Mercurial 中,您的 repo 存储在本地机器上。因此,日志、差异或历史记录非常快。

虽然我不知道有哪些服务器支持在线版本的 Mercurial repo。


啊,对我来说能够通过HTTPS提供存储库是必须的。不过,我会继续查看它。谢谢。 - user19302
Mercurial可以通过https提供存储库,但我不知道公共服务器。我认为有两个解决方案:一个是svn-hg桥接应用程序;另一个是在Mercurial网站上查找公共服务器。 - user2427
我又来了。看看这个链接:http://www.selenic.com/mercurial/wiki/index.cgi/MercurialHosting - user2427
我曾经认为在SVN中,标签是对于某个版本的别名。例如,标签version1指向修订版本566。 - James McMahon

1

即使您实际上没有使用分布式工作流程,也绝对值得研究“分布式”版本控制。学习Git的努力是值得的,因为它可以让您拥有私有分支和对本地提交的控制。我主要使用git-svn(其他团队成员使用常规SVN客户端,因此我们有一个正常的集中式工作流程),它运行非常顺畅。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接