我已经merge-tool-cmd = meld
在我的 Subversion 配置中指定了。当我使用提供的冲突解决选项中的选项 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 的链接和此处的代码以及此处的建议放在一起,我制作了这个似乎可以正常工作的脚本:
#!/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 来运行这个脚本。完成合并后,您需要键入 anr
来解决冲突并将合并的版本复制到工作副本。
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
不要忘记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 中使用外部二路和三路差分工具(当然除了 GNU diff 和 diff3)的关键是使用包装脚本,它将来自 Subversion 的输入转换为您的差分工具可以理解的内容,然后将工具的输出转换回 Subversion 期望的格式——GNU 工具会使用的格式。...
Subversion 使用适合 GNU diff 实用程序的参数调用外部 diff 程序,并且只期望外部程序将返回一个成功的错误代码。对于大多数替代 diff 程序,只有第六个和第七个参数——分别代表 diff 左侧和右侧的文件的路径——是有意义的。
这在这里描述得很好