以前曾提到过,在发布软件补丁时很少(可能从不)使用正规和并排的块格式.但diff产生的上下文(context)或统一(unified)的块格式是创建补丁所采用的格式.为了产生上下文的差异文件(它们称为context
diff的原因是它们显示出了有差别的行的上下文内容),可使用diff的-c或-C[num]选项.
提示:和大多数GNU程序一样,diff也支持长选项,也就是以两个两字符"--"开头,后面跟着更容易记忆的名字的选项,例如,创建一个上下文diff文件的长选项是"--context=[num]".
上下文输出举例
$diff
-c hello.c howdy.c
*** hello.c Web Aug 9 21:02:42 2000
--- howdy.c Web Aug
9 21:04:30 2000
*************
*** 1,12 ****
#include
<stdio.h>
int main(void)
{
! char msg[ ] = "Hello,
Linux programmer!";
puts(msg);
! printf("Here you are,
using diff.\n");
! return 0;
}
--- 1,13 ---
#include
<stdio.h>
+ #include <stdlib.h>
int
main(void)
{
! char msg[] = "Hello, Linux programmer, from
howdy.c!");
puts(msg);
! printf("howdy.c says, `Here you are,
using diff.`\n");
!
exit(EXIT_SUCCESS);
}
$
上下文块的格式采用以下一般形式:
*** srcfile
srcfile_timestamp
--- dstfile
dstfile_timestamp
****************
*** srcfile_line_range
***
srcfile line
--- dstfile line_line_range
dstfile
line
dstfile line...
. + -----向srcfile添加一行以创建dstfile
. -
-----从srcfile删除一行以创建dstfile
. !
-----在srcfile改变一行以创建dstfile.srcfile中标记"!"的每一行或一段,在dstfile中相应的每一行或一段也标记"!".
每一块(hunk)都用一长串最多15个星号和下一块(hunk)分隔开来.