繁体   English   中英

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

[英]How to view svn diff in vimdiff style in svn

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

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

diff-cmd = <your favorite diff application>

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

创建包装脚本

#!/bin/sh

/usr/bin/vimdiff ${6} ${7}

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

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

使它成为svn diff命令

$HOME/.subversion/config

diff-cmd = /home/<username>/bin/svndiffwrap.sh

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

发现于: 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.

注意:这假设您的vimdiff/usr/local/bin ,对我来说,在Fedora中,它位于/usr/bin 如果你找不到它运行:

$ whereis vimdiff

然后在~/.subversion/config

[helpers]
...
diff-cmd = /home/<username>/bin/diffwrap.sh

vimdiff <(svn diff)

<()被称为进程替换 ,它从svn diff的输出创建一个伪文件,供vimdiff使用。

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

类似的答案

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

我喜欢在使用带有svn的vimdiff时将修订版和文件放在状态行中,所以我使用以下内容:

svnvimdiff.sh

#!/bin/bash
/usr/bin/vim -R -d -f --nofork -n -c "let F1='${5//$'\t'/ }' | set statusline=%{F1} | let F2='${3//$'\t'/ }' | setlocal statusline=%{F2}" ${6} ${7}

说明:

  • -R = readonly(我们无法编辑这些文件)
  • -d = diff模式(并排)
  • -f =前景(让svn等)
  • --nofork =也是前景(让svn等)
  • -n =跳过swapfiles(我们不需要swapfiles,因为它们已经是临时的)
  • -c =执行vim命令
  • 让F1 ='$ {5 // $'\\ t'/}'(替换标签的所有窗口的名称,因为它无法正确显示)
  • set statusline =%{F1}(将名称设置为全局状态行)
  • 让F2 ='$ {3 // $'\\ t'/}'(替换标签的第一个窗口的名称,因为它无法正确显示)
  • setlocal statusline =%{F2}(设置第一个窗口的状态行)

$ HOME / .subversion / config中添加/更改diff-cmd

diff-cmd = /yourpath/svnvimdiff.sh

或者使用内联:

svn diff --diff-cmd /yourpath/svnvimdiff <file>

VCSCommand可以为您完成 - 安装插件,导航到该文件,然后按<Leader>cv

请遵循以下步骤

  1. 安装colordiff例如:用于Ubuntu sudo apt-get install colordiff

  2. 现在你可以尝试svn diff输出到colordiff:svn diff -r Rev1:Rev2 file | colordiff

  3. 将以下代码添加到bash配置文件(〜/ .bashrc或〜/ .bash_profile)中以便轻松访问。

    svndiff(){svn diff“$ {@}”| colordiff}

  4. 源bash配置文件。

    source~ / .basrc现在它已经可以使用了...你可以最有效地在终端中看到svn diff。

    例如:svndiff

我使用tkdiff和tkcvs作为svn。 很好的并排视图。

每个文件的基础都存储在.svn文件夹中,因此您可以编写小脚本来启动vimdiff或mgdiff,以在.svn文件夹中提供一个路径来比较您的文件。 这不需要你为svn制作vimdiff默认的diff命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM