如何在GitHub Action中使用raw.githubusercontent.com访问同账号仓库文件?
解决GitHub Action访问同账号下另一个仓库文件的问题
问题根源
- 默认的
GITHUB_TOKEN权限仅局限于当前仓库,无法访问同账号下的其他仓库(尤其是私有仓库)。 - 直接在raw.githubusercontent.com的URL后拼接
?token=GITHUB_TOKEN的方式不被官方支持,这种传参方式无效。
可行解决方案
方案一:用actions/checkout拉取目标仓库
这是最直观可靠的方式,直接将目标仓库拉取到当前工作流的运行环境中,之后就能像操作本地文件一样读取内容。
示例工作流代码:
- name: 拉取目标仓库 uses: actions/checkout@v4 with: repository: <你的用户名>/<目标仓库名> ref: <目标分支> # 例如main、dev path: ./target-repo # 指定拉取到当前目录下的子文件夹 token: ${{ secrets.GITHUB_TOKEN }} # 若目标仓库是私有,需替换为有权限的PAT - name: 读取目标文件 run: cat ./target-repo/<目标文件名>
注意:如果目标仓库是私有,默认GITHUB_TOKEN没有跨仓库访问权限,需要创建一个带有repo权限的Personal Access Token(PAT),将其存入当前仓库的Secrets(比如命名为PRIVATE_REPO_TOKEN),然后把上述代码中的token值替换为${{ secrets.PRIVATE_REPO_TOKEN }}。
方案二:通过GitHub API获取文件内容
如果不需要拉取整个仓库,可以调用GitHub API获取文件内容,注意要在请求头中正确携带token。
示例工作流代码(使用curl和jq处理):
- name: 用API获取文件内容 run: | curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ https://api.github.com/repos/<你的用户名>/<目标仓库名>/contents/<目标文件名>?ref=<目标分支> | jq -r '.content' | base64 --decode > ./local-file.txt
说明:GitHub API返回的文件内容是Base64编码格式,所以需要解码后才能得到原始内容。同样,私有仓库需要确保使用的token有访问权限。
额外提醒
- 禁止在URL中直接拼接token,这种方式既不安全,也不被官方支持。
- 优先选择
actions/checkout方案,后续对文件的修改、复制等操作会更便捷。 - 使用PAT时遵循最小权限原则,只赋予必要的
repo权限,降低泄露后的风险。
内容的提问来源于stack exchange,提问作者zero
相关产品推荐
相关产品推荐

