diff—显示修订版间的差异

  • 语法: diff [-lR] [-k kflag] [format_options] [(-r rev1[:date1] | -D date1) [-r rev2[:date2] | -D date2]] [files...]
  • 需要: 工作目录,仓库。
  • 修改: 无。

diff 命令用于比较文件的不同修订版。默认是比较工作目录文件与其所基于的修订版,然后报告所发现的差异。

如果给定文件名,则只比较这些文件。如果给定目录,则会比较目录下所有的文件。

diff 的退出状态与其他 cvs 命令不同,详细情况见 Exit status

 

diff 选项

diff 支持标准选项(参阅 Common options,了解完整说明):

-D date
使用不迟于 date 的最新修订版。见 ` -r' 了解它是如何影响比较的。
-k kflag
根据 kflag 处理关键字。参阅 Keyword substitution
-l
只在当前目录运行。
-R
递归方式检验。此为默认。
-r tag [: date ]
比较指定的 tag 修订版,或者当 date 指定,并且 tag 是分支标签,分支 tag 上的版本可以当作是在 date 上。可以没有,有一个或两个 ` -r' 选项。没有 ` -r' 选项时,工作文件将与它所基于的修订版进行比较。有一个 ` -r' 选项时,指定的修订版与当前工作文件进行比较。两个 ` -r' 选项时,将比较这两个修订版(同时你的工作文件不会影响输出结果)。

一个或所有的 `-r' 选项都能用上面提到的 `-D date' 选项替代。

下面的选项指定输出的格式。他们与 GNU diff 有相同的意思。许多选项有两个相等的名字,一个是 `-' 后面的单个字母,另一个是 `--' 后面的长名字。

` -lines'
显示上下文 lines (一个整数) 行。此选项不指定输出的格式; 如不与 ` -c' 或 ` -u' 一起使用,没有任何作用。该选项已经废弃。对适当操作, patch 通常至少要两行内容。
` -a'
所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件。
` -b'
忽略空格引起的变化,并认为一个或多个空格都相同。
` -B'
忽略插入删除空行引起的变化。
` --binary'
以二进制模式读写数据。
` --brief'
仅报告文件是否相异,不在乎差别的细节。
` -c'
使用上下文输出格式。
` -C lines' ` --context[=lines]'
使用上下文输出格式,显示以指定 lines (一个整数),或者当 lines 没有给出时是三行。对于正确的操作, patch 需要上下文至少要有两行。
` --changed-group-format=format'
使用 format 输出一组包含两个文件的不同处的行,其格式是 if-then-else。参阅 Line group formats.
` -d'
改变算法也许发现变化的一个更小的集合。这会使 diff 变慢 (有时很慢)。
` -e' ` --ed'
输出为一个有效的 ed 脚本。
` --expand-tabs'
在输出时扩展制表符为空格,保持输入文件的制表符对齐方式。
` -f'
产生一个类似 ed 脚本的输出,但是改变他们在文件出现的顺序。
` -F regexp'
在上下文和统一格式中,对于每一大块的不同,显示出匹配 regexp 的一些前面的行。
` --forward-ed'
产生象 ed 脚本的输出,但是它们在文件出现的顺序有改变。
` -H'
使用启发规则加速操作那些有许多离散的小差异的大文件。
` --horizon-lines=lines'
比较给定 lines 的有共同前缀的最后行,和有共同或缀的最前 lines 行。
` -i'
忽略大小写; 认为大小写字母是相同的。
` -I regexp'
忽略因匹配 regexp 而插入,删除行带来的改变。
` --ifdef=name'
合并使用 name 的 if-then-else 格式输出。
` --ignore-all-space'
在比较行的时候忽略空格。
` --ignore-blank-lines'
忽略插入和删除空行。
` --ignore-case'
忽略大小写; 认为大小写字母是相同的。
` --ignore-matching-lines=regexp'
忽略因匹配 regexp 而插入,删除行带来的改变。
` --ignore-space-change'
忽略后面的空格,并认为所有的单个与多个空格是相同的。
` --initial-tab'
无论是常规的或者格式化的前后文关系,在文本行前输出制表符代替空格。使制表符对齐方式看上去象是常规的一样。
` -L label'
使用 label 给出的字符替代文件头里面上下文和统一格式的文件名。
` --label=label'
使用 label 给出的字符替代文件头里面上下文和统一格式的文件名。
` --left-column'
以并列方式印出两公共行的左边。
` --line-format=format'
使用 format 输出 if-then-else 格式所有的行。参阅 Line formats.
` --minimal'
改变算法也许发现变更的一个更小的集合。这会使 diff 变慢 (有时很慢)。
` -n'
输出 RCS 格式的比较; 除了每条指令指定的行数受影响外像 ` -f' 一样。
` -N' ` --new-file'
在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件。
` --new-group-format=format'
使用 format 以 if-then-else 格式输出只在第二个文件中取出的一个行组。参阅 Line group formats.
` --new-line-format=format'
使用 format 以 if-then-else 格式输出只在第二个文件中取出的一行。参阅 Line formats.
` --old-group-format=format'
使用 format 以 if-then-else 格式输出只在第一个文件中取出的一个行组。参阅 Line group formats.
` --old-line-format=format'
使用 format 以 if-then-else 格式输出只在第一个文件中取出的一行。参阅 Line formats.
` -p'
显示带有 C 函数的改变。
` --rcs'
输出 RCS 格式的比较; 除了每条指令指定的行数受影响外像 ` -f' 一样。
` --report-identical-files' ` -s'
当两个文件相同时报告。
` --show-c-function'
显示带有 C 函数的改变。
` --show-function-line=regexp'
在上下文和统一的格式,对于每一大块的差别,显示出匹配 regexp 的一些前面的行。
` --side-by-side'
使用并列的输出格式。
` --speed-large-files'
使用启发规则加速操作那些有许多离散的小差异的大文件。
` --suppress-common-lines'
在并列格式中不印出公共行。
` -t'
在输出时扩展制表符为空格,保护输入文件的制表符对齐方式。
` -T'
无论是常规的或者格式化的前后文关系,在文本行前输出制表符代替空格。使得制表符对齐方式看上去象是常规的一样。
` --text'
所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件。
` -u'
使用统一的输出格式。
` --unchanged-group-format=format'
使用 format 输出两个文件的公共行组,其格式是 if-then-else。参阅 Line group formats.
` --unchanged-line-format=format'
使用 format 输出两个文件的公共行,其格式是 if-then-else。参阅 Line formats.
` -U lines' ` --unified[=lines]'
使用统一输出,显示以指定 lines (一个整数), 或者当 lines 没有给出时是三行。对于正确的操作, patch 典型地至少要有两行。
` -w'
在比较行时忽略空格。
` -W columns' ` --width=columns'
在并列格式输出时,使用指定的 columns
` -y'
使用并列格式输出。

 

diff 示例

下面的行产生 backend.c 文件 1.14 和 1.19 修订版间的 Unidiff (`-u' 标识)。因为使用 `-kk' 标识,没有关键字会被替换,所以差异是忽略了关键字替换。

     $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c

假设试验分支 EXPR1 基于 RELEASE_1_0 标签的一组文件。要查看分支上的状态,可以试验下面命令:

     $ cvs diff -r RELEASE_1_0 -r EXPR1

类似这样的命令可以产生两个发行版的不同内容:

     $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs

如果你维护着 ChangeLog,提交前使用如下命令,可以帮助你撰写 ChangeLog 条目。将打印出本地尚未提交的修改。

     $ cvs diff -u | less

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值