跳到主要内容

使用 REST API 与您的 Git 数据库交互

使用 REST API 读取和写入 Git 对象到您的 GitHub Git 数据库,以及列出和更新您的引用(分支头和标签)。

概述

这基本上允许您使用 REST API 重新实现许多 Git 功能 - 通过直接将原始对象创建到数据库并更新分支引用,您可以在技术上执行 Git 可以执行的任何操作,而无需安装 Git。

如果 Git 仓库为空或不可用,REST API 将返回 `409 Conflict`。不可用的仓库通常意味着 GitHub 正在创建仓库。对于空仓库,您可以使用 PUT /repos/{owner}/{repo}/contents/{path} REST API 端点创建内容并初始化仓库,以便您可以使用 API 管理 Git 数据库。如果此响应状态持续存在,请通过 GitHub 支持门户 联系我们。

有关 Git 对象数据库的更多信息,请阅读 Pro Git 书籍的 Git 内部机制 章节。

例如,如果您想提交对仓库中文件的更改,您将

  • 获取当前提交对象
  • 检索它指向的树
  • 检索该树针对特定文件路径的 Blob 对象的内容
  • 以某种方式更改内容并发布具有该新内容的新 Blob 对象,获取 Blob SHA
  • 发布一个新的树对象,其中该文件路径指针被替换为您的新 Blob SHA,获取树 SHA
  • 创建一个新的提交对象,其当前提交 SHA 作为父对象和新的树 SHA,获取提交 SHA
  • 更新分支的引用以指向新的提交 SHA

这看起来可能很复杂,但当您理解模型时,它实际上非常简单,并且它开启了您可以使用 API 做的很多事情。

检查拉取请求的可合并性

警告

请不要依赖直接使用 Git 或 GET /repos/{owner}/{repo}/git/refs/{ref} 来更新 `merge` Git 引用,因为此内容会在没有任何警告的情况下过期。

使用 API 的应用需要显式请求拉取请求以创建测试合并提交。当您在 UI 中查看拉取请求并显示“合并”按钮时,或者当您 获取创建编辑 使用 REST API 的拉取请求时,将创建测试合并提交。没有此请求,`merge` Git 引用将失效,直到有人下次查看拉取请求为止。

如果您当前使用的是产生过时 `merge` Git 引用的轮询方法,那么 GitHub 建议您使用以下步骤从默认分支获取最新更改

  1. 接收拉取请求 Webhook。
  2. 调用 GET /repos/{owner}/{repo}/pulls/{pull_number} 以启动创建合并提交候选者的后台作业。
  3. 使用 GET /repos/{owner}/{repo}/pulls/{pull_number} 轮询您的仓库,以查看 `mergeable` 属性是 `true` 还是 `false`。只有在执行了之前的步骤后,才能直接使用 Git 或 GET /repos/{owner}/{repo}/git/refs/{ref} 来更新 `merge` Git 引用。