Ответ 1
Резюме: Рекомендуемый способ встраивания информации о версии в продукт - использовать систему сборки; см. ниже подробную информацию и альтернативные подходы.
В Git (и я думаю, что обычно также в других системах VCS с атомными коммитами) нет такой вещи, как версия одиночного файла.
Git поддерживает расширение по запросу $Id:$
, но:
- Выполняется только по запросу. Вы должны указать (возможно, используя шаблон globbing), что файл (или набор файлов) имеет набор
ident
attribute (в '.gitattributes' в дереве или в '.git/info/attributes' для локальных настроек репозитория. - Он расширяется до SHA-1 содержимого файла (или, точнее,
$Id:<sha-1 of blob>$
). Причиной этого выбора является то, что Git не касается файлов, которые не изменялись при переключении или перемотке ветки; if '$ Id: $', расширенный до информации о ревизии, потребовал бы обновления каждого файла с контролируемой версией, например. при переключении ветвей.
Git поддерживает довольно широкий набор заполнителей $Format:...$
, который расширяет для фиксации информации (например, $Format:%H$
заменяется хешем фиксации), но:
- Расширение выполняется только при запуске Git archive в его выходном файле.
- Выполняется по запросу, управляется с помощью атрибута
export-subst
.
Рекомендуемый способ встраивания информации о версии - это сделать это с помощью системы сборки (на этапе сборки); см., например, Git Makefile и GIT-VERSION-GEN script, используемый Makefile в Git веб-интерфейсе для репозитория git.git.
Однако вы можете использовать драйвер фильтра очистки /smudge (через атрибут filter
), чтобы получить расширение ключевого слова CVS, расширение ключевых слов в кассе и очистку их при вводе содержимого в репозиторий.