我使用 Plastic SCM 已经有一段时间了,但直到最近才发现我的心智模型中存在一个缺陷,即分支中的变更集如何工作。
考虑这个简单的场景:
- 假设我有一个带有文件的分支 A
foo.txt
- 我将 A 的最新更改集分支到子分支 B。
- 我将工作区切换到 B 并结帐
foo.txt
并进行一些更改,然后签入。 - 我将 B 的最后一个更改集分支到 C。
- 我试图将 C 合并到 A
简而言之:A分支到B,B中变化foo.txt
,分支到C,C合并到A。
令我惊讶的是,foo.txt
在 B 中间分支中所做的更改被忽略了,因为我没有foo.txt
在 C 中进行更改。所以在从 C 合并到 A 之后,A 在分支出 B 之前包含原始 foo.txt。
当执行从 C 到 A 的完全合并时,我原以为我在 B 中的中间更改会被合并,但显然我对分支中的更改集的理解是错误的。当更改神秘地丢失时,这会导致不时进行相当多的清理。
Git 和 Mercurial 或其他 DVCS 的行为是否相似?
编辑:
Plastic version <= 3 仅合并源分支中的更改,而不合并中间分支。
Plastic >= 4 合并整个分支路径。