Привязать ветки и запросы на слияние к задаче
POST /repos/{owner}/{repo}/issues/{issue_number}/development
Описание
Метод POST привязывает указанные ветки и запросы на слияние к задаче. Метод не применяется к запросам на слияние.
Частичные ошибки привязки возвращаются в теле ответа в поле errors.
Метод применяется для связывания задачи с активной разработкой (ветками и запросами на слияние) для отслеживания прогресса.
Примечание: для pull request маршрут возвращает
422 Unprocessable Entity.
Заголовки
| Параметр | Обязательный | Описание |
|---|---|---|
Accept | Нет | Тип содержимого ответа. Рекомендуется установить значение application/vnd.gitverse.object+json;version=1 |
Authorization | Да | Токен доступа. Формат: Bearer <YOUR-TOKEN> или token <YOUR-TOKEN> |
Content-Type | Да | Тип содержимого запроса: application/json |
Параметры пути
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
owner | string | Да | Владелец репозитория (логин пользователя или имя организации) |
repo | string | Да | Название репозитория (без расширения .git) |
issue_number | integer | Да | Номер задачи |
Тело запроса
| Поле | Обязательное | Тип и формат | Описание |
|---|---|---|---|
pulls или branches | Да, хотя бы одно | массив | Объекты, которые нужно прикрепить. |
pulls[].number | Да для элемента pulls | целое > 0 | Номер pull request. |
pulls[].owner_name, pulls[].repo_name | Нет, но только парой | строки | Репозиторий PR; без обоих полей используется текущий. |
branches[].name | Да для элемента branches | строка | Имя ветки. |
branches[].owner_name, branches[].repo_name | Нет, но только парой | строки | Репозиторий ветки; без обоих полей используется текущий. |
Пример тела запроса со структурированными объектами:
{
"pulls": [{ "number": 18 }],
"branches": [{ "name": "feature/login", "owner_name": "acme", "repo_name": "demo" }]
}Пример запроса
curl -X POST "https://api.gitverse.ru/repos/user/my-repo/issues/18/development" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/vnd.gitverse.object+json;version=1" \
-H "Content-Type: application/json" \
-d '{"branches": [{"name": "feature/issue-18"}], "pulls": [{"number": 42}]}'
Замените YOUR_TOKEN на ваш личный токен доступа.
Пример ответа (200 OK)
При успешном выполнении сервер возвращает обновленный объект связанной разработки:
{
"pulls": [
{
"id": 6740,
"url": "https://gitverse.ru/user_42/neo2/pulls/5",
"number": 5,
"user": {
"id": 8960,
"name": "Maria Kuznetsova",
"login": "user_99",
"type": "User",
"bio": "",
"email": null,
"avatar_url": "https://gitverse.ru/avatars/5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8e5c7f5e3d5b0c4a9e6f1d2c3",
"html_url": "https://gitverse.ru/user_99",
"url": "https://api.gitverse.ru/users/user_99",
"followers_url": "https://api.gitverse.ru/users/user_99/followers",
"following_url": "https://api.gitverse.ru/users/user_99/following{/other_user}",
"repos_url": "https://api.gitverse.ru/users/user_99/repos",
"organizations_url": "https://api.gitverse.ru/users/user_99/orgs",
"site_admin": false,
"location": null,
"is_verified": false,
"followers": 0,
"following": 0,
"public_repos": 1,
"stars_count": 0,
"created_at": "2026-07-06T12:30:58Z",
"updated_at": "2026-09-08T14:22:30Z"
},
"title": "Примеры синглтона на Java: приватный конструктор (с минусами) и лучшая реализация через enum",
"body": "## Сводка\n\nРеализованы два варианта синглтона на Java: с приватным статическим конструктором и с использованием enum. Добавлены тесты, демонстрирующие уязвимость первого подхода через reflection и устойчивость enum-синглтона.\n\n## Изменения\n\n- src/main/java/src/SingletonPrivateConstructor.java — пример синглтона с приватным статическим конструктором (ленивая инициализация через classloader). В комментариях описаны все минусы подхода: уязвимость через reflection, уязвимость через десериализацию, сложность тестирования и жёсткая связность.\n- src/main/java/src/SingletonEnum.java — лучшая реализация синглтона через enum (по Joshua Bloch, Effective Java, Item 3). В комментариях объяснены преимущества: устойчивость к reflection, корректная работа с сериализацией, потокобезопасность, компактность.\n- test/java/src/SingletonTest.java — набор тестов, подтверждающих: идентичность обоих синглтонов при нормальном использовании, возможность обхода приватного конструктора через reflection, невозможность обхода enum-синглтона.\n\n## Проверка\n\nКоманды и результаты:\n- javac (javac 25.0.3) — компиляция прошла успешно, ошибок нет\n- java src.SingletonTest — все 4 теста выполнены:\n 1. Базовая работа — оба синглтона возвращают один экземпляр\n 2. Reflection-взлом private-конструктора — подтверждён (true, созданы два разных объекта)\n 3. Enum-устойчивость к reflection — подтверждена (NoSuchMethodException)\n 4. Идентичность getInstance — обе реализации возвращают один объект\n\n## Риски\n\n- Изменений в существующий код нет, risk минимальный.\n- Тесты используют reflection для демонстрации уязвимости; в production-коде это не используется.\n- Нет сборки (Maven/Gradle) — проверено прямой компиляцией javac.",
"labels": [],
"milestone": null,
"assignee": null,
"assignees": [],
"requested_reviewers": [
{
"id": 242,
"name": "",
"login": "user_42",
"type": "User",
"bio": "",
"email": "user_42@mail.org",
"avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
"html_url": "https://gitverse.ru/user_42",
"url": "https://api.gitverse.ru/users/user_42",
"followers_url": "https://api.gitverse.ru/users/user_42/followers",
"following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
"repos_url": "https://api.gitverse.ru/users/user_42/repos",
"organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
"site_admin": false,
"location": null,
"is_verified": false,
"followers": 0,
"following": 0,
"public_repos": 7,
"stars_count": 0,
"created_at": "2025-05-21T08:07:22Z",
"updated_at": "2026-09-02T06:24:23Z"
}
],
"requested_teams": [],
"state": "open",
"locked": false,
"draft": false,
"comments": 6,
"html_url": "https://gitverse.ru/user_42/neo2/pulls/5",
"diff_url": "https://gitverse.ru/user_42/neo2/pulls/5.diff",
"patch_url": "https://gitverse.ru/user_42/neo2/pulls/5.patch",
"mergeable": true,
"merged": false,
"merged_at": null,
"merge_commit_sha": null,
"merged_by": null,
"maintainer_can_modify": false,
"additions": 90,
"deletions": 0,
"changed_files": 3,
"review_comments": 1,
"base": {
"label": "master",
"ref": "master",
"sha": "756eb2fbea6a74a3119e03f71dd6025b10f15fbb",
"repo_id": 41662,
"repo": {
"id": 41662,
"name": "neo2",
"full_name": "user_42/neo2",
"owner": {
"login": "user_42",
"id": 242,
"avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
"url": "https://api.gitverse.ru/users/user_42",
"html_url": "https://gitverse.ru/user_42",
"followers_url": "https://api.gitverse.ru/users/user_42/followers",
"following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
"organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
"repos_url": "https://api.gitverse.ru/users/user_42/repos",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"private": false,
"html_url": "https://gitverse.ru/user_42/neo2",
"description": null,
"fork": false,
"forks": 0,
"forks_count": 0,
"language": null,
"stargazers_count": 0,
"watchers": 0,
"watchers_count": 0,
"size": 30,
"default_branch": "master",
"open_issues": 4,
"open_issues_count": 4,
"is_template": false,
"topics": [],
"archived": false,
"disabled": false,
"visibility": "public",
"pushed_at": "2026-08-12T16:07:39Z",
"has_issues": true,
"has_wiki": true,
"has_projects": true,
"has_pages": false,
"has_downloads": false,
"allow_forking": true,
"homepage": null,
"license": null,
"created_at": "2026-08-04T10:14:49Z",
"updated_at": "2026-09-07T13:26:02Z",
"allow_merge_commit": true,
"allow_squash_merge": true,
"allow_rebase_merge": true,
"delete_branch_on_merge": false,
"clone_url": "https://gitverse.ru/user_42/neo2.git",
"ssh_url": "git@gitverse.ru:user_42/neo2.git",
"mirror_url": null,
"url": "https://api.gitverse.ru/repos/user_42/neo2",
"contents_url": "https://api.gitverse.ru/repos/user_42/neo2/contents/{+path}",
"forks_url": "https://api.gitverse.ru/repos/user_42/neo2/forks",
"hooks_url": "https://api.gitverse.ru/repos/user_42/neo2/hooks",
"issue_comment_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/comments{/number}",
"issues_url": "https://api.gitverse.ru/repos/user_42/neo2/issues{/number}",
"languages_url": "https://api.gitverse.ru/repos/user_42/neo2/languages",
"pulls_url": "https://api.gitverse.ru/repos/user_42/neo2/pulls{/number}",
"permissions": {
"pull": true,
"push": true,
"admin": true
},
"role_name": "admin",
"template_repository": null,
"parent": null
}
},
"head": {
"label": "java-singleton",
"ref": "java-singleton",
"sha": "6c9042189bcf45b2828f7b7bb6e860476613100d",
"repo_id": 41662,
"repo": {
"id": 41662,
"name": "neo2",
"full_name": "user_42/neo2",
"owner": {
"login": "user_42",
"id": 242,
"avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
"url": "https://api.gitverse.ru/users/user_42",
"html_url": "https://gitverse.ru/user_42",
"followers_url": "https://api.gitverse.ru/users/user_42/followers",
"following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
"organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
"repos_url": "https://api.gitverse.ru/users/user_42/repos",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"private": false,
"html_url": "https://gitverse.ru/user_42/neo2",
"description": null,
"fork": false,
"forks": 0,
"forks_count": 0,
"language": null,
"stargazers_count": 0,
"watchers": 0,
"watchers_count": 0,
"size": 30,
"default_branch": "master",
"open_issues": 4,
"open_issues_count": 4,
"is_template": false,
"topics": [],
"archived": false,
"disabled": false,
"visibility": "public",
"pushed_at": "2026-08-12T16:07:39Z",
"has_issues": true,
"has_wiki": true,
"has_projects": true,
"has_pages": false,
"has_downloads": false,
"allow_forking": true,
"homepage": null,
"license": null,
"created_at": "2026-08-04T10:14:49Z",
"updated_at": "2026-09-07T13:26:02Z",
"allow_merge_commit": true,
"allow_squash_merge": true,
"allow_rebase_merge": true,
"delete_branch_on_merge": false,
"clone_url": "https://gitverse.ru/user_42/neo2.git",
"ssh_url": "git@gitverse.ru:user_42/neo2.git",
"mirror_url": null,
"url": "https://api.gitverse.ru/repos/user_42/neo2",
"contents_url": "https://api.gitverse.ru/repos/user_42/neo2/contents/{+path}",
"forks_url": "https://api.gitverse.ru/repos/user_42/neo2/forks",
"hooks_url": "https://api.gitverse.ru/repos/user_42/neo2/hooks",
"issue_comment_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/comments{/number}",
"issues_url": "https://api.gitverse.ru/repos/user_42/neo2/issues{/number}",
"languages_url": "https://api.gitverse.ru/repos/user_42/neo2/languages",
"pulls_url": "https://api.gitverse.ru/repos/user_42/neo2/pulls{/number}",
"permissions": {
"pull": true,
"push": true,
"admin": true
},
"role_name": "admin",
"template_repository": null,
"parent": null
}
},
"created_at": "2026-08-12T15:58:09Z",
"updated_at": "2026-08-20T07:38:23Z",
"closed_at": null
}
],
"branches": [
{
"name": "java-singleton",
"commit": {
"url": "https://gitverse.ru/public/api/repos/user_42/neo2/commits/6c9042189bcf45b2828f7b7bb6e860476613100d",
"sha": "6c9042189bcf45b2828f7b7bb6e860476613100d",
"html_url": "https://gitverse.ru/user_42/neo2/commit/6c9042189bcf45b2828f7b7bb6e860476613100d",
"created": "2026-08-12T16:07:34Z"
},
"protected": false,
"repository": {
"id": 41662,
"name": "neo2",
"full_name": "user_42/neo2",
"owner": {
"login": "user_42",
"id": 242,
"avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
"url": "https://api.gitverse.ru/users/user_42",
"html_url": "https://gitverse.ru/user_42",
"followers_url": "https://api.gitverse.ru/users/user_42/followers",
"following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
"organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
"repos_url": "https://api.gitverse.ru/users/user_42/repos",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"private": false,
"html_url": "https://gitverse.ru/user_42/neo2",
"description": null,
"fork": false,
"forks": 0,
"forks_count": 0,
"language": "Text",
"stargazers_count": 0,
"watchers": 0,
"watchers_count": 0,
"size": 30,
"default_branch": "master",
"open_issues": 4,
"open_issues_count": 4,
"is_template": false,
"topics": [],
"archived": false,
"disabled": false,
"visibility": "public",
"pushed_at": "2026-08-12T16:07:39Z",
"has_issues": true,
"has_wiki": true,
"has_projects": true,
"has_pages": false,
"has_downloads": false,
"allow_forking": true,
"homepage": null,
"license": null,
"created_at": "2026-08-04T10:14:49Z",
"updated_at": "2026-09-07T13:26:02Z",
"allow_merge_commit": true,
"allow_squash_merge": true,
"allow_rebase_merge": true,
"delete_branch_on_merge": false,
"clone_url": "https://gitverse.ru/user_42/neo2.git",
"ssh_url": "git@gitverse.ru:user_42/neo2.git",
"mirror_url": null,
"url": "https://api.gitverse.ru/repos/user_42/neo2",
"contents_url": "https://api.gitverse.ru/repos/user_42/neo2/contents/{+path}",
"forks_url": "https://api.gitverse.ru/repos/user_42/neo2/forks",
"hooks_url": "https://api.gitverse.ru/repos/user_42/neo2/hooks",
"issue_comment_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/comments{/number}",
"issues_url": "https://api.gitverse.ru/repos/user_42/neo2/issues{/number}",
"languages_url": "https://api.gitverse.ru/repos/user_42/neo2/languages",
"pulls_url": "https://api.gitverse.ru/repos/user_42/neo2/pulls{/number}",
"permissions": {
"pull": true,
"push": true,
"admin": true
},
"role_name": "admin",
"template_repository": null,
"parent": null
}
}
]
}
Не найденные или недоступные объекты не отменяют операцию: они перечисляются в errors.pulls или errors.branches как Not Found.
Структура ответа
Ответ — объект Development (связанная разработка). Полная структура описана в графе объектов, раздел «Объект Development».
На корневом уровне объект содержит:
| Поле | Тип | Описание |
|---|---|---|
pulls | array | Связанные запросы на слияние (см. PullRequest) |
branches | array | Связанные ветки (см. Branch) |
Коды ответа
| Код | Статус | Описание |
|---|---|---|
200 | OK | Ветки и PR привязаны к задаче. |
400 | Bad Request | Некорректные параметры запроса. |
404 | Not Found | Задача или репозиторий не найдены. |
422 | Unprocessable Entity | Ошибка валидации данных (в т.ч. вызов для pull request). |
500 | Internal Server Error | Внутренняя ошибка сервера GitVerse. |