Как включить ident $Id$
в файлы в репозитории Git?
Как включить идентификационную строку для репозиториев 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 для проверки проекта в целом. Как я уже сказал, это клад, но это имеет смысл (иногда для некоторых вещей).