svn diff

一、常用用法

svn diff [-r N[:M]] PATH...

二、含义与选项

2.1、含义

比较PATH所指代文件的N版本和M版本,或者递归比较PATH所指代目录下所有文件的N版本和M版本,可以指定多个PATH。PATH为空表示当前目录。如果有多个文件需要比较,那么前一个比较结束后,再比较下一个。

2.2、选项表示的意思

“-r N[:M]”:比较文件的N版本和M版本(注意左边是N版本,右边是M版本)。当该选项不存在时,等价于“-r BASE:working copy”;当“M”不存在时,等价于“-r N:working copy”。“BASE”表示本地最新版本;“working copy”表示当前工作副本中的版本。

三、diff工具

svn diff命令默认调用SVN内置的diff工具进行比较,通过该工具得到的比较结果可读性非常差。
可以通过“~/.subversion/config”文件中的“diff-cmd”属性来配置自己所选择的比较工具的具体路径。可以选择的比较工具有:外置diff(在GNU diffutils包中),colordiff,vimdiff,meld,diffuse等。
根据SVN官方资料可知,一般情况下,执行svn diff命令,最终得到的命令形式如下:

diff(SVN内置的diff工具) -u -L "第一个文件的标签" -L "第二个文件的标签" 第一个文件路径 第二个文件路径  

3.1、外置diff替换内置diff

查看外置diff的“man”页,发现本身不支持“-L”和“文件标签”选项,但是经过实验,发现该工具能够很好地容错,顺利地完成比较工作。
配置“~/.subversion/config”文件中的“diff-cmd”属性的值为该外置diff的具体路径。
在替换后,具体的运行命令如下:

diff(外置diff工具) -u -L "第一个文件的标签" -L "第二个文件的标签" 第一个文件路径 第二个文件路径  

3.2、colordiff替换内置diff

colordiff是上述外置diff的一层封装,因而使用colordiff替换能够顺利地完成比较工作。
配置“~/.subversion/config”文件中的“diff-cmd”属性的值为colordiff的具体路径。
在替换后,具体的运行命令如下:

colordiff -u -L "第一个文件的标签" -L "第二个文件的标签" 第一个文件路径 第二个文件路径  

3.3、vimdiff替换内置diff

vimdiff不支持“-u”,“-L”和“文件标签”选项。我们可以自己编写一个脚本,该脚本丢弃前面5个输入参数,只保留最后两个参数,具体的脚本内容如下:

#!/bin/sh 
# 去掉前5个参数 
shift 5  

# 保留最后两个参数,传递给vimdiff,从而使用vimdiff比较 
vimdiff "$@"  

配置“~/.subversion/config”文件中的“diff-cmd”属性的值为以上脚本的具体路径。
在替换后,具体的运行命令如下:

vimdiff 第一个文件路径 第二个文件路径  

3.4、meld替换内置diff

查看meld的“man”页,发现本身不支持“-u”,“-L”和“文件标签”选项,但是经过实验,发现该工具能够很好地容错,顺利地完成比较工作。
配置“~/.subversion/config”文件中的“diff-cmd”属性的值为meld的具体路径。
在替换后,具体的运行命令如下:

meld -u -L "第一个文件的标签" -L "第二个文件的标签" 第一个文件路径 第二个文件路径

3.5、diffuse替换内置diff

查看diffuse的“man”页,发现本身不支持“-u”选项,经过实验,发现该工具能够很好地容错,顺利地完成比较工作,但是在过程中会给出一个指出“-u”选项不被支持的错误。
我们可以自己编写一个脚本,该脚本丢弃前面1个输入参数,保留后面6个参数,具体的脚本内容如下:

#!/bin/sh 
# 去掉前1个参数 
shift 1  

# 保留后面6个参数,传递给diffuse,从而使用diffuse比较 
diffuse "$@"  

配置“~/.subversion/config”文件中的“diff-cmd”属性的值为以上脚本的具体路径。
在替换后,具体的运行命令如下:

diffuse -L "第一个文件的标签" -L "第二个文件的标签" 第一个文件路径 第二个文件路径  

另外,通过“-L”和“文件标签”选项,diffuse能够将打开的两个对比标签页的标题设置为相应的“文件标签”,而不是相应的“文件路径”,这增加了比较结果的可读性。



总结,经过实验,发现diffuse的比较功能最强大,能够去除多余的空格,进行排序,处理内容一样顺序不一致问题等。



参考文献:
[1]http://www.ahlinux.com/start/base/20793.html
[2]http://subversion.apache.org/faq.html#diff-cmd
[3]http://unix.stackexchange.com/questions/4573/which-gui-diff-viewer-would-you-recommend-with-copy-to-left-right-functionality

你可能感兴趣的:(SVN,diff)