如何获取GitHub推送的电子邮件差异?

22

有人想到了一种好的方式来获取当提交被推送到您的GitHub代码库时的邮件吗?这包括更改的文件差异。

(我知道他们有一个电子邮件服务钩子 - 但那没有包括差异)

如果差异经过内联CSS着色,并能在Gmail中查看,将获得额外奖励积分。


https://github.com/jtek/git-hook-update-notify-email 看起来很有前途,但我会感激任何关于如何使用它的说明。 - philfreo
你不能在GitHub上使用git-hook-update-notify-email。它只能在本地机器上运行。 - J-16 SDiZ
他们的电子邮件服务钩子是硬编码的东西,还是可以去修改它的源代码? - Cascabel
我不能干扰他们的电子邮件系统,但我可以添加一个Post-Receive URL(http://help.github.com/post-receive-hooks/)。 - philfreo
4个回答

9
我编写了一个小的WebHook,正好填补了这个空缺:gitdub。它利用git-notifier每次提交发送一封电子邮件。

4

你说得对,GitHub的电子邮件服务钩子不包括差异: 这是目前的功能请求

J-16 SDIZ 也是正确的,git-hook-update-notify-email 只会在本地执行,而不是在GitHub端执行。

这并不意味着该脚本无法帮助:想法是

  • 在你的一侧设置一个裸仓库,克隆GitHub仓库
  • 设置一个基础仓库的克隆
  • 每10分钟获取一次GitHub仓库的cron作业(或Windows任务)
  • 立即推送到本地非裸仓库

在本地非裸仓库中,您可以:

  • 要么使用预接收钩子(如Git书中所述,可用于计算old-revnew-rev之间的差异)
  • 要么使用上述的git-hook-update-notify-email

在这两种情况下,都需要在本地设置此类服务,这并不理想。


2
有没有考虑运行git-hook-update-notify-email服务器并使用Post-Receive Hook?http://help.github.com/post-receive-hooks/问题是如何准确设置,该项目文档不是很完善。 - philfreo
@philfreo:没问题,但两种情况下你都需要在你这边拥有那个服务器(这就是我所说的“本地”),而不是在GitHub这边。 - VonC
是的,我明白。你有没有想法这个项目是如何工作的/如何设置它? - philfreo
@philfreo:很遗憾,我没有直接的经验来处理那种类型的设置。 - VonC
显然,功能请求讨论被终止了。 - gcb
1
@gcb 确实,现在它将成为 https://developer.github.com/webhooks/#events 中的一个事件。 - VonC

2
这段文本的英译如下:

对您来说可能不是理想的答案,但如果您在自己的服务器上设置gitolite,您可以设置git-commit-notifer,获得漂亮的彩色差异电子邮件,并拥有无限的git账户,因为您拥有该服务器。我就是这样做的,从未回头。

没有服务器?您可以以非常便宜的价格(每月15美元)获取微型Amazon EC2实例。我们有多达12个开发人员和10个Git仓库,所有这些都可以在微型实例上正常工作。


2
这可以通过添加通知钩子脚本来实现,该脚本会在每次提交到Github后向您的系统发送数据。
例如:负载由应用的每个提交组成,每个提交都有一个ID:
{
  :before     => before,

  :after      => after,

  :ref        => ref,

  :commits    => [{

    :id        => commit.id, <--- here
[...]

第二步是让您的脚本触发调用github API,获取负载中包含的每个提交。响应包括每个文件的差异,然后您可以将其发送电子邮件给开发人员。

例如:http://developer.github.com/v3/repos/commits/#get-a-single-commit
GET /repos/:owner/:repo/commits/:sha

:sha是您获取代码的提交ID,响应看起来像这样:

[...]

 "files": [

    {
      "filename": "file1.txt",
      "additions": 10,
      "deletions": 2,
      "changes": 12,
      "status": "modified",
      "raw_url": "https://github.com/octocat/Hello-World/raw/7ca483543807a51b6079e54ac4cc392bc29ae284/file1.txt",
      "blob_url": "https://github.com/octocat/Hello-World/blob/7ca483543807a51b6079e54ac4cc392bc29ae284/file1.txt",
      "patch": "@@ -29,7 +29,7 @@\n....." <---- HERE
    } 
[...]

希望这可以帮到您。如果您需要更多有关如何实现的详细信息,请询问。

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