合并没有冲突,代码无法编译:我应该在提交前修复它吗?

Merge with no conflicts, the code doesn't compile: should I fix it before commit?

我正在使用 Subversion 1.7.x,并在 分支.

上进行开发

我不时从 trunk 合并以使分支保持最新。
但是,在最近的合并过程中,传入的代码虽然在 trunk 中完全正确,但在 branch.[=31= 中无法编译] 这是预料之中的,因为 trunk 中更改的代码已在 branch 几次修订前部分重写。

注意合并操作干净利落地完成,没有冲突。
为了清楚起见,当我说 merge 时,我的意思是使用来自另一个分支的代码修改工作副本的操作,不涉及提交,即只是 svn merge [source] [dest].

既然branch最终会重新整合到trunk,我想我有两个选择:

  1. 在提交合并代码之前修复编译错误;
  2. 主干合并;提交(未经编辑的合并代码);编辑代码以修复编译问题;再次提交(即随后修复编译问题,执行新的单独提交)。

如果我在提交之前编辑合并的代码(即我选择#1),重新整合分支时这些更改会丢失吗?

简短的回答是:不会,更改不会丢失。

更多细节。
Reintegration merge 不同于 'regular' sync merge,因为它将分支复制到主干,所以两者变得相同[1]。可以表示为'apply difference between branch and trunk into trunk(wc)'。当然reintegrate merge其实应该是reintegrate merge。 Subversion 1.8 以某种方式猜测,早期版本在合并期间需要 --reintegrate 参数。

更新:

[1] 事实上,我做了几个测试,发现只有当你合并到更新到上次同步修订的工作副本时,结果才会相同。例如,如果您将主干 1-100 同步到分支,然后在主干 10 中创建更多附加修订,然后将分支重新整合到主干中 - 这里可能存在差异。

我个人更喜欢同步分支而不是主干中的最新修订,重新整合然后比较文件夹的二进制标识。以防万一:)