Может ли git pre-commit hook добавить файл в репо?

Я храню текстовый файл моего журнала git в своем рабочем каталоге, и у меня есть скрипт, который обновляет его после фиксации. Это нормально, но в результате версия, которая находится внутри репо, всегда отстает на один коммит.

Можно ли написать хук перед коммитом, который вызовет скрипт и добавит файл в репозиторий, фактически сохранив текстовую версию журнала с текущей информацией о коммите внутри него?

Я новичок в git hooks и понятия не имею, как это будет работать, если это вообще возможно. Я ценю помощь!


person Andrew    schedule 29.01.2011    source источник


Ответы (2)


Краткий ответ: нет. Журнал содержит SHA1 коммита, который зависит от содержимого коммита. Если вы измените журнал, вы измените фиксацию, и она все равно будет недействительной.

Интересно, почему ты пытаешься это сделать, правда? В репозитории git log так же хорош, как и cat saved-git-log. Если вы хотите, чтобы это было в виде журнала изменений для выпущенных версий, просто создайте его как часть процесса сборки/развертывания, например, что-то вроде этого:

tarname=my-project-$(git describe HEAD).tar
git log > changelog.txt
git archive --format=tar HEAD > $tarname
tar -Af $tarname changelot.txt
gzip $tarname
person Cascabel    schedule 29.01.2011
comment
Хорошо, это нормально. Причина, по которой я хочу это сделать, заключается в том, что я пытаюсь встроить свой журнал коммитов в приложение Rails, развернутое на Heroku, что означает, что я могу передавать файлы на сервер, только добавляя их в репозиторий git и отправляя в Heroku. Однако, как только приложение становится AT heroku, оно больше не может делать какие-либо вызовы в свое собственное репо, что очень неубедительно. Но спасибо за предложение альтернативы! - person Andrew; 29.01.2011
comment
@Andrew: Другая большая альтернатива - сделать то, что вы сказали, отставая на одну фиксацию, за исключением того, что последняя фиксация - это просто модификация журнала изменений. Если вы делаете это только один раз за релиз, а не один раз за коммит, это действительно не так уж плохо. - person Cascabel; 29.01.2011

Я просто извлекаю полные журналы из RSS-канала на Bitbucket/Github. Кажется, это самый простой способ добиться того, о чем вы просите, особенно при использовании Heroku.

person Mike L    schedule 27.07.2012