我正在比较两个不同的内核版本(一个是官方的,一个是制造商的);有数千个文件,其唯一的区别在于文件中的元数据。元数据看起来像“$:Key: value$”。有没有一套工具可以修改这些东西?这些数据是由什么生成的?有没有办法在不通过 sed 运行整个源代码的情况下进行比较而不污染它?
一个例子:
--- ./drivers/atm/idt77252.h 2010-10-05 14:53:01.787778390 -0400
+++ ../linux-2.6.21.x/drivers/atm/idt77252.h 2010-03-26 03:08:26.000000000 -0400
@@ -1,8 +1,8 @@
/*******************************************************************
- * ident "$Id: idt77252.h,v 1.2 2001/11/11 08:13:54 ecd Exp $"
+ * ident "$Id: idt77252.h,v 1.1.1.1 2007-05-25 06:50:05 bruce Exp $"
*
- * $Author: ecd $
- * $Date: 2001/11/11 08:13:54 $
+ * $Author: bruce $
+ * $Date: 2007-05-25 06:50:05 $
*
* Copyright (c) 2000 ATecoM GmbH
*
答案1
正如 Tante 所说,这些$Word: ...$
是由某些版本控制系统(通常是 CVS 和 SubVersion)插入和更新的。
GNUdiff
有一个选项--ignore-lines-matching-re
可以排除与某个正则表达式匹配的行。这个应该可以解决问题:
diff -wu --ignore-matching-lines='\$[A-Z][a-z]*:.*\$' -r sourceA/ sourceB/
(请注意\
前面的内容$
,以防止将其解释为正则表达式中的行尾标记。)
答案2
CVS(版本控制系统)能够在签出时用其值替换某些“占位符”(例如,您可以在文件中找到签出的版本或作者)。
答案3
我似乎记得 bitkeeper 也做了这个“在结帐时扩展关键字”舞蹈,根据引用的日期,这可能会解释差异(但前提是它是真正古老的内核源代码)。在 Bitkeeper 惨败之后,当你签入 git 时,源代码不相信关键字扩展,因此它们会在那个时间点被冻结。
我们可以知道您正在比较哪些内核源吗?只是好奇。