Skip to main content

此版本的 GitHub Enterprise 已停止服务 2022-10-12. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

Git 数据库 API 入门指南

Git 数据库 API 使您能够在 GitHub Enterprise Server 上的 Git 数据库中读取和写入原始 Git 对象,并列出和更新您的引用(分支头部和� �记)。

概述

这基本上允许您通过我们的 API 重新实现大量 Git 功能 - 通过直接在数据库中创建原始对象并更新分支引用,从技术上讲,您可以在不安装 Git 的情况下完成 Git 能做的任何事情。

如果 Git 存储库为空或不可用,Git 数据库 API 函数将返回 409 Conflict。 仓库不可用通常意味着 GitHub Enterprise Server 正在创建仓库。 对于空存储库,可以使用“创建或更新文件内容”终结点来创建内容并初始化存储库,以便可以使用 Git 数据库 API。 如果此响应状态仍然存在,请联系 � 的网站管理员。

git 数据库概述

有关 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. 接收拉取请求 web 挂钩。
  2. 调用 GET /repos/{owner}/{repo}/pulls/{pull_number} 以启动创建合并提交候选项的后台作业。
  3. 使用 GET /repos/{owner}/{repo}/pulls/{pull_number} 轮询存储库以查看是否 mergeable 属性为 truefalse。 只有在执行上述步骤后,才能直接使用 Git 或 GET /repos/{owner}/{repo}/git/refs/{ref} 更新 merge Git 引用。