2011-08-31 10 views
25

Subversionの設定でmerge-tool-cmd = meldを指定しました。私が提示競合解決オプションからオプションのLを使用して、マージの競合を解決するために行くとき、私はメッセージが表示されます。meldでsvn競合解消を設定する方法は?

meld: error: too many arguments (wanted 0-4, got 5) 
The external merge tool exited with exit code 2 

を誰もが問題を診断することができます/ソリューションを提供?ありがとう。

答えて

38

最初の警告を説明しています!これが間違っているとローカル編集を失うことは非常に簡単です!テストテストテスト!

pmodのリンクからのスクリプトがsvn 1.6(Ubuntu 11.04の最新版)で動作しないことがありますか?

#!/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)賢明な、このどこかにし、それを実行可能にします。:pmod's linkhereからコードやアドバイスhereを一緒に入れて、私は大丈夫動作しているようです。このスクリプトを作っその後

sudo chmod +x /usr/local/bin/svn-merge-meld.py 

編集~/.subversion/configを開き、行番号merge-tool-cmd =のコメントを外し、コマンドのパスを設定します。

競合が発生した場合、対処方法が表示されます。このスクリプトを実行するには、「l」とsvnを入力する必要があります。マージが完了したら、競合を解決し、マージされたバージョンを作業コピーにコピーするために、 'r'とタイプする必要があります。

+0

感謝を。 – Profpatsch

+0

osを削除してインポートをシャットダウンします。これらはもう使用されません。 – bcelary

+3

meldのcmdの呼び出しが変わったようです - 私は 'cmd = [meld、mine、base、theirs、 '-o'、merged]'(meld 1.8.4)を使います。 ' – Ayrat

2

あなたは(thisを確認してください)Subversionがあなたのdiffツールに必要なために出ているものをつかむと入れてラッパースクリプトを使用する必要があります。

外部二次元と3ウェイ差分ツールを使用するための鍵Subversionを使用している場合は、 はSubversionからの入力を 差異化ツールが理解できるものに変換し、ツールの出力を に変換して戻します(これは、GNU diffとdiff3以外のです)。 Subversionが期待するフォーマット - GNUツールで使用するフォーマットd。 ...

Subversionは GNU diffのユーティリティに適切なパラメータを持つ外部のdiffプログラムを呼び出し、外部プログラムは 成功したエラーコードで返されることのみを期待しています。ほとんどの代替差分ファイル の場合、差分の左右をそれぞれ表すファイル のパスである第6引数と第7引数のみが、 となります。

これは非常によくhere

9

最近のmeldバージョンの場合、drevicko's answerは正しいです。しかし、古いmeldバージョンも使用されます。

ザ・bash以下のスクリプトsvn-merge-meld.shは古いと最新の両方meldのバージョン(3をサポートしています4つの議論のうちの)。

#!/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を忘れないでください。

またdownload svn-merge-meld.shまたはそれをforkすることができます

git clone github.com/olibre/svn-useful-scripts.git 

最後に、あなたの設定更新:

vi ~/.subversion/config 

をしてmerge-tool-cmdを有効にします。更新の

[helpers] 
merge-tool-cmd = /home/....../svn-useful-scripts/svn-merge-meld.sh 
+1

git clone https://github.com/olibre/svn-useful -scripts.git – louisgab

+0

ありがとうございます@ louisgab私は答えを更新しました;-) – olibre

関連する問題