You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用go-github客户端查询包含指定git sha的远程分支

基于go-github通过Git SHA查询包含该提交的远程分支实现方法

首先明确:可以通过go-github实现该需求,GitHub官方提供了对应的底层API,go-github已经做了完整封装。

核心实现逻辑

  • 第一步:调用github.Repositories.ListBranches方法拉取目标仓库的全部分支信息,注意处理分页参数,单次请求最多返回100条分支
  • 第二步:对拉取到的每一个分支,调用github.Repositories.CompareCommits方法,入参分别为仓库所属用户名、仓库名、待查询的Git SHA、分支名
  • 第三步:校验接口返回的Comparison.Status字段,如果返回值为behind或者identical,说明待查询的SHA属于该分支:
    • identical代表待查询SHA和分支HEAD完全一致
    • behind代表分支的提交历史包含待查询SHA,当前分支HEAD是该SHA之后的提交

示例代码

package main

import (
	"context"
	"fmt"
	"github.com/google/go-github/v55/github"
	"golang.org/x/oauth2"
)

func ListBranchesContainsSha(ctx context.Context, owner, repo, targetSha string, client *github.Client) ([]string, error) {
	var res []string
	opt := &github.ListOptions{PerPage: 100}
	// 拉取全部分支
	for {
		branches, resp, err := client.Repositories.ListBranches(ctx, owner, repo, opt)
		if err != nil {
			return nil, err
		}
		// 逐个校验分支是否包含目标SHA
		for _, b := range branches {
			cmp, _, err := client.Repositories.CompareCommits(ctx, owner, repo, targetSha, b.GetName(), nil)
			if err != nil {
				return nil, err
			}
			if cmp.GetStatus() == "behind" || cmp.GetStatus() == "identical" {
				res = append(res, b.GetName())
			}
		}
		if resp.NextPage == 0 {
			break
		}
		opt.Page = resp.NextPage
	}
	return res, nil
}

func main() {
	ctx := context.Background()
	// 替换为你的GitHub Token
	ts := oauth2.StaticTokenSource(
		&oauth2.Token{AccessToken: "your-github-token"},
	)
	tc := oauth2.NewClient(ctx, ts)
	client := github.NewClient(tc)

	// 测试查询
	branches, err := ListBranchesContainsSha(ctx, "google", "go-github", "填写你要查询的SHA", client)
	if err != nil {
		panic(err)
	}
	fmt.Println("包含目标SHA的分支:", branches)
}

性能优化建议

  • 如果仓库分支量级很大,可以先拉取所有分支的HEAD提交时间,过滤掉HEAD提交时间早于目标SHA提交时间的分支,不需要再调用比较接口,能大幅降低API请求次数
  • 可以对CompareCommits的请求做并发处理,注意不要超过GitHub API的速率限制,个人认证用户每小时最多请求5000次,未认证用户每小时仅60次

内容的提问来源于stack exchange,提问作者shakalaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:24:01