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