2012-04-04 17 views
1

2つの中央ブランチ/クローンを持つHgプロジェクトを考えてみましょう。 DEVおよびPRD。誰かが修正プログラムをPRDにプッシュすると、セントラルサーバー上の自動化されたスクリプトがDEVに移動し、新しい変更が取得されます。その後、修正プログラムをDEVにマージしようとします。hg diff3との自動マージ

問題は、Hgに統合されたマージツールがひどいことです。同じファイルに並行して変更が行われるとすぐに失敗します。次の例をご覧ください:

parent:3,7c 
four 
five 
six 

seven 

child1:3,7c 
four 
five5 
six6 

seven7 

child2:3,7c 
fourmore 
five 
six 
more 
seven 

ご覧のとおり、実際の競合はありません。私たちがkdiffを使ってローカルでマージすると、この単純なケースがユーザの入力なしで解決されます!

私は、これらのケースを管理する中央サーバを得る方法を望みます。私はサイレントモードでkdiff3を使用することを考えましたが、kdiff3をインストールすることはできません(これは管理者アクセス権を持たないCLIのみのシステムです)が、hgマージにdiff3をプラグインする方法がありますこのような単純なケースを解決できますか?私は "[ui]/n merge = diff3"をhgrcに設定しようとしましたが、3つのバージョンをstdoutに吐き出すだけです。私はいくつかの追加設定がありませんか?または、より簡単で優れたツールがありますか?

おかげで、あなたのマージツールとしてdiff3を使用するに

答えて

1

多くは、あなたの設定ファイルに

[merge-tools] 
diff3.args = $local $base $other -m > $output 

を追加する必要があります。必要に応じて優先順位を設定できます。the wikiを参照してください。また、より複雑なrecipes for using diff3 thereが見つかります。

しかし、私は、隣接するライン上の編集でどのようにdiff3御馳走あなたのシナリオをテストし、ちょうどMercurialのように、それもきれいにこれをマージすることを拒否しました。異なるマージツールには「矛盾」とみなされるしきい値があり、KDiff3はMercurialやdiff3より寛容です。

PRDで修正プログラムを作成した開発者は、DEVにローカルでマージしてKDiff3などのツールにアクセスできるようにすることをお勧めします。サーバー上での自動マージは一般的に悪いとみなされます。マージは、コミットする前に人間が少しだけ検証する必要があります。これは、修正プログラムを作成した後、あまり余分な仕事ではありません。

関連する問題