Git:post-receive电子邮件挂钩,包括差异补丁?

22

我在Google上找到了一个Git的post-receive钩子,用于将所有提交发送到远程/共享存储库。

这个 post-receive钩子的问题在于它只提供了谁进行了提交,日志消息,日期,受影响的文件。我还想在电子邮件中看到受影响的文件生成的补丁,以了解对代码进行了哪些更改。 Subversion做得相当好。

有没有人有解决方案,可以通过传递给post-receive钩子的env-variable来实现此功能?或者更好的是,已经准备好的示例?

谢谢大家!

6个回答

21
最近版本的Git应该安装了一个名为post-receive-email的脚本。在其中,它说:

hooks.showrev

用于格式化电子邮件中每个修订版本的Shell命令,其中“%s”用提交ID替换。默认为“git rev-list -1 --pretty %s”,显示提交ID、作者、日期和日志信息。要列出由空行分隔的完整补丁,您可以将其设置为“git show -C %s; echo”。

所以只需在具有电子邮件钩子的存储库中将hooks.showrev设置为“git show -C %s; echo”,然后您就可以全部设置完成了。

Bombe,我已经尝试在命令行上设置以下内容,但没有成功。#git config --global hooks.showrev“git show -C%s; echo” - anon
没关系,你不能将它添加到“--global”,它必须只是“git config”,否则你的解决方案是正确的,谢谢! - anon
我在全局设置中设置所有必要的配置值时没有遇到任何问题。 - Bombe
或者,要配置更改周围的上下文行数:“git show -U20 -C %s; echo”,其中-U20指定例如每个行差异之前和之后的二十行上下文。 - Phillip

2
我曾遇到类似的问题: Git钩子在存储库更改时发送电子邮件通知 事实上,post-receive-email脚本有不同版本 - 在git.kernel.org上可用的版本会提醒和尊重hooks.showrev,而我使用的那个则没有。
但这个讨论很棒,谢谢,我一定会关注它!上面链接的另一个脚本还具有gitweb链接功能和其他东西,你们是如何处理这些的?

1

1

我有一段时间没有运行它了,但是(我相信)我曾经使用的在线工具还在。我重新排列了以前随git一起提供的内容,以适应我的喜好。我已经很久没有尝试过运行类似的东西了。

我有一些它所做的屏幕截图:


嗨,达斯汀。你有做出让输出看起来类似于上面截图的修改吗? - anon
我很确定这就是我第一句话中的要点链接。如果不是,那就不行了。:( - Dustin
不幸的是,不是每个人都能查看您的屏幕截图。当我点击其中一个链接时,它会显示一个页面,您需要登录Evernote,而您的屏幕截图在那里是不可见的。 - Tobias Feil

1
请查看此部分。
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

这里有另一种方法,可以显示从 $oldrev 到 $newrev 的所有修订版本,包括差异。

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

嗨,罗宾。我尝试了上面的两种模式,但仍然没有得到差异输出。 - anon
对的,在两个版本中我忘记了“-p”选项。 - robinr

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接