2017-10-12 59 views
1

我们有相当数量的使用Mercurial的ASP.Net(C#)网站。偶尔,合并时出现“某些东西”出错,并且少量的行被复制到结果文件中;然而,合并期间并未发现合并冲突。Mercurial合并过程中的重复代码

重复的行通常非常“通用”,如块关闭(大括号,结束标记等)。在某些情况下,它们会导致编译器错误;在其他情况下,他们造成JS失败;在其他情况下,只是导致浏览器兼容性问题的无效标记。

我们有很多人在项目上合作,他们经常在分支之间分支,合并分支机构等等,然后再合并回“主要”分支之一(一个用于测试站点,另一个用于生产现场)。

当两个分支独立启动,在某个点合并,然后两个独立合并回到测试站点主分支时,问题似乎最常发生。我们推测,由于合并到测试中的第二个分支没有被合并到测试中的历史记录,因此它包含了已经由第一次分支合并合并的所有更改集合,并且在某些情况下,由于上下文是不检测重复的过于笼统,无法正确放置,只包含它。

这个问题有一个名字吗?这是一个已知的问题吗?是否有避免它的程序?看来这将是一个普遍问题,但我似乎无法找到任何信息。

考虑到项目的规模和涉及的分支数量,我们考虑添加钩子以禁止合并,如果祖先具有已经合并到目标分支的后代,但这可能会非常慢。

我们还考虑添加钩子来强制执行某种“深度和血统”控制,以便合并只能发回到父分支,而不发生在兄弟分支,表兄弟或祖父分支上,但这会严重破坏几个人的协作和工作流程。

想法?

+0

您可以制作一个自包含的示例来演示您遇到的问题吗?一个简短的shell脚本可以创建一个展示问题的回购站。 – ngoldbaum

+0

我不确定。我们的大多数问题都是由非常复杂的文件和分支模式造成的。我不确定我是否能用一个简单的例子来实现它。但是,我会放弃它。 – nhansen

+0

人们是否使用不同的行结尾? – planetmaker

回答

1

但是,在合并期间没有发现合并冲突。

那么,我会说有人正在非常糟糕地解决冲突。

这怎么可能?他们不是懒惰的,对吗?

我在玩graft,我的差异工具做了一些愚蠢的事情。 例如,index.html文件,在默认分支:

</div> 
</div> 
</body></html> 

科答:

</div> 
<br></div> 
</body></html> 

科B:

<p></div> 
</div> 
</body></html> 

只需再提交分支B:

<p>a</div> 
</div>  
</body></html> 

default合并分支A,没问题。

default嫁接 B,我得到:

<p>a</div> 
</div> 
<br></div> 
</body></html> 

合并 B带default

<p>a</div> 
<br></div> 
</body></html> 

几个小时后,我明白,汞移植不起作用像合并。我需要通过分支B的两个提交到hg graft

也许,你的问题与此无关,我猜你的团队只使用hg merge。但我仍然相信,有人必须错误地合并事情。

+0

我们的程序清楚地告诉人们合并,而不提移植。我询问过的人甚至不知道移植物是否存在,所以他们似乎不太可能用它来偷懒。 – nhansen