我需要一种简单的方法来使用 cvs 获取文件的修订版本。我可以使用 CVS/Entries 文件获取它。这不安全,我认为必须有其他方法。 cvs log
打印的内容超出了我的需要。如何使用 cvs 命令仅获取某些文件的修订号。
最佳答案
cvs log -h
仅显示 header 信息。要获取版本,可以很容易地通过 sed、awk 或 Perl 进行过滤。
这将为您提供存储库中的版本。如果您想要 check out 文件的版本,则可以使用 ident
(RCS 的一部分)——但前提是您已在文件中包含正确的关键字。 (这对于二进制文件不太适用。)
例如,如果您在 checkin 文件之前将如下内容添加到文件中:
# $Id:$
# $Source:$
然后 ident foo.txt
将打印如下内容:
foo.txt:
$Id: foo.txt,v 1.3 2011/10/17 22:49:45 kst Exp $
$Source: /path/to/repo/sandbox/foo.txt,v $
您还可以使用许多其他关键字。请参阅Keyword substitution有关详细信息,请参阅 CVS 手册部分。
这可能会以多种方式出错;例如,如果您在 checkout 文件后对其进行编辑,则扩展的关键字不一定会反射(reflect)任何有意义的内容。您可以使用cvs diff
来确定文件在 checkout 后是否已被修改。
正如我提到的,如果您尝试使用二进制文件执行此操作,它可能会损坏该文件(这就是为什么如果您告诉 CVS 文件是二进制文件,它不会执行关键字替换)。
ident
命令是 RCS 的一部分,而不是 CVS,因此如果系统上尚未安装 RCS,则必须安装它。 (使用 cvs ident
命令是有意义的;我不确定为什么它不存在。)
更“现代”的源代码控制系统往往不提供此功能。
关于CVS命令获取文件的当前修订号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618098/