Автоматически добавлять сообщение о фиксации к файлу, который фиксируется в Git
Моя цель состоит в том, чтобы вести журнал всей истории / сообщений о фиксации в конце каждого файла в моем хранилище. Я использовал ловушку commit-msg, чтобы получить сообщение о коммите, подготовить его и добавить в файл.
Тем не менее, я заметил, что, поскольку файл изменяется после подготовки, состояние git по-прежнему отображается как измененное. Как правильно это сделать?
2 ответа
Хотя я согласен с комментариями Оли Чарльзуорта, что вы не должны этого делать, на самом деле это возможно. Вот простой хук post-commit, который переписывает коммит, добавляя сообщение коммита в файл "changelog".
if ! test ${GIT_BYPASS_POST_COMMIT+set}
then
export GIT_BYPASS_POST_COMMIT=1
git show --format=%B -s >>changelog
git add changelog
git commit --amend -C HEAD
fi
Если вы попробуете это, я ожидаю, что вы быстро обнаружите, что это не очень хорошо при обычном использовании git. Простейшим примером является то, что если вы измените коммит, вы будете вносить изменения в коммит, который уже изменяется changelog
Таким образом, ловушка в конечном итоге дублирует сообщение фиксации.
Вам решать, хотите ли вы попытаться заставить это сработать, или просто отказываетесь от этого, но я рекомендую последнее.
Я адаптировал хук post-commit от @hvd и смог изменить код, чтобы автоматически добавлять детали сообщения коммита в проверенное местоположение файла.
#!/bin/sh
path="D:/temp.txt"
git diff HEAD~1 --name-only > ${path}
if ! test ${GIT_BYPASS_POST_COMMIT+set}
then
export GIT_BYPASS_POST_COMMIT=1
for line in `cat $path`; do
if [[ ! $line =~ version.txt ]];then
file_path=`dirname $line`
git show --format=%B -s | cut -d '#' -f2 > ${file_path}/version.txt
echo " - " >> ${file_path}/version.txt
echo $line >> ${file_path}/version.txt
git add ${file_path}/version.txt
fi
done
git commit --amend -C HEAD
fi
Первоначально он захватит все файлы, измененные во время фиксации, и сохранит в файл. Теперь это будет читать все файлы в списке файлов, за исключением файла version.txt, и добавит version.txt, который содержит *"commit message - file name"*
И он снова передаст последний коммит.
Примечание: если есть изменения в определенных каталогах, к этим каталогам будет добавлен файл версии.