2017-10-12 58 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