2

我正在使用 RCS 源代码管理,需要签入二进制文件(gif 图像和 jar 文件)如何添加 $Header$ 关键字,以便在签入期间替换此文件中的版本信息并在我发布时显示“识别”命令。

对于 Java、XML 等文本文件,我们通常添加 RCS 标头注释和公共字符串,但不知道二进制文件。

4

2 回答 2

2

基本上,你没有。

二进制文件格式通常没有办法拥有可变长度的任意数据块。即使文件的某个区域可以包含任意数据,扩展的长度也可能因一次检出而异(例如,如果它从版本 1.9 变为 1.10),这很可能会弄乱文件。

为此,二进制格式必须能够容忍标题字符串大小的变化。例如,如果版本号从1.9变为1.10,RCSco命令(它不知道二进制文件格式)将就地替换字符串,改变字符串后面所有数据的偏移量。如果文件格式有注释部分,并且该部分的大小存储为数字,co则不会更新该数字。

编译器生成的对象和可执行文件通常包含 RCS 版本信息,但通常是从源文件生成的;对象和可执行文件本身通常不存储在版本控制系统中。

在初始签入二进制文件之前,您应该运行rcs -i -kb filename,以便 RCSco命令不会尝试进行关键字替换(以防文件碰巧包含看起来像 RCS 关键字的内容)。

如果您有一个已从 RCS 系统检出的二进制文件,并且您想知道它是哪个版本,则必须将它与 RCS 中的每个版本进行比较。(我自己的get-versions可能对此有用。)

如果您有一种在文件中存储文本元数据的方法,您还可以考虑使用时间戳注释您的二进制文件。然后,您可以通过查看 RCS 日志将时间戳与修订相关联。

您提到了 Excel 文件。我只是尝试了一些实验。新.xlsx格式实际上是一个 zip 文件;您放在评论部分的任何内容都将被压缩,并且对ident. 旧.xls格式,至少对于我尝试过的小文件,确实将注释部分存储在可读文本中,所以ident有效 - 但是当我签入文件时,RCS 将注释"$Header:$""$Header: /home/kst/2012-12-06/RCS/foo.xls,v 1.1 2012-12-06 11:47:48-08 kst Exp kst $"; 当我尝试用 Excel 打开它时,我得到了:

Excel found unreadable content in 'foo.xls'.

并且无法恢复内容。

于 2012-12-06T08:15:53.323 回答
0

一般来说你不能,但某些二进制文件有一个 ASCII 插槽来放置 RCS 标头。

例如 ZIP 文件

% zip -z archive.zip
 $Header$

然后,在 CVS 处理之后:

% unzip -l archive.zip 
$Header: /cygdrive/c/cvsroot/archive.zip,v 1.2 2020/10/14 13:46:06 omg Exp $

有很多扩展扩展实际上是一个 zip 文件,您可以在其中执行此操作:odt、pdf、... 但请谨慎使用并更喜欢短 RCS 标头,如版本或日期,因为 RCS 不知道插槽大小,并且可能损坏文件。

于 2020-10-14T14:01:41.103 回答