Skip to main content

REST API를 사용하여 Git 데이터베이스와 상호 작용

REST API를 사용하여 에서 Git 데이터베이스에 원시 Git 개체를 읽고 쓰고 참조(분기 헤드 및 태그)를 나열하고 업데이트할 수 있습니다.

개요

기본적으로 데이터베이스에 직접 원시 개체를 만들고 분기 참조를 업데이트하여 Git을 설치하지 않고도 Git에서 수행할 수 있는 모든 작업을 기술적으로 수행할 수 있으므로 REST API를 통해 많은 Git 기능을 다시 구현할 수 있습니다.

REST API는 Git 리포지토리가 비어 있거나 사용할 수 없는 경우 409 Conflict를 반환합니다. 사용할 수 없는 리포지토리는 일반적으로 가 리포지토리를 만드는 중임을 의미합니다. 빈 리포지토리의 경우, PUT /repos/{owner}/{repo}/contents/{path} REST API 엔드포인트를 사용해 콘텐츠를 만들고 리포지토리를 초기화하면 해당 API를 사용해 Git 데이터베이스를 관리할 수 있습니다. 이 응답 상태가 지속되면 지원 포털 사용에 문의하세요.

Git 개체 데이터베이스에 대한 자세한 내용은 Pro Git 책의 Git Internals 챕터를 참조하세요.

예를 들어 리포지토리의 파일에 대한 변경 내용을 커밋하려는 경우 다음을 수행합니다.

  • 현재 커밋 개체 가져오기
  • 가리키는 트리 검색
  • 해당 특정 파일 경로에 대해 트리에 있는 Blob 개체의 콘텐츠 검색
  • 어떻게든 콘텐츠를 변경하고 새 콘텐츠가 포함된 새 Blob 개체를 게시하여 Blob SHA 다시 가져오기
  • 해당 파일 경로 포인터가 트리 SHA를 다시 가져오는 새 Blob SHA로 대체된 새 트리 개체 게시
  • 현재 커밋 SHA를 부모 및 새 트리 SHA로 사용하여 새 커밋 개체를 만들고 커밋 SHA 다시 가져오기
  • 새 커밋 SHA를 가리키도록 분기 참조 업데이트

복잡해 보일 수 있지만 모델을 이해하고 API로 할 수 있는 많은 작업을 열면 실제로 매우 간단합니다.

끌어오기 요청의 병합 가능성 확인

경고

이 콘텐츠는 경고 없이 오래되었으므로 Git 참조를 merge하는 업데이트를 위해 Git을 직접 사용하거나 GET /repos/{owner}/{repo}/git/refs/{ref}를 사용하지 마세요.

소비 API는 테스트 병합 커밋을 만들기 위해 끌어오기 요청을 명시적으로 요청해야 합니다.__ 테스트 병합 커밋은 UI에서 끌어오기 요청을 보고 “병합” 단추가 표시되거나 REST API를 사용하여 끌어오기 요청을 가져오거나, 만들거나, 편집할 때 만들어집니다.__ 이 요청이 없으면 다음에 누군가가 끌어오기 요청을 볼 때까지 merge Git 참조가 만료됩니다.

현재 오래된 merge Git 참조를 생성하는 폴링 메서드를 사용하는 경우 는 다음 단계를 사용하여 기본 분기에서 최신 변경 내용을 가져오는 것이 좋습니다.

  1. 끌어오기 요청 웹후크를 받습니다.
  2. 병합 커밋 후보를 만들기 위한 백그라운드 작업을 시작하려면 GET /repos/{owner}/{repo}/pulls/{pull_number}를 호출합니다.
  3. GET /repos/{owner}/{repo}/pulls/{pull_number}를 사용하여 리포지토리를 폴링하여 mergeable 특성이 true 또는 false인지 확인합니다. Git을 직접 사용하거나 이전 단계를 수행한 후에만 merge Git 참조에 대한 업데이트를 위해 GET /repos/{owner}/{repo}/git/refs/{ref}를 사용할 수 있습니다.