使用 kdiff3 进行 svn 版本比较

目录 Linux

svn diff 命令的效果总的来说还是不错的。因为它是基于行的比较,在比较格式规范的程序代码文件时候也足够了,尤其是每行不超过 termial 宽度的时候。但是在比较那些单行长度比较长的文件时,比如 HTML, TEX 等,仅仅修改一个字母也会引起两行不同,用 svn diff 查看被修改的地方时就比较痛苦了。

Linux 下有一些比较好的比较程序,比如 kdiff3, gdiff, vimdiff 等,kdiff3 可以用不同颜色显示两个文档中不同的行、字符,算是比较理想的比较程序。我们可以拿它来替换掉 svn diff 默认的比较程序。

很显然这种需求别人也会有,所以早就有高手解决了这样的问题,您可以从这里下载一个 bash 脚本,将其重命名为 svndiffwrapper,加上可执行权限放到一个可执行路径(比如 /usr/bin/)下。然后修改您的 ~/.subversion/config 文件,找到 diff-cmd,修改为如下所示:

### Set diff-cmd to the absolute path of your 'diff' program.
###   This will override the compile-time default, which is to use
###   Subversion's internal diffimplementation.
diff-cmd = svndiffwrapper
### Set diff3-cmd to the absolute path of your 'diff3' program.
###   This will override the compile-time default, which is to use
###   Subversion's internal diff3 implementation.
diff3-cmd = svndiffwrapper

这样,当您再执行 svn diff 的时候,svn 会默认调用 kdiff3 进行文件比较。由于 kdiff3 是 GUI 程序,所以文件比较将会是一个一个进行的,关掉第一个文件比较的 kdiff3 窗口,才会显示第二个文件的比较窗口。

网友 sleetdrop 评论指出,如果使用基于 Python 的 Meld 作为 GUI 比较工具,那么不需要任何 wrapper,只要修改上述配置为:

diff-cmd = meld

即可。不可否认,这比 kdiff3 简便了不少,而且 meld 还支持在比较时编辑,这也是一个很大的优点。

长按识别二维码关注《边际效应》
长按识别二维码关注《边际效应》

7 条评论

  • abcx
    2009-05-27

    话说我的毕业设计是做一个基于面向对象程序的版本比较工具。。。

  • Solrex Yang
    2009-05-28

    呵呵,好像看到你在专心做这个东西了。

  • sleetdrop
    2009-05-31

    我更喜欢gtk的meld

    http://meld.sourceforge.net/

  • Solrex Yang
    2009-05-31

    @sleetdrop
    恩,那个像水流一样的东西比较好玩,只是不知道那个 wrapper 能否支持 meld,也许需要自己修改。

  • sleetdrop
    2009-06-04

    只要在配置文件或者在命令行指定
    diff-cmd = meld
    就行了,根本不用写什么wrapper

  • Solrex Yang
    2009-06-04

    @sleetdrop
    恩,您说的不错,我发现 meld 的确对 svn diff 支持得非常好,感谢推荐。

  • SVN 技巧:GUI 版本比较和可执行属性 | Solrex Shuffling
    2009-08-28

    [...] 我曾经在《使用 kdiff3 进行 svn 版本比较》中介绍了为什么以及如何使用 kdiff3 或者 meld 等 GUI 比较工具进行 SVN 版本比较。但这样做有个小问题,就是如果设置了 GUI 工具作为比较工具,那么就没办法输出 diff 文件,而且每次都要关掉窗口才会出现下一个文件,就无法比较多个文件了。所以我觉得下面这种做法会更好一些: $ more svndiff #!/bin/bash sed -i -e 's/^# diff-cmd.*$/diff-cmd=meld/' ~/.subversion/config svn diff sed -i -e 's/^diff-cmd.*$/# diff-cmd = meld/' ~/.subversion/config [...]

发表评论

电子邮件地址不会被公开。 必填项已用*标注