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来确定新推出的分支的提交范围)