Как включить идентификационную строку для репозиториев Git?

Как включить ident $Id$ в файлы в репозитории Git?

Ответ 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, расширение ключевых слов в кассе и очистку их при вводе содержимого в репозиторий.

Ответ 2

Вы можете сделать это, добавив шаблон, для которого вы хотите эту функцию, а затем ident в файле .gitattributes. Это заменит $Id $на $Id: < 40 -значный SHA > $при проверке файла. Обратите внимание, что это не даст вам номер версии файла, как в CVS/SVN.

Пример:

$ echo '*.txt ident' >> .gitattributes
$ echo '$Id$' > test.txt
$ git commit -a -m "test"

$ rm test.txt
$ git checkout -- test.txt
$ cat test.txt

Ссылка на gitattributes (5) Страница руководства

Ответ 3

Git Идентификатор не выполняет то, что $Id $делает в других системах управления версиями. В качестве kludge используйте RCS вместе с git: RCS для отдельных версий файлов и git для проверки проекта в целом. Как я уже сказал, это клад, но это имеет смысл (иногда для некоторых вещей).