1. POST /repos/{owner}/{repo}/git/trees — cоздать новое дерево
Описание
Создает новое дерево объектов Git на основе указанного базового дерева и переданных изменений.
Этот метод не создает коммит и не обновляет ветки — он лишь формирует новую структуру файлов и каталогов в репозитории, которую можно использовать, например, при создании коммита через /git/commits.
Параметры URL
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
owner | string | Да | Владелец репозитория (пользователь или организация) |
repo | string | Да | Название репозитория |
Параметры запроса
Данный метод не использует параметры запроса.
Тело запроса
Формат: application/json
Обязательное поле:
{
"tree": [
{
"path": "README.md",
"mode": "100644",
"type": "blob",
"sha": "a1b2c3d4e5f6789012345678901234567890abcd"
},
{
"path": "src/",
"mode": "040000",
"type": "tree",
"sha": "f00dcafe1234567890abcdef1234567890abcdef"
}
],
"base_tree": "f00dcafe1234567890abcdef1234567890abcdef"
}| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
tree | array | Да | Список элементов нового дерева |
base_tree | string | Нет | SHA существующего дерева, на основе которого строится новое (если не указан — создается полностью новое дерево) |
Элементы массива tree
| Поле | Тип | Обязательный | Возможные значения | Описание |
|---|---|---|---|---|
path | string | Да | Любая допустимая файловая система | Путь к файлу или директории относительно корня репозитория |
mode | string | Да | 100644 (обычный файл), 100755 (исполняемый файл), 040000 (директория), 160000 (сабмодуль), 120000 (символическая ссылка) | Режим файла в Git |
type | string | Да | blob, tree, commit | Тип объекта Git |
sha | string | Да* | SHA объекта (может быть null для удаления элемента) | Указывает, какой объект использовать для этого пути |
💡 Если
shaравенnull, элемент будет удален из дерева.
Для создания нового файла сначала необходимо загрузить его содержимое как blob (например, черезPOST /repos/{owner}/{repo}/git/blobs), получить его SHA и использовать его здесь.
Пример запроса
curl -X POST "https://api.gitverse.ru/repos/gitverse/example-repo/git/trees" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/vnd.gitverse.object+json;version=1" \
-H "Content-Type: application/json" \
-d '{
"base_tree": "f00dcafe1234567890abcdef1234567890abcdef",
"tree": [
{
"path": "docs/CHANGELOG.md",
"mode": "100644",
"type": "blob",
"sha": "a1b2c3d4e5f6789012345678901234567890abcd"
}
]
}'Ответ (201 Created)
Пример JSON-ответа:
{
"sha": "d3adb33f1234567890abcdef1234567890abcdef",
"url": "https://api.gitverse.ru/repos/gitverse/example-repo/git/trees/d3adb33f1234567890abcdef1234567890abcdef",
"tree": [
{
"path": "docs/CHANGELOG.md",
"mode": "100644",
"type": "blob",
"sha": "a1b2c3d4e5f6789012345678901234567890abcd",
"size": 1024,
"url": "https://api.gitverse.ru/repos/gitverse/example-repo/git/blobs/a1b2c3d4e5f6789012345678901234567890abcd"
}
],
"truncated": false
}Формат ответа
application/vnd.gitverse.object+json;version=1
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
sha | string | SHA нового дерева |
url | string | API-ссылка на новое дерево |
tree | array | Список элементов в новом дереве |
truncated | boolean | Указывает, были ли результаты усечены (всегда false при создании) |
Элементы массива tree
| Поле | Тип | Описание |
|---|---|---|
path | string | Путь к файлу или директории |
mode | string | Режим файла в Git |
type | string | Тип объекта (blob, tree, и т.д.) |
sha | string | SHA объекта |
size | integer | Размер файла в байтах (только для blob) |
url | string | API-ссылка на объект |
Коды ответа
| Код | Статус | Описание |
|---|---|---|
| 201 | Created | Новое дерево успешно создано |
| 400 | Bad Request | Некорректные данные в теле запроса |
| 403 | Forbidden | Недостаточно прав для записи в репозиторий |
| 404 | Not Found | Репозиторий не найден |
| 422 | Unprocessable Entity | Ошибка валидации (например, недопустимый mode или отсутствующий sha) |
| 500 | Internal Server Error | Внутренняя ошибка сервера |