Git: почтовый крюк после приема, включая патчи с расширением?

Я нашел post-receive hook для Git после некоторого googling, который я использую для отправки всех сообщений на удаленный/общий репо.

Проблема с этим post-receive hook заключается в том, что он имеет только возможность предоставить, кто сделал фиксацию, сообщение журнала, дату, файла (ов). Я также хочу, чтобы затронутые файлы (-ы) сгенерировали исправления в электронном письме, чтобы узнать, какие изменения были внесены в код. Subversion делает это довольно красиво.

Есть ли у кого-нибудь решение, возможно, env-переменная, которая может быть передана приложению post-receive, который делает это? Или еще лучше, пример, который уже приготовлен?

Спасибо всем!

Ответ 1

В последней версии Git должна быть установлена ​​post-receive-email script. В нем говорится:

hooks.showrev

Команда оболочки, используемая для форматирования каждой ревизии в письме, с    "% s" заменено идентификатором фиксации. По умолчанию "git rev-list -1   --pretty% s", отображающий идентификатор, автор, дату и журнал   сообщение. Чтобы перечислить полные патчи, разделенные пустой строкой, вы   может установить это значение "git show -C% s; echo".

Так что просто установите hooks.showrev в "git show -C% s; echo" в репозитории с помощью крючка электронной почты и вы все установите.

Ответ 2

У меня были похожие проблемы:

Git для отправки уведомлений по электронной почте об изменениях репо

На самом деле существуют разные версии post-receive-email script - тот, который доступен на git.kernel.org сообщает и уважает hooks.showrev, тот, который у меня не был.

Но это обсуждение круто, спасибо, обязательно посмотрим! Другой связанный выше script также имеет функцию gitweb link и прочее, как вы это делаете на других?

Ответ 3

Я не запускал это через некоторое время, но (я полагаю) тот, который я использовал для использования, находится в режиме онлайн. Я взял то, что раньше поставлялось с git, и переписал его больше по своему вкусу. Я не пробовал использовать что-либо подобное в течение длительного времени.

У меня есть несколько скриншотов из того, что он сделал:

Ответ 4

Смотрите этот раздел.

echo ""
echo "Summary of changes:"
git diff-tree --stat --summary --find-copies-harder $oldrev..$newrev

Здесь git запрашивается diff, но затем также предлагается суммировать его. Удалите флаги -stat и -summary, и вы увидите diff.

git diff-tree --find-copies-harder $oldrev..$newrev

Вот еще один способ, который показывает все изменения, включая diff от $oldrev до $newrev

git --no-pager log --find-copies-harder $oldrev..$newrev