颠覆:合并,还原,再次合并。为什么它会默默地失败?

时间:2010-09-29 16:59:21

标签: svn

这是一个讨厌的Subversion错误还是我以错误的方式接近它?

将分支合并到主干中。 - > HelloWorld.txt更新

恢复HelloWorld.txt

再次进行相同的合并。 - >没有文件更新。

为什么第二次合并不会再次更新HelloWorld?它的行为好像已经复制了这个更改。还原不应该重置吗?

如果您还原整个文件夹HelloWorld,则第二个合并会再次正确应用更改。只有当您还原文件失败时才会这样做。

这有点可怕。如果我现在需要还原一些文件怎么办?任何未来的合并都将无法复制关键代码。

Subversion 1.6 OS X 10.6.4

3 个答案:

答案 0 :(得分:21)

此合并内容记录在svn文档Advanced Merging部分(参见注释23)。首次合并更改时,将在svn:mergeinfo属性中跟踪合并的修订号。如果撤消更改,修订仍标记为已合并,以防止您错误地再次合并。事实是,如果你删除了它,你几乎不可能想要它...

如果您确实想要再次合并它,那么您可以使用--ignore-ancestry选项,如果先前已合并修订版,则不会检入svn:mergeinfo。另一个解决方案是故意从svn:mergeinfo中删除此修订版,以便将来可以再次合并。但是不要手动执行,请使用--record-only命令的svn merge选项。

答案 1 :(得分:7)

Subversion执行合并跟踪,这意味着它将记录已合并的修订版本。合并信息记录在合并根目录中名为svn:mergeinfo的属性中(即,您在svn merge之后输入的任何目标)。您还原了该文件,但可能未还原包含已修改或添加的svn:mergeinfo属性的合并根。

答案 2 :(得分:4)

桑德斯是对的。

不要认为你是在复制国家。您“获取”更改并将其再次应用于不同的目标(理想情况下是相对于合并原点)。

在svn 1.5之前,我们必须在合并时手动跟踪更改。 “嗯我把r28445合并到了这个分支的r28501吗?我不想重新申请我已经完成的更改: - /”

这是一个令人头疼的机器;)

svn自1.5以来跟踪您过去所做的事情,并且只将相同的历史更改一次应用到唯一目的地。

您应该能够在svn merge命令中使用“--ignore-ancestry”禁用此友好检查。准备好在你已经应用的时候获得很多变化。通过陈述修订版来缩小您想要获得的内容。

svn merge --ignore-ancestry -c REVISION_WITH_CHANGE http://mysvn/path/to/mergeorigin