gpt4 book ai didi

bash - 如何使用 CI 的 Git API 读取 GitHub 存储库中的所有分支?

转载 作者:行者123 更新时间:2023-12-05 09:07:42 25 4
gpt4 key购买 nike

在 CI 系统(例如 GitHub Actions 或 Travis-CI)中使用 Git API,我想收集有关存储库所有分支的信息。

遗憾的是,与本地分支不同,GitHub 分支似乎是彼此隔离的。

假设我有一个包含三个分支的存储库(master 和另外两个从 master 创建):

enter image description here

如果我运行以下脚本:

#!/usr/bin/env bash

printf "\n$ git for-each-ref --format='%(refname)' \n"
printf "$(git for-each-ref)\n"

printf "__________________________________________\n"

printf "\n$ git branch -a\n"
printf "$(git branch -a)\n"

我只能看到master,看不到另外两个分支:

enter image description here

有什么方法可以使用 Git API 读取所有 GitHub 分支,或者我必须使用 GitHub API

我希望至少能够读取从我所在的分支(在本例中为 master)生成的分支。我开始猜测 GitHub 会自己保留这些信息,而不会以任何规范的 Git 方式公开它...

最佳答案

您必须在工作流程作业中执行完整的存储库 check out ,才能获得完整的存储库数据(包括所有分支)。当您在本地计算机上执行 git clone...(没有任何开关,如 --depth--single-branch )时,您将获得所有存储库数据(标签、分支、提交历史等) .这就是 git branch -r 命令输出包含所有远程分支的原因。

在 GitHub Actions(或提到的 Travis CI)中,克隆操作的行为略有不同。默认情况下,为了节省带宽和磁盘存储空间,CI 系统只检索存储库中执行工作流所需的最少部分。这通常只是与工作流相关联的当前分支和有限的提交历史记录。这就是为什么您的命令不返回所有预期分支的原因。但是,您可以覆盖默认的 checkout 行为。如果您查看 actions/checkout docs :

Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set fetch-depth: 0 to fetch all history for all branches and tags.

考虑到上述情况,要获取所有分支,您必须根据 the docs 调整工作流程中的 actions/checkout@v2 步骤。 :

Fetch all history for all tags and branches

- uses: actions/checkout@v2
with:
fetch-depth: 0

现在,当你在下一步调用时......喜欢:

- name: List all the remote branches
run: git branch -r

你应该得到预期的输出。

谈论 Travis CI。文档对此也很清楚(请参阅 §Git Clone Depth )。您必须调整您的 travis.yml 以禁用 --depth标志:

git:
depth: false

关于bash - 如何使用 CI 的 Git API 读取 GitHub 存储库中的所有分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64611029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com