如何使用meld设置svn冲突解决?

如何使用meld设置svn冲突解决?,svn,meld,Svn,Meld,我在Subversion配置中指定了合并工具cmd=meld。当我使用显示的冲突解决选项中的选项l解决合并冲突时,我收到以下消息: meld: error: too many arguments (wanted 0-4, got 5) The external merge tool exited with exit code 2 有人能诊断问题/提供解决方案吗?谢谢。您需要使用包装器脚本来抓取和放置subversion按照您的diff工具所需的顺序(检查): 使用外部双向和三向差分工具的关键(

我在Subversion配置中指定了合并工具cmd=meld。当我使用显示的冲突解决选项中的选项l解决合并冲突时,我收到以下消息:

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

有人能诊断问题/提供解决方案吗?谢谢。

您需要使用包装器脚本来抓取和放置subversion按照您的diff工具所需的顺序(检查):

使用外部双向和三向差分工具的关键(其他 当然,与GNU diff和diff3相比,Subversion使用的是包装器脚本 将Subversion的输入转换为 差分工具可以理解,然后转换输出的 您的工具返回到Subversion期望的格式 GNU工具本可以使用。

Subversion调用外部差异程序,其参数适用于 GNU diff实用程序,并且只希望外部程序 返回一个成功的错误代码。对于大多数可供选择的差异 程序中,只有第六个和第七个参数是文件的路径 分别表示差异的左侧和右侧的 有意思


这是一个非常好的描述

首先是一个警告!如果你弄错了,很容易丢失你的本地编辑!测试测试

恐怕pmod链接中的脚本无法与SVN1.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
)并使其可执行:

sudo chmod +x /usr/local/bin/svn-merge-meld.py
然后编辑
~/.subversion/config
并取消注释行
合并工具cmd=
,并设置命令的路径

请注意,当发生冲突时,系统将提示您如何处理冲突。您需要键入一个
l
,svn才能运行此脚本。完成合并后,需要键入
r
以解决冲突并将合并版本复制到工作副本。

对于最近的
meld
版本是正确的。但也使用较旧的
meld
版本:

  • 旧版Meld-1.6.1英寸和
  • 新的Ubuntu 13.10中的Meld-1.8.2(俏皮)和Debian Jessie
下面的
bash
script
svn merge meld.sh
支持旧版本和新版本的
meld
(四个参数中的三个)

最后,更新您的配置:

vi ~/.subversion/config
并启用
合并工具cmd

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

删除操作系统和shutil导入——它们不再使用了。似乎对meld的调用cmd已经改变了——我使用
cmd=[meld,mine,base,theres,'-o',merged]
(meld 1.8.4)`把错误信息和捕获一起扔掉不是很有用。很好的答案。我以前投过票,现在已经第二次回来了(解决svn冲突的需要再次出现了…)并且想再次投票:)meld 3.18.0只需要再次使用3个参数。如何支持这一点?
vi ~/.subversion/config
[helpers]
merge-tool-cmd = /home/....../svn-useful-scripts/svn-merge-meld.sh