假设有两个分支,分支A 中的最后一个(HEAD)修订版是9,而分支B 中是6。
当cd B; svn merge -r 5:8 ^/braches/A 运行时,svn 将尝试从A 分支B 顶部的分支8 应用5 和8 之间的增量。
(换句话说,更改集7 和8 将应用于B)
common
ancestor left right
(1)━━┱───(3)──(5)──(7)──(8)──(9) # branch A
┃ └┄┄┄┄┬┄┄┄┄┘
┃ ↓
┗━(2)━━(4)━━(6) # branch B
working
如果增量应用干净,一切都很好。
假设在变更集3 中修改了一些行,而在变更集4 中对相同的源代码行进行了不同的修改。
如果 delta (5→8) 没有触及这些线,一切都还好。
如果 delta (5→8) 也修改了 3 和 4 所做的,则无法自动合并更改,并且 svn 使文件处于冲突状态:
-
file --- 用 (working, left, right) 分隔的文件
-
file.working --- 分支中的文件状态 B@6
-
file.merge-left --- 分支中的文件状态 A@5
-
file.merge-right --- 分支中的文件状态 A@8
如果您手动编辑此类文件,您有几个选择 --- 保留 working(您的版本)、保留 right(他们的版本;另一个分支版本)或手动合并更改。
Left 本身没有用,没有必要在文件中保留left(他们的旧版本)。
不过,它对工具很有用。 left→right 是变更集。
当你看到时,例如:
<<<<<<< .working
life_universe_and_everything = 13
||||||| .merge-left.r5
life_universe_and_everything = "13"
=======
life_universe_and_everything = "42"
>>>>>>> .merge-right.r8
在分支A,"13"(str) 更改为"42"。
分支B 有13 (int)。
当您手动协调此冲突时,您可能需要42 (int)。