从post-receive hook中找到分支点

时间:2014-06-13 06:40:37

标签: git github branch git-branch git-post-receive

tl; dr:仅使用github api调用从post-receive hook中找到分支点。

所以现在我有一个服务器连接了远程git存储库的post-receive钩子。每当git push完成时,服务器都会收到通知。将传递给服务器的信息是标准的接收后参数{old_revision,new_revision,ref_name}。

服务器将做的是确定将哪些提交推送到git repo,并为每个推送的提交生成一个新的电子邮件(包括git stat info,diffs等)。服务器不会执行git repo的克隆,而只会对远程api服务器进行api调用(它提供类似于github api的api调用,让我们假设我是使用github api)来检索有关远程git存储库的信息。

当用户只是将标准提交推送到git repo服务器时,编译并不是太多。但是,当将新分支推送到服务器时,结果非常棘手。

因此,每当推送新分支时,{ref_name}被设置为新创建的分支的名称,{new_revision}将是该分支的头部,但{old_revision}是0000000000000000000000000000000000000000。因为没有old_revision ,我不能简单地确定推送到服务器的提交范围。相反,我需要确定新创建的分支的分支点。

示例:

-- X -- A -- B -- C -- D -- F  (master) 
          \     /   \     /
           \   /     \   /
             G -- H -- I -- J  (branch A)

我需要做些什么才能找到分支点 - 提交“A”。

由于我无法访问实际的git repo,

Finding a branch point with Git?

不适用于我。

我目前的解决方案:

将推送分支的所有提交(按时间排序)与推送分支以外的所有分支的所有提交进行比较,然后最早提交在其他分支中不存在,那么它就是分支点。然而,它显然非常低效,并且占用了太多时间。

我的问题是,是否有更有效的方法来确定分支点(或者,如果你的解决方案甚至不使用分支点,只是使用 github api来确定新推出的分支的提交范围)

0 个答案:

没有答案