目前它只比较来自不同标签的两个 Entries 文件,并输出 XML/JSON 或人类可读信息,标签之间的差异:删除、新、修订向下、修订向上。 ——大卫
您的方法存在一些问题。您已经知道第一个:需要检查标签,即使您不关心实际文件。
另一个问题是 CVS/* 文件是本地的,可以编辑和/或损坏。此外,如果您进行部分签出,条目文件将仅包含您签出的内容,而不是与标签关联的所有内容。因此,不能保证该文件是“真相”的来源。
如果您只是在更改了哪些文件之后,可以使用rdiff -s 选项。
rdiff options 文档说:
-s
创建摘要更改报告而不是补丁。摘要包括有关在版本之间更改或添加的文件的信息。它被发送到标准输出设备。这对于找出例如哪些文件在两个日期或修订版之间发生了更改很有用。
文档还包含this example:
假设您已经发布了 1.3 版,并创建了一个名为 R_1_3fix 的分支来修复错误。 R_1_3_1 对应于前一段时间发布的 1.3.1 版本。现在,您想查看在分支上进行了多少开发。可以使用这个命令:
$ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
cvs rdiff: Diffing module-name
File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
File bar.h,v changed from revision 1.29.2.1 to 1.2
我自己运行了它,这是新消息和已删除消息的样子:
cvs rdiff -s -r v5_8_0_1 -r v5_8_0_2 <module>
File abc is new; v5_8_0_2 revision 1.1.2.2
File xyz is removed; v5_8_0_1 revision 1.1.4.1
编辑:
您无需指定您所在的平台,但 cvs 命令的非统一输出当然可以通过清理命令传递,以便于管理。例如。以下 awk 会将其转换为仅包含您感兴趣的四条信息的 CSV 输出。
cvs rdiff -s -r <tag1> -r <tag2> <module> | awk '
/ new; / { print "NEW, \"" $2 "\", , " $7 }
/changed / { print "CHANGED, \"" $2 "\", " $6 ", " $8 }
/ removed; / { print "REMOVED, \"" $2 "\", " $7 ", " }
'