如何找出哪些CVS标记覆盖哪些文件和路径?

如何找出哪些CVS标记覆盖哪些文件和路径?,cvs,Cvs,有一个遗留CVS存储库,其中包含大量目录、子目录和路径。还有大量分支和标记不一定覆盖所有路径和文件,通常是一个子集。我怎样才能知道,哪些分支/标记覆盖哪些文件和路径 CVS日志已经提供了每个文件的标记列表。该任务要求我将其转换为每个标记的文件。我在当前的WinCVS(CVSNT)实现中找不到这样的功能。如果有足够的空周期,我可以编写一个Perl脚本来实现这一点,算法并不复杂,但需要完成 我可以想象有一些人需要这些信息并解决了这个问题。因此,我认为这应该是一个现成的(开源/免费)工具。我不知道有任

有一个遗留CVS存储库,其中包含大量目录、子目录和路径。还有大量分支和标记不一定覆盖所有路径和文件,通常是一个子集。我怎样才能知道,哪些分支/标记覆盖哪些文件和路径

CVS日志已经提供了每个文件的标记列表。该任务要求我将其转换为每个标记的文件。我在当前的WinCVS(CVSNT)实现中找不到这样的功能。如果有足够的空周期,我可以编写一个Perl脚本来实现这一点,算法并不复杂,但需要完成


我可以想象有一些人需要这些信息并解决了这个问题。因此,我认为这应该是一个现成的(开源/免费)工具。

我不知道有任何工具可以帮助您,但如果您正在编写自己的工具,我可以将您从一个标题中解救出来:CVS中的目录不能被标记。只有其中的文件才有标记(这决定了在签出特定标记上的目录时签出的内容)。

要确定哪些标记适用于特定文件,请使用:

cvs log <filename>
cvs日志
这将输出文件的所有版本以及应用于该版本的标记

要确定单个标记中包含哪些文件,我唯一能想到的就是使用标记签出并查看哪些文件返回。该命令可以是以下任意命令:

cvs update -r <tagname>
cvs co <modulename> -r <tagname>
cvs export <modulename> -r <tagname>
cvs更新-r
cvs co-r
cvs导出-r

您不必进行实际结账。您可以使用-n选项仅模拟以下情况:

cvs -n co -rTagName ModuleName

这将为您提供模块ModuleName中标记名的所有文件的名称。

下面的命令给出了标记名“yourTagName”中的文件列表。所有文件都标记为新的,修订信息在“yourTagName”中

此命令在2000-01-01和您的标记之间进行差异,请随意使用另一个更早的日期

cvs -q rdiff -s -D 2000-01-01 -r yourTagName

要在文件上列出标记,还可以执行以下操作:

cvs status -v <file>
cvs状态-v

上面引用的方法对我不起作用

cvs-q rdiff-s-D 2000-01-01-r

然而,经过一番周旋之后,我意识到

cvs-q rdiff-s-D 2000-01-01-r您的标记名ModuleName


works

无法使此项正常工作。返回的cvs:这里没有版本;运行“cvs签出”first@Joseph:您需要通过环境变量或使用
-d
参数指定CVSROOT。否则CVS不知道查询哪个存储库。感谢您的回复。我不确定我是否添加了这个,但我再次尝试使用-d和cvs存储库的路径,得到了相同的消息。我正在运行cvs的1.1.22版。有趣的是,如果我给出一个不存在的标记,它会告诉我该标记不存在。@Joseph:Hmm,可能是CVS客户端的内部实现确实需要一个工作副本才能使用
-n
-选项。在这种情况下,您可能只需执行一次最小的签出操作,如
cvs co-l.
(即,对存储库的根文件夹进行非递归签出,该文件夹通常不包含任何文件-这将创建必要的带有所需元数据的./cvs文件夹)