### 名称 svn diff ― 比较两条路径的区别。 ### 概要 ~~~ diff [-r N[:M]] [TARGET[@REV]...] ~~~ ~~~ diff [-r N[:M]] --old OLD-TGT[@OLDREV] [--new NEW-TGT[@NEWREV]] [PATH...] ~~~ ~~~ diff OLD-URL[@OLDREV] NEW-URL[@NEWREV] ~~~ ### 描述 显示两条路径的区别,**svn diff**有三种使用方式: **svn diff [-r N[:M]] [--old OLD-TGT] [--new NEW-TGT] [PATH...]**会显示*`OLD-TGT`*和*`NEW-TGT`*的区别。如果给定路径*`PATH`*,它会被看作*`OLD-TGT`*和*`NEW-TGT`*的相对路径,输出也会限制在这些路径的区别上。*`OLD-TGT`*和*`NEW-TGT`*可以是工作拷贝路径或者是*`URL`*`[@`*`REV`*`]`。*`OLD-TGT`*缺省是当前工作目录,而*`NEW-TGT`*缺省是*`OLD-TGT`*。*`N`*缺省是`BASE`,*`M`*缺省时当前目录的版本,但如果*`NEW-TGT`*是一个URL,则默认是`HEAD`。**svn diff -r N**设置*`OLD-TGT`*的修订版本为*`N`*,**svn diff -r N:M**设置*`NEW-TGT`*的修订版本是*`M`*。 **svn diff [-r N[:M]] URL1[@N] URL2[@M]**是**svn diff [-r N[:M]] --old=URL1 --new=URL2**的缩写。 *`TARGET`*是一个URL,然后可以使用前面提到的`--revision`或“@”符号来指定N和M。 如果*`TARGET`*是工作拷贝路径,则`--revision`选项的含义是: `--revision N:M` 服务器比较 *`TARGET`*@*`N`*和*`TARGET`*@*`M`*。 `--revision N` 客户端比较*`TARGET`*@*`N`*和工作拷贝。 (无`--revision`) 客户端比较base和 *`TARGET`*的*`TARGET`*。 如果使用其他语法,服务器会比较*`URL1`*和*`URL2`*各自的*`N`*和*`M`*。如果省掉*`N`*或*`M`*,会假定为`HEAD`。 缺省情况下,**svn diff**忽略文件的祖先,只会比较两个文件的内容。如果你使用`--notice-ancestry`,比较修订版本(也就是,当你运行**svn diff**比较两个内容相同,但祖先历史不同的对象会看到所有的内容被删除又再次添加)时就会考虑路径的祖先。 ### 别名 di ### 变化 无 ### 是否访问版本库 获得工作拷贝非`BASE`修订版本的区别时会 ### 选项 ~~~ --revision (-r) REV --old OLD-TARGET --new NEW-TARGET --extensions (-x) "ARGS" --non-recursive (-N) --diff-cmd CMD --notice-ancestry --username USER --password PASS --no-auth-cache --non-interactive --no-diff-deleted --config-dir DIR ~~~ ### 例子 比较`BASE`和你的工作拷贝(**svn diff**最经常的用法): ~~~ $ svn diff COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 4404) +++ COMMITTERS (working copy) ~~~ 察看你的工作拷贝对旧的修订版本的修改: ~~~ $ svn diff -r 3900 COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 3900) +++ COMMITTERS (working copy) ~~~ 使用“@”语法与修订版本3000和35000比较: ~~~ $ svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS@3000 \ http://svn.collab.net/repos/svn/trunk/COMMITTERS@3500 Index: COMMITTERS =================================================================== --- COMMITTERS (revision 3000) +++ COMMITTERS (revision 3500) … ~~~ 使用范围符号来比较修订版本3000和3500(在这种情况下只能传递一个URL): ~~~ $ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 3000) +++ COMMITTERS (revision 3500) ~~~ 使用范围符号比较修订版本3000和3500`trunk`中的所有文件: ~~~ $ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk ~~~ 使用范围符号比较修订版本3000和3500`trunk`中的三个文件: ~~~ $ svn diff -r 3000:3500 --old http://svn.collab.net/repos/svn/trunk COMMITTERS README HACKING ~~~ 如果你有工作拷贝,你不必输入这么长的URL: ~~~ $ svn diff -r 3000:3500 COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 3000) +++ COMMITTERS (revision 3500) ~~~ 使用`--diff-cmd`*`CMD`*`-x`来指定外部区别程序 ~~~ $ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS Index: COMMITTERS =================================================================== 0a1,2 > This is a test > ~~~