Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn Subversion中原子提交的价值是什么?_Svn_Tortoisesvn_Commit_Atomic - Fatal编程技术网

Svn Subversion中原子提交的价值是什么?

Svn Subversion中原子提交的价值是什么?,svn,tortoisesvn,commit,atomic,Svn,Tortoisesvn,Commit,Atomic,我试图创建并遵循版本控制的最佳实践,在Subversion中遇到了对原子提交的引用。因为我从来没有听说过这种行为,所以我有几个问题要问 它的目的是什么 什么时候使用 它与普通提交有什么不同 它对用户可用吗?如果是,怎么做 原子提交没有特殊命令。Subversion中的每个提交都是原子的 这意味着每次提交(任意数量的文件)都将作为一个整体成功或失败。 不可能只有一些被提交的文件使其进入存储库,而其他文件不可能(例如,由于提交操作的中间发生错误或文件中的冲突)。 这对于OrtoiseSVN也是一样

我试图创建并遵循版本控制的最佳实践,在Subversion中遇到了对原子提交的引用。因为我从来没有听说过这种行为,所以我有几个问题要问

  • 它的目的是什么
  • 什么时候使用
  • 它与普通提交有什么不同
  • 它对用户可用吗?如果是,怎么做

    • 原子提交没有特殊命令。Subversion中的每个提交都是原子的

      这意味着每次提交(任意数量的文件)都将作为一个整体成功或失败。
      不可能只有一些被提交的文件使其进入存储库,而其他文件不可能(例如,由于提交操作的中间发生错误或文件中的冲突)。 这对于OrtoiseSVN也是一样的,因为它建立在“正常”的Subversion功能之上


      以下是该报告的摘录:

      svn提交操作发布 对任意数量的文件和 目录作为单个原子 交易在你的工作副本中,你 可以更改文件内容;创造,, 删除、重命名和复制文件和 目录;然后犯下一个错误 作为原子的完整更改集 交易

      所谓原子事务,我们的意思很简单 这是:要么所有的变化都会发生 在存储库中,或者没有 发生。颠覆试图保留 面对程序的原子性 崩溃、系统崩溃、网络崩溃 问题,以及其他用户的操作

      本例中的“原子”是指原子操作。你可以在这里找到一个很好的定义:


      SVN中的所有提交都是自动原子的,所以无论您在哪里进行提交,都可以免费获得它

      这个想法很简单,一个文件的更改通常与另一个文件的更改相关。一些较旧的版本控制系统并没有真正在一次提交中处理多个文件(您称之为“原子提交”),或者它们做得很差

      你不必为此做任何特别的事情。这就是颠覆的工作原理。但是使用Subversion,您可以选择一次签入一个文件,或者一次签入所有修改过的文件,或者在这两者之间的任何位置签入所有修改过的文件

      一次提交多个文件的想法是,一般来说,您应该能够在任何特定版本上签出存储库,它至少会编译并运行。这在团队中很重要。现在在实践中,这可能不是百分之百的正确,但指导原则是正确的


      因此,无论您是一次执行一个文件、所有更改,还是签入之间的某个更改,都应该作为一次提交。例如,如果您修复了一个bug,需要修改8个文件,请在提交时签入所有这8个文件,并显示一条消息,说明您修复了什么bug以及如何修复它。如果以后出现问题,它将更容易推出。

      如果您想知道原子提交的好处,请想象您将一个分支合并到磁盘上的主干中。您从早上开始,午饭后完成,一切都编译好了,所有单元测试都成功运行。然后提交合并期间更改的200多个文件

      在SVN中,要么提交成功并且一次性提交了所有200多个文件,要么提交失败并且没有对存储库进行任何更改。(关于这一点,没什么好说的了。事情本来就是这样的。)

      在没有原子提交的CVS中,您的提交可能会在150个文件之后中断,因为有人在您的网线上绊倒,剩余的50多个文件没有提交,使存储库处于中间状态。当您尝试插入网络电缆时,团队中的其他人会检查另一组更改。这组更改与您已签入的更改不相交,因此其他人的提交成功。但是,这些更改是不兼容的。现在,团队被困在一个存储库中,其中包含的代码甚至都无法编译,更不用说通过任何测试了。更糟糕的是:你们两个都有一个团队经理在督促你们尽快修复那些不兼容的更改,这样团队的其他成员就可以停止玩“地震”游戏,重新开始工作


      令人惊讶的是,这种情况并不像看上去那么不可能发生。我去过那里好几次了,收到了我收集的一些劣质衬衫

      要了解原子提交的真正用途,请阅读以下关于持续集成的内容:


      其用途实际上是确保在出现集成问题时可以撤消特定开发人员的所有更改。这是保持存储库中代码完整性的一个非常强大的功能。

      我的产品组中有很多CVS,所以我知道其中的痛苦。我最希望的事情之一是“文件集提交”,或者在这里提到的原子提交。我想知道最佳实践是否都表明,尽管提交本身始终是原子的,但提交的原因可能不是“原子的”。例如,这些准则可以是:确保在提交之前构建不会中断。每个bug修复发出一次提交。这个想法是在需要回滚时尽量减少痛苦。你最不正确的说法是“这是不可能的”。