对于版本控制系统,原子提交是什么意思?


Answers:


69

这意味着当您对版本控制系统进行提交时,您想要提交的所有内容都会进入,或者什么都不会做。

在CVS中,当您尝试提交时,有可能在多个文件上成功提交,然后在其他几个文件上失败(因为它们已更改)。这将使存储库处于不幸的状态,因为一半的提交不存在,并且很可能您已将事物置于无法编译或更糟的状态。现在,您必须加快速度并整合所有更改,以便可以在其他人需要更新并获取破损的更改集之前提交其他文件。

在SVN中,这不会发生-SVN要么提交您所做的更改,要么会使整个更改集失败。因此,您永远不会由于提交问题而使存储库处于损坏状态。


9
这方面的一个重要的结果是,如果你看看在任何给定的状态,那么结果总是一致的状态(不包含任何用户的错误,比如忘记当然提交文件):这是无论是之前提交或从提交,中间没有任何内容。在CVS中,它可能来自“提交的一半”。SVN行为对于诸如持续集成之类的事情非常有用。对于CVS系统,那些系统用于强制执行“安静时间段”,在该系统中,如果在结帐后以给定的秒数/分钟的次数执行不再提交,则它们仅使用给定的结帐。
约阿希姆·绍尔

2
在阅读本文时,关于使用CVS的黑暗记忆使我震惊。
shabunc 2012年

9
@Spoike-是的,但这是故意的行为。在CVS中,可以毫无问题地发生问题,而在SVN中则必须进行处理。
迈克尔·科恩

3
@DanNeely-CVS一次提交它们。这就是为什么要进行部分提交的原因-有些文件会通过,然后在遇到无法提交的文件(由于冲突)时停止。我认为这是CVS最初源自RCS的结果。
迈克尔·科恩

4
另外,请注意,使用CVS,即使您没有遇到错误并且提交了所有内容,连接速度更快的人也可以在提交过程的中途更新其源代码树,从而使它们处于不一致的状态。(而且我希望时间戳会散布开,以便尝试在提交的中间日期/时间之前检查树会得到类似的结果。)
SamB 2012年

15

例如,在再见CVS中对此进行了解释我被安迪·莱斯特Andy Lester)撰写的颠覆文章:

如果我尝试在Subversion中提交,但是其中一个文件有冲突或已过期,则不会提交任何文件。在CVS中,您必须立即修复一半提交的文件。

CVS迫使程序员立即修复合并的事实会适得其反。相比之下,延迟/取消/仔细合并更改的选项是一个很大的好处。


上一篇文章中解释了SVN相对于CVS的其他好处:

  • 您所做的所有操作的本地版本
     
    如果要使用diff,则必须能够连接到存储库。没有网络连接,没有差异。Subversion存储您正在处理的本地原始副本,因此svn diff可以正常工作。想重新开始吗?svn revert也可以不连接。

  • 修订的符号名称
     
    HEAD是CVS中主干的尖端的名称,但是我一直希望能够说出“ -r-1”,就像我在PVCS时代回过头来一样。使用CVS,我必须在要编辑的内容上进行cvs日志记录,然后减去一个。没意思 使用Subversion,我可以说svn diff -r PREV。

  • 真实状态报告
     
    在CVS中,查看服务器上是否有更新的唯一方法是cvs更新,并希望发生的任何情况都不会引起任何冲突。使用svn status命令,我可以获得真实状态,因此可以在进行更新之前查看是否存在冲突。

  • 有用的合并冲突处理
     
    在CVS中,如果存在冲突,则文件中会出现冲突标记。在Subversion中,您将获得冲突标记,加上原始的,冲突前的文件的副本,再加上从服务器下载的版本,再加上最初编辑的版本。然后,您必须显式地使用svn resolve filename.txt来告诉Subversion您已解决了该问题。不再有冲突标记仍会继续提交到CVS。


8

这意味着对所有文件的所有更改都将在单个事务中提交,因此全部成功或不成功。

这意味着您不太可能将部分编辑签入到存储库中而导致构建失败。您仍然会让人们忘记检入所有相关文件,但这是一个过程问题,而不是版本控制系统问题。


那不是一件好事吗?否则,部分提交将导致文件不同步。
极客2012年

2
它是一件好事,部分提交不好
JK。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.