是的,您可以像 Krtek 描述的那样设置merge tool。我刚刚试了一下,效果很好:
[merge-tools]
merge-tags.executable = cat
merge-tags.args = $local $other | sort -u >> $output
[merge-patterns]
.hgtags = merge-tags
把它放在服务器上的.hg/hgrc 文件中,以后的合并只会附加标签。发生的事情是hg merge 将执行
cat /tmp/hgtags.local /tmp/hgtags.other | sort -u >> .hgtags
cat 的第一个参数是 .hgtags 文件的本地版本,第二个参数是您要合并的版本。
我对输出进行排序并使输出唯一,以避免重复两个文件中常见的行。只要您只添加标签,就可以正常工作 - 但如果您还删除标签,那么.hgtags 文件中的行顺序很重要,因此您不能像这样对其进行排序。 请参阅my extended answer 处理这种情况。
这是我的测试环节。我首先创建一个有两个头的存储库:
$ hg init
$ echo a > a.txt
$ hg add a.txt
$ hg commit -m a
$ echo b > b.txt
$ hg add b.txt
$ hg commit -m b
$ hg tag b
$ hg update 0
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ echo c > c.txt
$ hg add c.txt
$ hg commit -m c
created new head
$ hg tag c
分支在graphlog extension的输出中可见:
@ changeset: 4:54c5397a23a4
| tag: tip
| user: Martin Geisler <mg@aragost.com>
| date: Wed Mar 02 11:45:20 2011 +0100
| summary: Added tag c for changeset aff5fe9be7d9
|
o changeset: 3:aff5fe9be7d9
| tag: c
| parent: 0:0db5fae8b6cc
| user: Martin Geisler <mg@aragost.com>
| date: Wed Mar 02 11:45:17 2011 +0100
| summary: c
|
| o changeset: 2:a9af8514a64e
| | user: Martin Geisler <mg@aragost.com>
| | date: Wed Mar 02 11:45:02 2011 +0100
| | summary: Added tag b for changeset 0518533f37f6
| |
| o changeset: 1:0518533f37f6
|/ tag: b
| user: Martin Geisler <mg@aragost.com>
| date: Wed Mar 02 11:44:44 2011 +0100
| summary: b
|
o changeset: 0:0db5fae8b6cc
user: Martin Geisler <mg@aragost.com>
date: Wed Mar 02 11:44:33 2011 +0100
summary: a
.hgtags 文件中存在冲突:
$ hg cat -r 2 .hgtags
0518533f37f6f37edbea5b46d9af2192f69ddecd b
$ hg cat -r 4 .hgtags
aff5fe9be7d9b021e55dfb522b29fd03cbcf5cb7 c
但合并仍然是非交互式的:
$ hg merge
merging .hgtags
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
您可以看到文件是如何附加的:
$ cat .hgtags
aff5fe9be7d9b021e55dfb522b29fd03cbcf5cb7 c
0518533f37f6f37edbea5b46d9af2192f69ddecd b