我在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
任何人都可以診斷問題/提供的解決方案?謝謝。
我在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
任何人都可以診斷問題/提供的解決方案?謝謝。
首先警告!如果你弄錯了,最終會失去你的本地編輯,這很容易!測試測試測試!
恐怕pmod的鏈接腳本不支持svn 1.6(Ubuntu 11.04中的當前版本)。代碼pmod's link和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
並取消註釋行,並設置您的命令的路徑。
請注意,當發生衝突時,系統會提示您如何處理它。你需要輸入一個'l'和svn來運行這個腳本。完成合並後,您需要鍵入'r'來解決衝突並將合併後的版本複製到工作副本。
drevicko's answer對於最近的meld
版本是正確的。但舊版本的meld
也使用:
下面bash
腳本svn-merge-meld.sh
支持老最近meld
版本(三級四個參數)。
#!/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
或
你可以派生它:
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
感謝您的更新。 – Profpatsch
刪除os和shutil進口 - 它們不再使用。 – bcelary
看起來,meld的調用cmd已經改變 - 我使用'cmd = [meld,mine,base,他們,'-o',merged]'(meld 1.8.4)。 ' – Ayrat