我们使用Mercurial拥有相当数量的ASP.Net(C#)网站。有时,合并会出现“某些问题”,并且会在生成的文件中复制少量行;但是,合并期间没有发现合并冲突。
复制的行通常是非常“通用”的行,如块闭包(括号,结束标记等)。在某些情况下,它们会导致编译错误;在其他情况下,它们导致JS失败;在其他情况下,只是导致浏览器兼容性问题的无效标记。
我们有许多人在项目上进行合作,他们经常分支彼此的分支,在分支之间合并,等等很久才合并回一个“主要”分支(一个用于测试站点,以及另一个用于生产现场)。
当两个分支独立启动,某些点合并,然后两个独立合并回测试站点主分支时,问题似乎最常发生。我们假设由于要合并到测试的第二个分支没有被合并到测试的历史,它包括已经由第一个分支合并合并的所有变更集,并且在某些情况下,由于上下文是过于通用,无法正确放置,只是包含它。
这个问题有名字吗?这是一个已知的问题吗?是否有一个程序要遵循以避免它?它似乎必须是一个常见问题,但我似乎无法找到任何相关信息。
如果祖先有一个已经合并到目标分支的后代,我们已经考虑过添加钩子以禁止合并,但考虑到项目的大小和涉及的分支数量,这可能会非常慢。
我们还考虑添加钩子来强制执行某种“深度和血统”控制,这样合并只能发生在父分支上,而不会发生在兄弟姐妹,表兄弟或祖父母分支上,但这会极大地扰乱几个人的协作和工作流程。
思想?
答案 0 :(得分:1)
但是,合并期间没有发现合并冲突。
好吧,我会说有人正在非常严厉地解决冲突。
这怎么可能?他们不懒,对吧?
我正在玩graft
,我的差异工具做了一些愚蠢的事。
例如,文件index.html,在默认分支中:
</div>
</div>
</body></html>
分支A:
</div>
<br></div>
</body></html>
分支B:
<p></div>
</div>
</body></html>
分支B再提交一次:
<p>a</div>
</div>
</body></html>
将分支A与default
合并,罚款。
当default
上的嫁接 B时,我得到:
<p>a</div>
</div>
<br></div>
</body></html>
但合并 B与default
:
<p>a</div>
<br></div>
</body></html>
几个小时后,我明白hg移植不合作就像合并一样。我需要将分支B的两个提交传递给hg graft
。
可能您的问题与此无关,我猜您的团队只使用hg merge
。但我仍然认为,某些人必须错误地合并。