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