CVS:列出在标签(或日期)之间更改的所有文件

57

有没有办法在CVS中列出在两个标签之间发生更改的所有文件?

每次我们发布时,都会对该发布版本中的所有文件应用标签。我想找到在发布之间发生更改的所有文件。

如果我能找到在两个日期之间发生更改的所有文件,那也可以。

7个回答

35

我认为这条命令会有所帮助:

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

其中,RELEASE_1_0RELEASE_1_1是您的标签名称。

您可以在此处找到更多有关cvs diff命令的信息。

此外,创建一个脚本来生成符合您需求的报告应该相当简单,例如:更改的文件数量、已创建的文件数量、已删除的文件数量等。据我所知,最常见的cvs GUI工具(wincvs和tortoise)不会默认提供这样的功能。

希望能对您有所帮助 ;)


2
有一个名为cvs2cl的Perl脚本,可以生成漂亮格式的日志版本,可以作为最终报告或文本或XML进行后处理:http://www.red-bean.com/cvs2cl/ - Steve Jessop
刚在Google上发现了这个,真是帮我省了很多工作,非常感谢! 我一直试图通过“history”命令来查找,却忘记了使用diff。 - Darren Greaves
-N gives error on a Windows machine: cvs [server aborted]: Cannot use reserved filename 'nul' on NT based machines - Alessandro Jacopson

24

我更喜欢使用rdiff-s选项

cvs rdiff -s  -r RELEASE_1_0 -r RELEASE_1_1 module > diffs

rdiff 不需要沙盒环境; -s 会给出更改摘要。


我在这里尝试了大多数其他选项,但其他选项中我无法捕捉到所有的更改。谢谢! - Victor
这个很好。'cvs rdiff -s -rvxxxxx -rHEAD module 2>/dev/null' 给出了一个总结:“文件 <file>(从更改|是新的)....” - gaoithe

17

11
使用标准的cvs命令获取在两个版本之间发生了变化的文件列表:
cvs -q log -NSR -rV-1-0-69::V-1-0-70 2>/dev/null >log.txt

或者,要获取提交注释列表,只需删除-R

cvs -q log -NS -rV-1-0-69::V-1-0-70 2>/dev/null >log.txt

将您要比较的修订版本替换为V-1-0-69V-1-0-70


最后一个命令就是我要找的 :) 只是加了一点grep来过滤掉我不想要的行:grep -vE "^branch|^RCS|^head|^locks|^access|^keyword|^total|^description|^revision" - gregers
这对于文件更改很有用。相同的标志与cvs rlog一起使用。您可以使用“cvs -q log -NS -rvxxxx ::”显示自上一个标记以来的更改,这非常方便。对于在标记之后添加的文件,您会收到“警告:没有修订版本”,并且不会显示cvs add或commit注释。 - gaoithe

9
cvs log -d ">=DATE" -N -S -R > cvs.log

1
示例:cvs -q log -NSRd ">=2013-10-20"。如果您还想要提交摘要,请删除 R - Asclepius

4
DLira的方法提供了很多细节,包括所有更改。
如果只需要获取文件列表,可以使用以下方法:
cvs diff -N -c -r RELEASE_1_0 -r RELEASE_1_1 | grep "Index:" > diffs

抱歉,我忘记评论冗长度以及如何仅获取所需内容。但你是对的!grep是获取所需内容的好方法。 ;) - Decio Lira

1
我发现用于此的最佳工具是一个名为cvs2cl.pl的Perl脚本。它可以生成多种不同格式的更改列表。它有许多不同的选项,但我使用了类似于标签到标签的选项,如下所示:
cvs2cl.pl --delta dev_release_1_2_3:dev_release_1_6_8

或者

cvs2cl.pl --delta dev_release_1_2_3:HEAD

我也使用同一工具进行了日期比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接