请参阅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