{"meta":{"title":"Использование REST API для взаимодействия с базой данных Git","intro":"Используйте REST API для чтения и записи необработанных объектов Git в базу данных Git на GitHub и для перечисления и обновления ссылок (головки и теги ветвей).","product":"REST API","breadcrumbs":[{"href":"/ru/enterprise-cloud@latest/rest","title":"REST API"},{"href":"/ru/enterprise-cloud@latest/rest/guides","title":"Guides"},{"href":"/ru/enterprise-cloud@latest/rest/guides/using-the-rest-api-to-interact-with-your-git-database","title":"Начало работы с базой данных Git"}],"documentType":"article"},"body":"# Использование REST API для взаимодействия с базой данных Git\n\nИспользуйте REST API для чтения и записи необработанных объектов Git в базу данных Git на GitHub и для перечисления и обновления ссылок (головки и теги ветвей).\n\n## Обзор\n\nВ основном это позволяет повторно использовать множество функциональных возможностей Git с помощью REST API, создавая необработанные объекты непосредственно в базу данных и обновляя ссылки на ветви, вы можете технически сделать практически все, что Git может сделать без установки Git.\n\nREST API возвращает `409 Conflict` значение, если репозиторий Git пуст или недоступен. Недоступный репозиторий обычно означает, что GitHub находится в процессе создания репозитория. Для пустого репозитория можно использовать [`PUT /repos/{owner}/{repo}/contents/{path}`](/ru/enterprise-cloud@latest/rest/repos/contents#create-or-update-file-contents) конечную точку REST API для создания содержимого и инициализации репозитория, чтобы использовать API для управления базой данных Git. Если этот статус ответа сохраняется, вам поможет мы через портал .\n\nДополнительные сведения о базе данных объектов Git см. в главе [Основы Git](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain) книги \"Pro Git\".\n\nНапример, если вы хотите зафиксировать изменение файла в репозитории, выполните следующие действия:\n\n* Получите текущий объект фиксации.\n* Извлеките дерево, на которое он указывает.\n* Извлеките содержимое BLOB-объекта этого дерева для конкретного пути к файлу.\n* Измените содержимое и опубликуйте новый BLOB-объект с новым содержимым, получив SHA BLOB-объекта.\n* Опубликуйте новый объект дерева, заменив указатель пути к файлу на SHA BLOB-объекта, чтобы получить SHA дерева.\n* Создайте объект фиксации с текущим SHA фиксации в качестве родительского и SHA нового дерева, получив SHA фиксации.\n* Обновите ссылку на ветвь, чтобы указать на новый SHA фиксации.\n\nЭто может показаться сложной процедурой, но на самом деле все довольно просто, если вы понимаете принцип. Использование API дает вам много возможностей.\n\n## Проверка возможности слияния запросов на вытягивание\n\n> \\[!WARNING]\n> Не зависят от использования Git напрямую или [`GET /repos/{owner}/{repo}/git/refs/{ref}`](/ru/enterprise-cloud@latest/rest/git/refs#get-a-reference) для обновлений `merge` ссылок Git, так как это содержимое становится устаревшим без предупреждения.\n\nПотребляющий API должен явно запросить запрос на вытягивание для создания *тестовой* фиксации слияния.\n*Тестовая* фиксация слияния создается при просмотре запроса на вытягивание в пользовательском интерфейсе и отображении кнопки \"Слияние\" или при [получении](/ru/enterprise-cloud@latest/rest/pulls/pulls#get-a-pull-request), [создании](/ru/enterprise-cloud@latest/rest/pulls/pulls#create-a-pull-request) или [изменении](/ru/enterprise-cloud@latest/rest/pulls#update-a-pull-request) запроса на вытягивание с помощью REST API. Без этого запроса ссылки Git `merge` будут устаревать до того, как кто-то просмотрит запрос на вытягивание.\n\nЕсли вы сейчас используете методы опроса, которые дают устаревшие `merge` Git-ссылки, то GitHub рекомендует использовать следующие шаги для получения последних изменений из стандартной ветки:\n\n1. Получите веб-перехватчик запроса на вытягивание.\n2. Вызовите [`GET /repos/{owner}/{repo}/pulls/{pull_number}`](/ru/enterprise-cloud@latest/rest/pulls/pulls#get-a-pull-request), чтобы запустить фоновое задание для создания кандидата на фиксацию слияния.\n3. Опросите репозиторий, используя [`GET /repos/{owner}/{repo}/pulls/{pull_number}`](/ru/enterprise-cloud@latest/rest/pulls/pulls#get-a-pull-request), чтобы узнать, является ли атрибут `mergeable``true` или `false`. Вы можете использовать Git напрямую или [`GET /repos/{owner}/{repo}/git/refs/{ref}`](/ru/enterprise-cloud@latest/rest/git/refs#get-a-reference) для обновления только ссылок Git `merge` после выполнения предыдущих шагов."}