svn merge --dry-run 显示 svn diff

Fra*_*Man 5 svn diff merge

我正在使用一个代码库,该代码库(历史上)是手动合并的,而不是通过svn merge. 我试图通过向每个人证明合并是多么有用来改变这一点 - 但当我进行空运行时,我得到了这个:

$ svn merge [[Repo URL]] . -c 21355,21358,21364,21370,21371,21373 --dry-run
--- Merging r21355 into '.':
U    [[File 1]]
--- Merging r21355 into '[[dir]]':
U    [[dir]]/[[File 2]]
U    [[dir]]/[[File 3]]
--- Merging r21358 into '[[dir]]':
U    [[dir]]/[[File 4]]
--- Merging r21364 into '[[dir]]':
U    [[dir]]/[[File 2]]
C    [[dir]]/[[File 4]]    
--- Merging r21370 into '[[dir]]':
U    [[dir]]/[[File 5]]
--- Merging r21371 into '[[dir]]':
U    [[dir]]/[[File 5]]
--- Merging r21373 into '[[dir]]':
C    [[dir]]/[[File 5]]
U    [[dir]]/[[File 6]]
Summary of conflicts:
  Text conflicts: 2
Run Code Online (Sandbox Code Playgroud)

我有两个文件(分别列为 4 和 5),它们在一次合并后仍然存在,只是与最后一个文件发生冲突。我现在正在尝试找出冲突是什么,看看是否可以解决它。如果我能强制 svn 吐出两个冲突的更改的差异,我会很高兴。

我检查了最窄目录的新工作副本,当我在没有试运行的情况下运行合并时,我得到:

--- Merging r21355 into '.':
U    [[File 3]]
--- Merging r21358 into '.':
U    [[File 4]]
--- Merging r21364 into '.':
G    [[File 4]]
--- Merging r21370 into '.':
U    [[File 5]]
--- Merging r21371 into '.':
G    [[File 5]]
--- Merging r21373 into '.':
G    [[File 5]]
Run Code Online (Sandbox Code Playgroud)

(文件 1、2 和 6 位于其他位置)

所以,现在我特别困惑——试运行报告冲突,但是当合并真正运行时,它成功了?这是有意的行为吗?我承认我不是 SVN 专家,但我还是很困惑。

Izk*_*ata 2

这是 的预期行为--dry-run,它不会修改文件系统。

由于您指定了各个修订,因此这些修订将被一个接一个地单独应用。合并输出中的G表示发生了合并 - svn 对已进行本地更改的文件进行了更改。

详细地:

  • r21358 修改文件 4。
  • 在正常合并中,文件 4 现在具有本地更改,并且 r21364 将这些更改合并在一起,因为差异与文件的当前状态匹配。
  • 在试运行中,文件 4 未被 r21358 更改。该文件与下一个版本 r21364 所期望的不匹配,因此您会遇到冲突。
  • r21373 也会发生同样的情况 - r21370 或 r21371 修改了它所适用的文件的相同部分。
  • r21371 不会受到此影响,因为它影响文件 5 的部分与 r21370 不同。

一旦克服了所有这些问题,您将能够一次性合并所有这些内容,而无需指定单独的修订,并且试运行和常规合并之间的这种差异将消失。