如何在svn中查看vimdiff样式的svn diff

xyz*_*xyz 14 unix linux svn vim

我开始在Linux上使用Subversion.svn diff给人一种非常隐秘的看法 - 对眼睛非常非常不友好.我如何解释其输出?更重要的是,有没有办法查看vimdiff类型的整齐风格的差异,两个文件将并排打开?

Ome*_*gan 21

编辑文件$HOME/.subversion/config,使其包含以下行:

diff-cmd = <your favorite diff application>
Run Code Online (Sandbox Code Playgroud)

一些差异应用程序支持svn.例如,diff-cmd = meld应该工作正常.然而,vimdiff不是其中之一.原因是svn diff将文件作为第6和第7个参数进行比较,而不是像往常一样比较第1和第2个参数.那么大多数人在这种情况下做的是这样的:

创建包装脚本:

#!/bin/sh

/usr/bin/vimdiff ${6} ${7}
Run Code Online (Sandbox Code Playgroud)

例如,保存在$ HOME/bin/svndiffwrap.sh中

别忘了让它可执行chmod +x $HOME/bin/svndiffwrap.sh.

使它成为svn diff命令:

$HOME/.subversion/config:

diff-cmd = /home/<username>/bin/svndiffwrap.sh
Run Code Online (Sandbox Code Playgroud)

注意:某些svn客户端不支持使用$HOME环境变量的路径.因此指定完整路径很有用.

  • 请注意,如果使用 `gvimdiff` 而不是 `vimdiff`,显然需要 `--nofork` 标志:`gvimdiff --nofork ${6} ${7}`。(如果没有这个,gvimdiff 的两侧将显示为空白。) (2认同)

xyz*_*xyz 12

发现于:http: //blog.tplus1.com/index.php/2007/08/29/how-to-use-vimdiff-as-the-subversion-diff-tool/

这篇博文直接从SVN书籍外部差异工具示例中获取脚本:

diffwrap.sh

#!/bin/sh

# Configure your favorite diff program here.
DIFF="/usr/local/bin/vimdiff"

# Subversion provides the paths we need as the sixth and seventh 
# parameters.
LEFT=${6}
RIGHT=${7}

# Call the diff command (change the following line to make sense for
# your merge program).
$DIFF $LEFT $RIGHT

# Return an errorcode of 0 if no differences were detected, 1 if some were.
# Any other errorcode will be treated as fatal.
Run Code Online (Sandbox Code Playgroud)

注意:这假设你在Fedora vimdiff/usr/local/bin,在我身上/usr/bin.如果你找不到它运行:

$ whereis vimdiff
Run Code Online (Sandbox Code Playgroud)

然后在~/.subversion/config:

[helpers]
...
diff-cmd = /home/<username>/bin/diffwrap.sh
Run Code Online (Sandbox Code Playgroud)


Bre*_*den 6

vimdiff <(svn diff)

<()被称为进程替换,它从svn difffor 的输出创建一个伪文件vimdiff.

你可以像这样创建一个shell别名: alias svndiff='vimdiff <(svn diff)'

类似的答案

PS - 这是我还没有找到的最简单的解决方案; 它改变了我的生活(相对而言)!