linux 如何在svn中以vimdiff样式查看svn diff

xlpyo6sf  于 2023-04-20  发布在  Linux
关注(0)|答案(9)|浏览(157)

我开始在Linux上使用Subversion. svn diff提供了一个非常隐晦的视图-非常非常不友好的眼睛.我如何解释它的输出?更重要的是,有没有一种方法来查看vimdiff中的差异,其中两个文件将并排打开?

xoshrz7s

xoshrz7s1#

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

diff-cmd = <your favorite diff application>

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

创建 Package 脚本

#!/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

Note:有些svn客户端不支持使用$HOME环境变量的路径,所以指定完整路径非常有用.

6ovsh4lw

6ovsh4lw2#

发现它在:http://blog.tplus1.com/index.php/2007/08/29/how-to-use-vimdiff-as-the-subversion-diff-tool/
这篇博客文章直接从SVN book external diff tools示例中获取脚本:

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
mf98qq94

mf98qq943#

vimdiff <(svn diff)
<()被称为process substitution,它从svn diff的输出创建一个伪文件,供vimdiff使用。
您可以创建一个shell别名,如下所示:alias svndiff='vimdiff <(svn diff)'
Similar answer
PS -这是我还没有找到的最简单的解决方案;它改变了我的生活(相对而言)!

s3fp2yjn

s3fp2yjn4#

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

mwyxok5s

mwyxok5s5#

在svn中使用vimdiff时,我喜欢在statusline中显示版本号和文件,所以我使用以下命令:
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 =差分模式(并排)
  • -f = foreground(let svn wait)
  • --nofork = also foreground(let svn wait)
  • -n =跳过交换文件(我们不需要交换文件,因为它们已经是临时的)
  • -c =执行vim命令
  • let F1 ='${5//$'\t '/}'(所有替换了选项卡的窗口的名称,因为它无法正确显示)
  • 设置状态行=%{F1}(将名称设置为全局状态行)
  • let F2 ='${3//$'\t '/}'(替换了选项卡的第一个窗口的名称,因为它无法正确显示)
  • setlocal statusline=%{F2}(为第一个窗口设置statusline)

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

diff-cmd = /yourpath/svnvimdiff.sh

或者内联使用:

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

mwecs4sa6#

我使用tkdiff和tkcvs来创建svn。

kninwzqo

kninwzqo7#

每个文件的基础文件都保存在.svn文件夹中,所以你可以编写一个小脚本来启动vimdiff或mgdiff,以给予.svn文件夹中的路径来比较你的文件,这样就不需要把vimdiff设为svn的默认diff命令.

6ojccjat

6ojccjat8#

按照以下步骤操作
1.安装colordiff例如:对于Ubuntusudo apt-get install colordiff
1.现在你可以尝试svn diff output to colordiff:svn diff -r Rev 1:Rev 2文件|颜色差异
1.将以下代码添加到您的bash配置文件(~/.bashrc或~/.bash_profile)中以轻松访问。

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

1.源bash配置文件。

source ~/.basrc现在已经可以使用了...你可以在终端中直接看到svn diff,这是最有效的.

例如:svndiff

jv2fixgn

jv2fixgn9#

扩展上面xyz的答案,下面两个脚本非常适合我:
File /usr/bin/svndiff:

#!/bin/bash
svn diff $@ --diff-cmd=/usr/bin/svndiffwrap.sh

文件/usr/bin/svndiffwrap.sh:

#!/bin/bash
/usr/bin/vimdiff ${6} ${7}

然后你可以在命令行上做任何事情,比如:

svn diff -r 124028:125747 ./file1

你可以只删除空间,它就像预期的那样工作:

svndiff -r 124028:125747 ./file1

它甚至适用于整个树,并按顺序打开每个文件。

svndiff -r 124028:125747 ./directory/

相关问题