我正在尝试创建并遵循版本控制的最佳实践,并在Subversion中遇到了对原子提交的引用。由于我从未听说过这个动作,所以我有几个问题。
答案 0 :(得分:16)
原子提交没有特殊命令。 Subversion中的每个提交都是原子的。
这意味着每次提交(任意数量的文件)都会成功或失败 不可能只有一些提交的文件进入存储库而其他文件没有(例如,由于在提交操作过程中发生错误或其中一个文件发生冲突)。
这与TortoiseSVN相同,因为它建立在“正常”的Subversion功能之上。
以下摘自Subversion book:
svn提交操作发布 更改任意数量的文件和 目录作为单个原子 交易。在你的工作副本中,你 可以改变文件的内容;创建, 删除,重命名和复制文件和 目录;然后提交一个 作为原子的完整变更集 事务。
通过原子交易,我们的意思是简单 这个:要么所有的变化都发生了 在存储库中,或者没有 发生。 Subversion试图保留 在程序面前这种原子性 崩溃,系统崩溃,网络 问题和其他用户的行为。
答案 1 :(得分:3)
这个想法只是对一个文件的更改通常与另一个文件的更改有关。一些旧的版本控制系统在一次提交中并没有真正处理多个文件(就像你所说的“原子提交”),或者它们做得很差。
您无需为此做任何特别的事情。这就是Subversion的工作方式。但是使用Subversion,你可以选择一次检入一个文件,或者同时或者在任何地方执行所有修改过的文件。
将多个文件作为一个提交执行的想法是 - 一般来说 - 您应该能够在任何特定版本检出存储库,它至少会编译并希望运行。这在团队中非常重要。现在在实践中,这可能不是100%的时间,但指导原则是合理的。
因此,无论您是执行一个文件,还是一次性更改所有内容,或者您正在检查的内容之间的某些内容都应该作为一个提交有意义。就像你修复了一个bug并需要修改8个文件一样,将所有这8个文件签入为一个提交,并提供一条消息,说明你修复了哪些bug以及如何修复它。如果出现问题,将会更容易推出。
答案 2 :(得分:2)
这种情况下的“原子”是指原子操作。你可以在这里找到一个很好的定义: http://en.wikipedia.org/wiki/Atomic_operation
SVN中的所有提交都是自动原子的,因此您可以在提交的任何地方免费获取它。
答案 3 :(得分:1)
如果您想知道哪些原子提交有用,请想象您将分支合并到磁盘上的主干中。你从早上开始,午餐后你就完成了,一切都在编译,所有单元测试都成功运行。然后,您提交在该合并期间更改的200多个文件。
在SVN中,提交成功并且所有200多个文件一次提交或提交失败,并且根本没有对存储库进行任何更改。 (关于这一点,没有什么可说的了。这就是它应该一直存在的方式。)
在没有原子提交的CVS中,可能会发生您的提交在150个文件后被中断,因为有人偶然发现您的网络电缆,其余50多个文件未提交,使存储库处于中间状态。当您尝试插入网络电缆时,团队中的其他人会检查另一组更改。这组更改与您已签入的更改不相交,因此其他人的提交成功。但是,更改不兼容。现在团队陷入了一个包含甚至无法编译的代码的存储库,更不用说通过任何测试了。更糟糕的是:你们两个让一个团队经理尽可能快地解决这些不相容的变化,以便团队的其他成员可以停止玩Quake并重新开始工作。
令人惊讶的是,这种情况并不像看起来那么不可能。我去过那里好几次,收集了我那些糟糕的衬衫。
答案 4 :(得分:0)
要了解原子提交的真实用法,请阅读有关持续集成的内容:
http://en.wikipedia.org/wiki/Continuous_integration
该用途实际上是确保您可以在集成问题时撤消特定开发人员的所有更改。这是保持存储库中代码完整性的一个非常强大的功能。