Может быть лучше сделать это как часть вашей упаковки, а не после каждого коммита.
Существует два основных варианта:
Используйте git-archive
для упаковки и используйте атрибут export-subst
. К сожалению, вещи, которые вы можете заменить, ограничены заполнителями из git log --format=...
. Например, вы можете написать __version__ = $Format:%H$
в своем файле, поместить <filename> export-subst
в свои .gitattributes, и когда вы запустите git archive
, это изменится на полный хэш коммита, с которым вы архивируете. Это примерно то, что вы просите, но я предпочитаю следующий вариант.
Сделайте это самостоятельно как часть процесса упаковки (часто это процесс сборки для скомпилированных пакетов) и используйте git describe
. Это даст вам симпатичную красивую строку, такую как v1.7.4.1-59-ge3d3f7d
, что означает «59 коммитов после тега v1.7.4.1
, при коммите ge3d3f7d
», которые затем можно вставить как угодно в нужное место в вашем коде при сборке / сборке. Это то, что делает сам Git; результат выгружается в файл, содержимое которого считывается в make-файл, а затем передается в сборку с помощью опции препроцессора -D
и помещается в различные имена файлов (например, tar-архив выпуска).
Если вы действительно, действительно хотите делать это после каждого коммита, вы можете это сделать с помощью хука после коммита, но тогда только у вас (и у тех, кому вы даете хук) это будет, и очень очень возможно получить несинхронно - вам также понадобится хук после оформления заказа, и так далее, и так далее. Действительно лучше для любых процессов, которые создают что-то, нуждающееся в этом номере версии, чтобы получить это сами.
Вы также можете использовать грязный / чистый фильтр, который будет больше похож на то, что вы действительно хотите (а не просто после каждого коммита).