はい、 Krtekが説明するようなマージツールを設定できます。私はそれを試してみましたが、これは機能します:
[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
あり、2番目の引数はマージするバージョンです。
2つのファイルに共通する行の重複を避けるために、出力を並べ替えて一意にします。タグを追加するだけで問題なく機能しますが、タグも削除すると、.hgtags
ファイル内の行の順序が重要になるため、このように並べ替えることはできません。この状況に対処するための私の拡張回答を参照してください。
これは私のテストセッションです。まず、2つのヘッドを持つリポジトリを作成します。
$ 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拡張機能からの出力に表示されます。
@ 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