Git 树的 REST API 端点
使用 REST API 与 GitHub 上 Git 数据库中的树对象交互。
关于 Git 树
Git 树对象创建 Git 代码库中文件之间的层次结构。您可以使用 Git 树对象创建目录与其包含的文件之间的关系。这些端点允许您读取和写入 GitHub 上 Git 数据库中的树对象。
创建树
树创建 API 接受嵌套条目。如果您同时指定一个树和修改该树的嵌套路径,则此端点将用新的路径内容覆盖树的内容,并创建一个新的树结构。
如果您使用此端点添加、删除或修改树中的文件内容,则需要提交树,然后更新分支以指向提交。更多信息,请参见“创建提交”和“更新引用”。
如果您尝试删除不存在的文件,则会返回错误。
“创建树”的细粒度访问令牌
此端点适用于以下细粒度令牌类型:
细粒度令牌必须具有以下权限集
- “内容”代码库权限(写入)
“创建树”的参数
名称,类型,描述 |
---|
accept 字符串建议设置为 |
名称,类型,描述 |
---|
owner 字符串 必需代码库的帐户所有者。名称不区分大小写。 |
repo 字符串 必需代码库的名称,不包含 |
名称,类型,描述 | ||||||
---|---|---|---|---|---|---|
tree 对象数组 必需指定树结构的对象( | ||||||
|
名称,类型,描述 |
---|
path 字符串树中引用的文件。 |
mode 字符串文件模式;对于文件(blob),为 可以是: |
type 字符串
可以是: |
sha 字符串或 null树中对象的 SHA1 校验和 ID。也称为 注意:使用 |
content 字符串您希望此文件具有的内容。GitHub 将写入此 blob 并使用该 SHA 用于此条目。使用此值或 注意:使用 |
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 | 验证失败,或端点已被垃圾邮件攻击。 |
“创建树”的代码示例
请求示例
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 名称返回单个树。
如果响应中的truncated
为true
,则tree
数组中的项目数超过了我们的最大限制。如果您需要获取更多项目,请使用非递归方法获取树,并一次获取一个子树。
注意
使用recursive
参数时,tree
数组的限制为 100,000 个条目,最大大小为 7 MB。
“获取树”的细粒度访问令牌
此端点适用于以下细粒度令牌类型:
细粒度令牌必须具有以下权限集
- “内容”代码库权限(读取)
如果仅请求公共资源,则无需身份验证或上述权限即可使用此端点。
“获取树”参数
名称,类型,描述 |
---|
accept 字符串建议设置为 |
名称,类型,描述 |
---|
owner 字符串 必需代码库的帐户所有者。名称不区分大小写。 |
repo 字符串 必需代码库的名称,不包含 |
tree_sha 字符串 必填树的 SHA1 值或引用(分支或标签)名称。 |
名称,类型,描述 |
---|
recursive 字符串将此参数设置为任何值都会返回 |
“获取树”的 HTTP 响应状态码
状态代码 | 描述 |
---|---|
200 | OK |
404 | 资源未找到 |
409 | 冲突 |
422 | 验证失败,或端点已被垃圾邮件攻击。 |
“获取树”的代码示例
请求示例
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 }