如何通过 Github API 更新原始分支

问题描述 投票:0回答:4

我通过 github API 创建了 github 存储库的分支。现在,稍后,我想将所有更新从原始存储库提取到分支中。在我的用例中,这应该始终是快进。我拥有对原始存储库的读取权限和对分支的读写权限。

我想过也许创建一个拉取请求然后接受(这两者都可以通过 API 完成),但这会产生噪音(拉取请求被创建和销毁)并且看起来不太正确。

有没有办法通过 API 来做到这一点?

github-api
4个回答
18
投票

我没有这方面的内幕消息,所以这可能是一个缺失的功能,会在某个时候被删除。到那时:

Github 提供了(我假设)整个分叉网络的所有提交;因此,接受提交哈希值的 API 将很乐意处理来自上游或跨其他分支的哈希值(这在repos/commits/compare创建拉取请求中有明确记录)。

因此,有几种仅通过 API 进行更新的方法:

  1. 使用 Git data api:如果您不更改 fork 的 master,这通常是最好的选择。

    1. 获取上游引用
      /repos/upstream/repo/git/refs/heads/master
      ,并从中获取哈希值
    2. 使用相同的哈希值更新您的 fork PATCH
      /repos/my/repo/git/refs/heads/master
  2. 使用更高级别的merge api:这将创建一个合并提交,有些人喜欢这样。

    1. 像以前一样获取上游引用
    2. 创建合并到仓库中的分支
      master
  3. 向自己拉取请求并通过 api 合并它:这最终不仅会创建合并提交,还会创建 PR。

    1. 创建 PR:使用
      /repos/your/repo/pulls
       发布到 
      head = "upstream:master"
    2. 从响应中获取 PR url,
    3. 合并它:PUT 到
      /repos/your/repo/pulls/number/merge

“upstream:master”符号也可能适用于选项 1 和 2,从而节省 API 调用。


2
投票

现在可以在 GitHub API 中实现这一点; 此处为文档,以及此处为公告

总而言之,使用正确的身份验证和

/repos/{owner}/{repo}/merge-upstream
的负载向
{ "branch": "branch-name" }
发出 POST 请求。


1
投票

目前不可能,但我已经将其添加到我们的 API 愿望清单中。 :)


0
投票

这对我有用,因为我需要从上游更新但没有合并请求提交。我的参考是

master

  1. 创建拉取请求
    POST /repos/:myUsername/:myRepo/pulls
    • INPUT: {title, head: 'ownerFromUpStream:master', base: 'master', ...}
  2. 从拉取请求中获取
    sha
    (例如
    response.data.head.sha
  3. PATCH /repos/:myUsername/:myRepo/git/refs/master
    • PARAMS: {sha: shaFromPullRequest}

文档。

© www.soinside.com 2019 - 2024. All rights reserved.