SVN diff命令在实际中经常使用,在此记录使用点滴。
--- wwl.test (revision 15) ---表示对比old版本
+++ wwl.test (revision 16) +++表示对比new版本
@@ -7,7 +7,7 @@ -:表示old版本;+:表示new版本;7,7:表示从第七行开始的后七行(即7-13行)old和new的对比;如果行数比较多系统会自动分行;只会显示增删改行和相近行数,其他不会显示。
-:表示old版本有new没有
+:表示new版本有old没有
没有标识的表示old和new版本此行一致
下图为删除5,6两行后的diff输出:
当使用一个外部的diff命令时,Subversion会生成一个非常复杂的命令行。第一个参数就是具体的--diff-cmd,然后就是具体的--extensions (尽管使用空白的 --符号时会忽略扩展),或者如果没有指定--extensions或者--extensions为空的话,就加上‘-u’参数。第三和第四个参数,Subversion会传递一个“-L”还有第一个文件的标签(例如,“"project_issues.html (revision 11209)”)。第五个和第六个就是另一个“-L”和第二个文件的标签。第七和第八个参数分别是第一个和第二个文件的名称(例如,“.svn/text-base/project_issues.html.svn-base”和“.svn/tmp/project_issues.html.tmp”)。
如果你指定的diff命令不支持这些参数的话,你可能需要创建一个简单的封装脚本来忽略这些参数,然后将最后的你需要的文件的路径参数传递给diff命令。
警告:Subversion并不希望外部的diff工具会改变它接收到的文件,否则可能会破坏当前工作拷贝。
http://subversion.apache.org/faq.zh.html#diff-cmd
因此比较2个文件时,只要知道这2个文件的路径及文件名就可以了,也就是上述diff内部命令中的第7个和第8个2个参数。
#安装:
1 #!/bin/sh
2 #Configure your diff program here
3 #DIFF="usr/bin/meld"
4 DIFF="meld"
5 OLD=${6}
6 NEW=${7}
7 $DIFF $OLD $NEW
#如果脚本目录和名称不同自行使用绝对路径
1 #!/bin/sh
2 #Configure your diff program here
3 #DIFF="usr/bin/kdiff3"
4 DIFF="kdiff3"
5 OLD=${6}
6 NEW=${7}
7 YOUR=${8}
8 $DIFF $OLD $NEW $YOUR
#如果脚本目录和名称不同自行使用绝对路径
@ECHO OFF REM Configure your favorite kdiff3/merge program here.
SET DIFF3="D:\Software\KDiff3\kdiff3.exe" REM 有效使用的只有OLD和NEW,YOURS只是凑数的
SET OLD=%6
SET NEW=%7
SET YOURS=%8 REM %DIFF3% %OLD% %NEW% %YOURS%
%DIFF3% %OLD% %NEW% %YOURS%
svn help diff:
diff (di): 显示两个版本或路径的差异。