Cоздать новое дерево

POST /repos/{owner}/{repo}/git/trees

Описание

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

Токен

Требуется токен с правами на Запись для Репозитория.

Заголовки

ПараметрОбязательныйОписание
acceptНетТип содержимого ответа. Рекомендуется установить значение application/vnd.gitverse.object+json;version=latest

Параметры пути

ПараметрТипОбязательныйОписание
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)
429Too Many RequestsПревышен лимит запросов
500Internal Server ErrorВнутренняя ошибка сервера

Пример тела ошибки

При ответе 400 тело ответа имеет следующий вид:

{
  "error": {
    "code": "BAD_REQUEST",
    "documentation_url": "https://gitverse.ru/docs/developers/public-api/",
    "message": "The request format is invalid",
    "status": 400
  }
}