在二进制文件中添加RCS标头

时间:2012-12-06 07:03:49

标签: version-control header binaryfiles rcs

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

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

2 个答案:

答案 0 :(得分:1)

基本上,你没有。

二进制文件格式通常不具有可变长度的任意数据块的方法。即使文件的某个区域可以包含任意数据,扩展的长度也可以从一个checkout变为另一个(例如,如果它从版本1.9变为1.10),这可能会弄乱文件。

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

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

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

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

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

您提到了Excel文件。我刚试了一些实验。新的.xlsx格式实际上是一个zip文件;您在评论部分中放置的任何内容都将被压缩,ident不可见。较旧的.xls格式(至少对于我尝试的小文件)确实将“注释”部分存储在可读文本中,因此ident可以正常工作 - 但是当我签入文件时,RCS扩展了注释{ {1}} "$Header:$";当我尝试用Excel打开它时,我得到了:

"$Header: /home/kst/2012-12-06/RCS/foo.xls,v 1.1 2012-12-06 11:47:48-08 kst Exp kst $"

并且无法恢复内容。

答案 1 :(得分:0)

通常不能,但是某些二进制文件具有用于放置RCS标头的ASCII插槽。

例如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标头,例如Version或Date,因为RCS不知道插槽大小,可能会损坏文件。