跳到主要内容
REST API 现在已版本化。 更多信息,请参见“关于 API 版本控制”。

Git 树的 REST API 端点

使用 REST API 与 GitHub 上 Git 数据库中的树对象交互。

关于 Git 树

Git 树对象创建 Git 代码库中文件之间的层次结构。您可以使用 Git 树对象创建目录与其包含的文件之间的关系。这些端点允许您读取和写入 GitHub 上 Git 数据库中的树对象

创建树

树创建 API 接受嵌套条目。如果您同时指定一个树和修改该树的嵌套路径,则此端点将用新的路径内容覆盖树的内容,并创建一个新的树结构。

如果您使用此端点添加、删除或修改树中的文件内容,则需要提交树,然后更新分支以指向提交。更多信息,请参见“创建提交”和“更新引用”。

如果您尝试删除不存在的文件,则会返回错误。

“创建树”的细粒度访问令牌

此端点适用于以下细粒度令牌类型:

细粒度令牌必须具有以下权限集

  • “内容”代码库权限(写入)

“创建树”的参数

标头
名称,类型,描述
accept 字符串

建议设置为application/vnd.github+json

路径参数
名称,类型,描述
owner 字符串 必需

代码库的帐户所有者。名称不区分大小写。

repo 字符串 必需

代码库的名称,不包含.git扩展名。名称不区分大小写。

主体参数
名称,类型,描述
tree 对象数组 必需

指定树结构的对象(pathmodetypesha)。

名称,类型,描述
path 字符串

树中引用的文件。

mode 字符串

文件模式;对于文件(blob),为100644;对于可执行文件(blob),为100755;对于子目录(tree),为040000;对于子模块(commit),为160000;对于指定符号链接路径的 blob,为120000

可以是: 100644100755040000160000120000

type 字符串

blobtreecommit

可以是: blobtreecommit

sha 字符串或 null

树中对象的 SHA1 校验和 ID。也称为tree.sha。如果值为null,则文件将被删除。

注意:使用tree.shacontent来指定条目的内容。同时使用tree.shacontent将返回错误。

content 字符串

您希望此文件具有的内容。GitHub 将写入此 blob 并使用该 SHA 用于此条目。使用此值或tree.sha

注意:使用tree.shacontent来指定条目的内容。同时使用tree.shacontent将返回错误。

base_tree 字符串

现有 Git 树对象的 SHA1,它将用作新树的基础。如果提供,则将根据base_tree指向的 Git 树对象中的条目和tree参数中定义的条目创建新的 Git 树对象。tree参数中定义的条目将使用相同的path覆盖来自base_tree的项目。如果您正在分支上创建新的更改,则通常会将base_tree设置为正在处理的分支上当前最新提交的 Git 树对象的 SHA1。如果没有提供,GitHub 将仅根据tree参数中定义的条目创建新的 Git 树对象。如果您创建指向此类树的新提交,则父提交的树中的一部分并且未在tree参数中定义的所有文件都将被新提交列为已删除。

“创建树”的 HTTP 响应状态代码

状态代码描述
201

已创建

403

禁止

404

资源未找到

409

冲突

422

验证失败,或端点已被垃圾邮件攻击。

“创建树”的代码示例

请求示例

post/repos/{owner}/{repo}/git/trees
curl -L \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/git/trees \ -d '{"base_tree":"9fb037999f264ba9a7fc6274d15fa3ae2ab98312","tree":[{"path":"file.rb","mode":"100644","type":"blob","sha":"44b4fc6d56897b048c772eb4087f854f46256132"}]}'

响应

状态:201
{ "sha": "cd8274d15fa3ae2ab983129fb037999f264ba9a7", "url": "https://api.github.com/repos/octocat/Hello-World/trees/cd8274d15fa3ae2ab983129fb037999f264ba9a7", "tree": [ { "path": "file.rb", "mode": "100644", "type": "blob", "size": 132, "sha": "7c258a9869f33c1e1e1f74fbb32f07c86cb5a75b", "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/7c258a9869f33c1e1e1f74fbb32f07c86cb5a75b" } ], "truncated": true }

获取树

使用该树的 SHA1 值或 ref 名称返回单个树。

如果响应中的truncatedtrue,则tree数组中的项目数超过了我们的最大限制。如果您需要获取更多项目,请使用非递归方法获取树,并一次获取一个子树。

注意

使用recursive参数时,tree数组的限制为 100,000 个条目,最大大小为 7 MB。

“获取树”的细粒度访问令牌

此端点适用于以下细粒度令牌类型:

细粒度令牌必须具有以下权限集

  • “内容”代码库权限(读取)

如果仅请求公共资源,则无需身份验证或上述权限即可使用此端点。

“获取树”参数

标头
名称,类型,描述
accept 字符串

建议设置为application/vnd.github+json

路径参数
名称,类型,描述
owner 字符串 必需

代码库的帐户所有者。名称不区分大小写。

repo 字符串 必需

代码库的名称,不包含.git扩展名。名称不区分大小写。

tree_sha 字符串 必填

树的 SHA1 值或引用(分支或标签)名称。

查询参数
名称,类型,描述
recursive 字符串

将此参数设置为任何值都会返回:tree_sha中指定的树引用的对象或子树。例如,将recursive设置为以下任何值都将启用返回对象或子树:01"true""false"。省略此参数可防止递归返回对象或子树。

“获取树”的 HTTP 响应状态码

状态代码描述
200

OK

404

资源未找到

409

冲突

422

验证失败,或端点已被垃圾邮件攻击。

“获取树”的代码示例

请求示例

获取/repos/{owner}/{repo}/git/trees/{tree_sha}
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/git/trees/TREE_SHA

默认响应

状态:200
{ "sha": "9fb037999f264ba9a7fc6274d15fa3ae2ab98312", "url": "https://api.github.com/repos/octocat/Hello-World/trees/9fb037999f264ba9a7fc6274d15fa3ae2ab98312", "tree": [ { "path": "file.rb", "mode": "100644", "type": "blob", "size": 30, "sha": "44b4fc6d56897b048c772eb4087f854f46256132", "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/44b4fc6d56897b048c772eb4087f854f46256132" }, { "path": "subdir", "mode": "040000", "type": "tree", "sha": "f484d249c660418515fb01c2b9662073663c242e", "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/f484d249c660418515fb01c2b9662073663c242e" }, { "path": "exec_file", "mode": "100755", "type": "blob", "size": 75, "sha": "45b983be36b73c0788dc9cbcb76cbb80fc7bb057", "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/45b983be36b73c0788dc9cbcb76cbb80fc7bb057" } ], "truncated": false }