在这个例子中,如何从正常处理的“windows”和“test”分支合并回“main”(红线)?
例如,“windows”分支下的开发人员通过设置A = 1来修复错误,然后测试“windows”下的修复并将其称为“完成”,因此他将“windows”合并为“main”作为“ main / 8“到目前为止这不是问题。
但是,然后,说“test”分支下的开发人员将A更改为“A = 0”以修复他正在处理的错误。
当“test / 4”合并回“main”时会发生什么?
现在“main / 9”显示“A = 0”,覆盖“windows / 1”所做的修复。
然后说在“windows”下工作修复的开发人员现在需要处理另一个修复并创建“windows_2”。他会认为A仍然是“A = 1”,因为他就是这样离开的。开发人员可能会经历一个痛苦的过程,发现现在“A = 0”。
如何处理这些类型的更改,因此当从主“主干”并行创建分支时,更改不会从一个合并转换到下一个合并?
任何信息将不胜感激。 非常感谢你。
答案 0 :(得分:0)
当“
test/4
”合并回“main”时会发生什么?
这是一个非平凡的合并,因为与“共同祖先”相比,“A=
”的*相同*行已被修改两次。这在合并期间是明显的冲突,并且它不会是自动冲突。
因此,合并回test
分支的开发人员必须在test
和windows
行之间进行选择,并希望与windows
分支的开发人员进行核对。 / p>
来自merge page:
当两个或多个贡献者与基础贡献者不同时,Diff Merge会检测到冲突,并提示您解决冲突。它显示所有贡献者差异,您可以接受或拒绝每个贡献者。
[changed 10] | [changed to 10 file 2]---
A; | A=1;
-|-
[changed 10] | [changed to 10 file 3]---
A; | A=0
|-
Do you want the CHANGE made in file 2? [yes]
no
Do you want the CHANGE made in file 3? [yes]
yes
Applying CHANGE from file 3 [line 10]
============
但真正的答案是沟通:如果相同的文件需要修改(特别是在相同的行),应该有一些方法管理和协调这些类型的开发工作。
ClearCase还提出了结帐锁定(cleartool checkout -reserved
),这会阻止在test
版本签出时检出windows
。这也可以促使test
上的开发人员与他/她的同事核实,并了解正在进行修复的性质。