請參閱answer below通過Magras德拉曼恰與水銀3.1更好的解決方案。以下是針對舊版Mercurial的更簡單更幼稚的解決方案。
是的,你需要配置自定義merge tool您.hgtags
文件。 Mercurial沒有爲.hgtags
提供任何特殊的合併工具,您可以使用常規的三向合併工具手動合併它。
衝突在.hgtags
文件可以有兩種類型:
傻衝突:這是你的情況並沒有真的在這裏發生衝突。什麼情況是,一個分支具有
f40273b0ad7b3a6d3012fd37736d0611f41ecf54 A
0a28dfe59f8fab54a5118c5be4f40da34a53cdb7 B
12e0fdbc57a0be78f0e817fd1d170a3615cd35da C
,另一支有
f40273b0ad7b3a6d3012fd37736d0611f41ecf54 A
0a28dfe59f8fab54a5118c5be4f40da34a53cdb7 B
979c049974485125e1f9357f6bbe9c1b548a64c3 D
每個標籤代表一個確切的變更,所以這裏沒有衝突。當然,合併應該是工會上的兩個文件:
f40273b0ad7b3a6d3012fd37736d0611f41ecf54 A
0a28dfe59f8fab54a5118c5be4f40da34a53cdb7 B
12e0fdbc57a0be78f0e817fd1d170a3615cd35da C
979c049974485125e1f9357f6bbe9c1b548a64c3 D
真實衝突:有一個分支有
f40273b0ad7b3a6d3012fd37736d0611f41ecf54 A
0a28dfe59f8fab54a5118c5be4f40da34a53cdb7 B
12e0fdbc57a0be78f0e817fd1d170a3615cd35da C
,另一支有
f40273b0ad7b3a6d3012fd37736d0611f41ecf54 A
0a28dfe59f8fab54a5118c5be4f40da34a53cdb7 B
979c049974485125e1f9357f6bbe9c1b548a64c3 C
這裏有一個真正的衝突:hg tag C
在兩個分支上完成,但t ags指的是不同的變更集。解決這個問題是一項手動任務。
如果你能保證你只有傻衝突和你只有每一個變更標籤,那麼你可以使用
hg log -r "tagged()" --template "{node} {tags}\n" > .hgtags
生成一個新文件.hgtags
。關鍵的洞察是Mercurial 知道如何在內部合併標籤!當你有兩個不同的.hgtags
文件頭時,它總是這樣做。上述模板僅基於此內部合併生成新的.hgtags
文件。
如果可能每變更一個以上的標籤,則上述不會工作 - 所有的標籤都印上一條線,所以你得到一個標籤foo bar
,而不是兩個標籤foo
和bar
的。然後,您可以使用此style file代替:
changeset = "{tags}"
tag = "{node} {tag}\n"
它輸出每標籤一條線,而不是變更集。在某處保存此樣式並配置合併工具:
[merge-tools]
hgtags.executable = hg
hgtags.args = log -r "tagged()" --style ~/tmp/tags-style > $output
hgtags.premerge = False
hgtags.priority = -1000
[merge-patterns]
.hgtags = hgtags
您現在已經自動標記合併。還有一些注意事項:
三個或更多的頭:如果您在合併時有兩國元首該方法僅適用。如果您有三個或更多頭,則可能會重新顯示已刪除的標籤。如果您有頭X,Y和Z,並且標記A
在X中被刪除,則Mercurial通常能夠確定總體上刪除了A
。它基於X的.hgtags
文件中的000...0 A
行執行此操作。但是,如果您將X和Y合併爲W,則建議的方法將不包含任何此類000...0 A
行。來自Z的A
的定義現在會突然生效並重新引入A
。
真實衝突:如果您有.hgtags
真正的衝突,那麼上面的方法將默默地挑標籤從最近的頭部你。合併工具基本上將hg tags
保存在.hgtags
中,並且具有多個頭的hg tags
的行爲是explained in the wiki。由於hg tags
無條件地讀取並默默合併來自所有主管的.hgtags
文件,因此使用這種簡單的方法我們無能爲力。處理這個問題需要一個更大的腳本來讀取兩個.hgtags
文件並檢測衝突。
有關解決愚蠢衝突的合併工具,請參閱https://bitbucket.org/xrstf/tagsmerger/wiki/Home。 :) – xrstf 2012-03-20 11:11:25
@xrstf:其實我前幾天看到了這個。我不推薦它,因爲我認爲在有兩個以上的人頭時它不能正常工作。簡單地刪除'000 ... 0'行將重新引入標籤,就像我在我的答案中解釋的那樣。 – 2012-03-20 12:05:02
非常好,我鼓掌!我可以問,這些notrs會出現在Aragost的網站上嗎?我們會在這裏丟失它 – 2012-03-21 00:38:50