【发布时间】:2013-03-25 15:00:00
【问题描述】:
我需要一种简单的方法来使用 cvs 获取文件的修订版本。我可以使用CVS/Entries 文件来获取它。这不安全,我认为必须有另一种方法。 cvs log 打印的数量超出了我的需要。如何使用 cvs 命令仅获取某些文件的修订号。
【问题讨论】:
标签: cvs
我需要一种简单的方法来使用 cvs 获取文件的修订版本。我可以使用CVS/Entries 文件来获取它。这不安全,我认为必须有另一种方法。 cvs log 打印的数量超出了我的需要。如何使用 cvs 命令仅获取某些文件的修订号。
【问题讨论】:
标签: cvs
cvs log -h 仅显示标题信息。要仅获取版本,很容易通过 sed、awk 或 Perl 进行过滤。
这将为您提供存储库中的版本。如果您想要签出文件的版本,您可以使用ident(RCS 的一部分)——但前提是您在文件中包含了正确的关键字。 (这不适用于二进制文件。)
例如,如果您在签入文件之前将以下内容添加到文件中:
# $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 $
您可以使用许多其他关键字。有关详细信息,请参阅 CVS 手册的 Keyword substitution 部分。
这可能会以各种方式出错;例如,如果您在签出文件后对其进行编辑,则扩展关键字不一定反映任何有意义的内容。签出后可以使用cvs diff判断文件是否被修改。
正如我所提到的,如果您尝试对二进制文件执行此操作,它可能会损坏文件(这就是为什么如果您告诉 CVS 文件是二进制文件,它不会进行关键字替换)。
ident 命令是 RCS 的一部分,而不是 CVS,因此如果系统上还没有 RCS,则必须在系统上安装它。 (有一个cvs ident 命令会很有意义;我不确定为什么它不存在。)
更“现代”的源代码控制系统往往不提供这种功能。
【讨论】:
ident