【问题标题】:Adding RCS Header in Binary files在二进制文件中添加 RCS 标头
【发布时间】:2012-11-24 04:25:00
【问题描述】:

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

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

【问题讨论】:

  • 您还在使用 RCS?甚至当前的RCS sources 也在 Git 中维护。
  • 是的,客户在 RCS 上使用了包装器。

标签: version-control header binaryfiles rcs


【解决方案1】:

基本上,你不会。

二进制文件格式通常无法获得可变长度的任意数据块。即使文件的某个区域可以包含任意数据,扩展的长度也可能因一次检出而异(例如,如果它从版本 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 将评论从"$Header:$" 扩展到@ 987654334@;当我尝试用 Excel 打开它时,我得到了:

Excel found unreadable content in 'foo.xls'.

它无法恢复内容。

【讨论】:

  • 我必须对随时间变化的图像和档案进行源代码控制。我记得我曾经在 windows 的 File Properties->Comment 部分中输入 RCS 标头后签入 MS Excel 文件。
  • @NeilGhosh:根据 MS Excel 表示评论部分的方式,这可能会失败。请参阅我的更新答案。
  • 如果您可以完全控制源文件并且可以嵌入长度和格式完全正确的占位符,那么您会很幸运。
  • @tripleee:但是RCS可以在每次更新版本号时改变占位符的大小,这会改变字符串后面所有数据的偏移量,很可能会破坏二进制格式。
  • 是的,您需要能够预测更新后的标头的大小。但也许您可以通过控制环境(例如,强制所有用户名长度相同,并从 1.10000 开始编号版本;不允许分支和 RCS 关键字等)或通过找出将发生的变化来实现。
【解决方案2】:

一般情况下不能,但某些二进制文件有一个 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不知道插槽大小,可能会损坏文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多