提交的分支列表出现在

时间:2014-05-27 21:32:12

标签: github github-api

使用GitHub API(v3)我想知道提交出现在哪些分支上。我没有找到通过repo提交或提交数据对象直接查询它的方法。另一种解决方案是列出所有分支,并与其HEAD进行比较;我想如果提交不在给定分支上,则比较将失败。

这是否通过当前的API支持,我只是错过了它?如果没有,你有(更好的)解决方法吗?

3 个答案:

答案 0 :(得分:15)

直接通过GitHub API无法实现。

解决方法1:

  1. 获得list of all branches
  2. 对于每个分支,获得list of commits on that branch
  3. 检查提交是否在每个分支的提交列表中
  4. 解决方法2(我认为这将有效,但如果我错过了一个案例,则不能100%确定):

    1. 获得list of all branches
    2. 每个分支compare the branch with the SHA

      https://api.github.com/repos/:user/:repo/compare/:branch...:sha_of_commit

    3. 如果响应中status属性的值为divergedahead,则提交不在分支中。如果status属性的值为behindidentical,则提交位于分支中。

答案 1 :(得分:1)

我还没有检查GitHub API是否直接支持这一点,但使用普通Git这是微不足道的:

git branch --all --contains <commit>

这将列出包含给定提交的本地存储库中的所有分支(本地和远程)。

答案 2 :(得分:0)

Git Lab API

关注Ivan Zuzak's solution number 2,了解提交是否在分支上:

使用GitLab的repository compare API,并将分支提交

进行比较
GET /projects/:id/repository/compare?from=<branch>&to=<sha_of_commit>

如果commits列表为空,则为是,提交在该分支上。

在Python中,使用python-gitlab

def is_commit_on_branch(project, commit, branch):
    c = project.repository_compare(branch, commit)
    return not c['commits']