私は自分のSubversion設定でmerge-tool-cmd = meldを指定しました。提示された競合解決オプションのオプションlを使用してマージ競合を解決しようとすると、次のメッセージが表示されます。
meld: error: too many arguments (wanted 0-4, got 5)
The external merge tool exited with exit code 2
誰かが問題を診断/解決策を提供できますか?ありがとう。
最初に警告!これを間違えた場合、ローカルの編集内容が失われることは非常に簡単です。テストテストテスト!
Pmodのリンクからのスクリプトがsvn 1.6(Ubuntu 11.04で現在)で動作しないと思います。 pmodのリンク と here からのコードとアドバイス here を組み合わせて、問題なく動作するように見えるこのスクリプトを作成しました。
#!/usr/bin/env python
# svn merge-tool python wrapper for meld
import sys
import subprocess
try:
# path to meld
meld = "/usr/bin/meld"
# file paths
base = sys.argv[1]
theirs = sys.argv[2]
mine = sys.argv[3]
merged = sys.argv[4]
# the call to meld
# For older meld versions:
# cmd = [meld, mine, base, theirs, merged]
# New meld versions: >= 1.8.4
cmd = [meld, mine, base, theirs, '-o', merged]
# Call meld, making sure it exits correctly
subprocess.check_call(cmd)
except:
print "Oh noes, an error!"
sys.exit(-1)
これを適切な場所に保存し(例:/usr/local/bin/svn-merge-meld.py
)、実行可能にします。
Sudo chmod +x /usr/local/bin/svn-merge-meld.py
次に、~/.Subversion/config
を編集して、行merge-tool-cmd =
のコメントを外し、コマンドへのパスを設定します。
競合が発生すると、それをどうするかを尋ねるプロンプトが表示されることに注意してください。単一の「l」を入力する必要があり、svnがこのスクリプトを実行するには、マージが完了したら、「r」を入力して競合を解決し、マージされたバージョンを作業コピーにコピーする必要があります。
drevicko's answer は、最近のmeld
バージョンでは正しいです。ただし、古いmeld
バージョンも使用されます。
以下のbash
スクリプトsvn-merge-meld.sh
は、古いバージョンと最近のmeld
バージョンの両方をサポートします(4つの引数のうち3つ)。
#!/bin/bash
base=${1?1st argument is 'base' file}
theirs=${2?2nd argument is 'theirs' file}
mine=${3?3rd argument is 'mine' file}
merged=${4?4th argument is 'merged' file}
version=$(meld --version | Perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' )
if [[ "$version" < 1.7 ]]
then
#old meld version 1.6.* = three input files
cat "$mine" > "$merged"
meld --label="Base=${base##*/}" "$base" \
--label="Mine->Merged=${merged##*/}" "$merged" \
--label="Theirs=${theirs##*/}" "$theirs"
else
# recent meld versions 1.7.* and above = four input files
meld --label="Base=${base##*/}" "$base" \
--label="Mine=${mine##*/}" "$mine" \
--label="Merged=${merged##*/}" "$merged" \
--label="Theirs=${theirs##*/}" "$theirs"
fi
するのを忘れないで chmod +x svn-merge-meld.sh
。
ダウンロードsvn-merge-meld.sh
またはフォーク:
git clone github.com/olibre/svn-useful-scripts.git
最後に、 svn 構成を更新します。
vi ~/.Subversion/config
merge-tool-cmd
:
[helpers]
merge-tool-cmd = /home/....../svn-useful-scripts/svn-merge-meld.sh
ラッパースクリプトを使用して、Subversionが差分ツールに必要な順序で取得および配置できるようにする必要があります( this を確認してください)。
Subversionで外部の2方向および3方向の差分ツール(GNU diffとdiff3以外はもちろん)を使用する)の鍵は、Subversionからの入力を何かに変換するラッパースクリプトを使用することです差分ツールが理解でき、ツールの出力をSubversionが期待する形式(GNUツールが使用していた形式)に変換し直す...
Subversionは、GNU diffユーティリティーに適したパラメーターを使用して外部diffプログラムを呼び出し、外部プログラムが正常なエラーコードを返すことのみを期待します。ほとんどの代替diffプログラムでは、6番目と7番目の引数のみ—diffの左側と右側をそれぞれ表すファイルのパスが重要です。
これは非常によく説明されています ここ