Добавление заголовка RCS в двоичные файлы
Я использую систему контроля версий RCS, и мне нужно проверить в двоичном файле (изображение в формате gif и файл jar), как мне добавить ключевое слово $Header$, чтобы информация о версии заменялась в этом файле во время регистрации и появлялась при выдаче Команда "Ident".
Для текстовых файлов, таких как Java, XML и т. Д., Мы обычно добавляем комментарии заголовка RCS и открытые строки, но не имеем представления о двоичных файлах.
1 ответ
По сути, вы этого не делаете.
Бинарные форматы файлов, как правило, не могут иметь кусок произвольной длины переменной длины. Даже если есть область файла, которая может содержать произвольные данные, длина расширения может варьироваться от одной проверки к другой (например, если она идет от версии 1.9 до 1.10), и это может испортить файл.
Чтобы это работало, двоичный формат должен был допускать изменение размера строки заголовка. Например, если номер версии меняется с 1.9
в 1.10
РКС co
Команда (которая не знает о формате двоичного файла) заменит строку на месте, изменив смещение всех данных, следующих за строкой. Если формат файла имеет раздел комментариев, а размер этого раздела хранится в виде числа, co
не собирается обновлять этот номер.
Генерируемые компилятором объектные и исполняемые файлы часто содержат информацию о версии RCS, но обычно она генерируется из исходного файла (ов); Сами объекты и исполняемые файлы обычно не хранятся в системе контроля версий.
Перед начальной проверкой бинарного файла вы должны запустить rcs -i -kb filename
, так что RCS co
Команда не пытается выполнить замену ключевого слова (на случай, если файл случайно содержит нечто, похожее на ключевое слово 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'.
и он не смог восстановить содержимое.
В общем, вы не можете, но в некоторых двоичных файлах есть слот 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 не знает размер слота и может испортить файл.