我在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
Run Code Online (Sandbox Code Playgroud)
任何人都可以诊断问题/提供解决方案吗?谢谢.
dre*_*cko 42
先警告!如果你弄错了,很容易丢失你的本地编辑!测试测试!
我担心来自pmod链接的脚本不适用于svn 1.6(Ubuntu 11.04中的当前版本).代码放在一起PMOD的链接,并在这里和建议在这里,我做了这个脚本,似乎工作确定:
#!/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)
Run Code Online (Sandbox Code Playgroud)
将此保存在合理的位置(例如/usr/local/bin/svn-merge-meld.py)并使其可执行:
sudo chmod +x /usr/local/bin/svn-merge-meld.py
Run Code Online (Sandbox Code Playgroud)
然后编辑~/.subversion/config并取消注释该行merge-tool-cmd =,并设置命令的路径.
请注意,发生冲突时,系统将提示您如何处理冲突.您需要键入单个"l"和svn才能运行此脚本.完成合并后,需要键入"r"来解决冲突并将合并后的版本复制到工作副本.
该drevicko的答案是正确的最新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
Run Code Online (Sandbox Code Playgroud)
别忘了chmod +x svn-merge-meld.sh.
你也可以下载svn-merge-meld.sh或分叉它:
git clone github.com/olibre/svn-useful-scripts.git
Run Code Online (Sandbox Code Playgroud)
最后,更新你的svn配置:
vi ~/.subversion/config
Run Code Online (Sandbox Code Playgroud)
并启用merge-tool-cmd:
[helpers]
merge-tool-cmd = /home/....../svn-useful-scripts/svn-merge-meld.sh
Run Code Online (Sandbox Code Playgroud)