我在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
任何人都可以诊断问题/提供解决方案吗?感谢。
答案 0 :(得分:42)
首先警告!如果你弄错了,很容易丢失你的本地编辑!测试测试!
我担心来自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
并取消注释第merge-tool-cmd =
行,并设置命令的路径。
请注意,发生冲突时,系统会提示您如何处理冲突。您需要键入单个“l”和svn才能运行此脚本。完成合并后,需要输入“r”来解决冲突并将合并后的版本复制到工作副本。
答案 1 :(得分:9)
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
答案 2 :(得分:2)
您需要使用包装器脚本来抓取并将subversion设置为diff工具所需的顺序(检查this):
使用外部双向和三向差分工具的关键(其他 比起GNU diff和diff3,当然)使用Subversion就是使用包装器脚本 将来自Subversion的输入转换为您的输入 差异工具可以理解,然后转换输出 你的工具回到Subversion期望的格式 - 格式 GNU工具会使用。 ...
Subversion使用适合的参数调用外部差异程序 GNU diff实用程序,并且只期望外部程序 返回成功的错误代码。对于大多数替代差异 程序,只有第六和第七个参数 - 文件的路径 分别表示差异的左侧和右侧的 感兴趣的。
这是非常好的描述here