检查拉取请求是否与目标分支一致

Bra*_*ley 12 git merge github github-api jenkins

我们的项目使用受保护的分支,并要求PR的基本分支与目标分支保持最新才能合并.我们也使用Jenkins来构建PR的未合并头,因为我们使用的插件会在目标分支发生变化时自动重建所有打开的PR,这会很快堵塞管道.所以,在这情况下,一个PR被打开而不上最新与目标分支,我们希望能够停止詹金斯管道马上并通知他们需要首先合并的提交者.

因此,使用GitHub API,我希望能够判断拉取请求是否与目标分支是最新的.最接近的东西,这似乎是在拉请求"可合并"的属性,但看起来像只表示一个安全的自动合并是否能够完成,分公司不是是否已经跟上时代的.

是否有可以查看的直接API json标记?如果没有,是否有一种简单的方法可以使用git命令手动检查?

Sco*_*don 8

我不知道GitHub是否通过他们的API公开了这些信息,但您可以使用Git命令手动检测这些信息.您希望找到所谓的合并库,并确保此提交与master(或您的主分支)的提示相同.

脚本的形式,它看起来像这样:

if [ $(git merge-base @ master) == $(git rev-parse master) ]
then
  echo "Your branch is up to date."
  exit 0
else
  echo "You need to merge / rebase."
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

如果将此脚本作为构建步骤包含在内,则退出值应导致Jenkins在必要时使作业失败.


小智 7

如果你想使用github API。任何返回拉取请求对象的 APImergeable_state中都会包含该字段。如果其值为behind,则意味着在创建拉取请求后更新基础分支。即:拉取请求分支已过时。

这是mergestatestatus解释

如果您在 Jenkings 服务器中处理 Webhook 响应,大多数拉取请求事件(例如拉取请求创建、编辑、关闭或 issues_comment 事件)将包含mergeable_state拉取请求对象中的信息。


Dmi*_*try 5

有一种现代的方法可以做到这一点

git merge-base --is-ancestor A B
Run Code Online (Sandbox Code Playgroud)

请参阅git-merge-base