Публичный APIБаза данных Git1. POST /repos/{owner}/{repo}/git/trees - создать дерево

1. POST /repos/{owner}/{repo}/git/trees — cоздать новое дерево

Описание

Создает новое дерево объектов Git на основе указанного базового дерева и переданных изменений.
Этот метод не создает коммит и не обновляет ветки — он лишь формирует новую структуру файлов и каталогов в репозитории, которую можно использовать, например, при создании коммита через /git/commits.

Параметры URL

ПараметрТипОбязательныйОписание
ownerstringДаВладелец репозитория (пользователь или организация)
repostringДаНазвание репозитория

Параметры запроса

Данный метод не использует параметры запроса.

Тело запроса

Формат: application/json
Обязательное поле:

{
  "tree": [
    {
      "path": "README.md",
      "mode": "100644",
      "type": "blob",
      "sha": "a1b2c3d4e5f6789012345678901234567890abcd"
    },
    {
      "path": "src/",
      "mode": "040000",
      "type": "tree",
      "sha": "f00dcafe1234567890abcdef1234567890abcdef"
    }
  ],
  "base_tree": "f00dcafe1234567890abcdef1234567890abcdef"
}
ПолеТипОбязательныйОписание
treearrayДаСписок элементов нового дерева
base_treestringНетSHA существующего дерева, на основе которого строится новое (если не указан — создается полностью новое дерево)

Элементы массива tree

ПолеТипОбязательныйВозможные значенияОписание
pathstringДаЛюбая допустимая файловая системаПуть к файлу или директории относительно корня репозитория
modestringДа100644 (обычный файл), 100755 (исполняемый файл), 040000 (директория), 160000 (сабмодуль), 120000 (символическая ссылка)Режим файла в Git
typestringДаblob, tree, commitТип объекта Git
shastringДа*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

Поля ответа

ПолеТипОписание
shastringSHA нового дерева
urlstringAPI-ссылка на новое дерево
treearrayСписок элементов в новом дереве
truncatedbooleanУказывает, были ли результаты усечены (всегда false при создании)

Элементы массива tree

ПолеТипОписание
pathstringПуть к файлу или директории
modestringРежим файла в Git
typestringТип объекта (blob, tree, и т.д.)
shastringSHA объекта
sizeintegerРазмер файла в байтах (только для blob)
urlstringAPI-ссылка на объект

Коды ответа

КодСтатусОписание
201CreatedНовое дерево успешно создано
400Bad RequestНекорректные данные в теле запроса
403ForbiddenНедостаточно прав для записи в репозиторий
404Not FoundРепозиторий не найден
422Unprocessable EntityОшибка валидации (например, недопустимый mode или отсутствующий sha)
500Internal Server ErrorВнутренняя ошибка сервера