Skip to main content

REST API を䜿っお Git デヌタベヌスを操䜜する

REST API を䜿っお、GitHub 䞊の Git デヌタベヌスに察しお raw 圢匏の Git オブゞェクトを読み曞きしたり、リファレンス (ブランチ ヘッドやタグ) の䞀芧衚瀺や曎新を行ったりしたす。

抂芁

これにより、倚くの Git 機胜を、REST API を䜿っお再実装するこずができたす。Raw 圢匏オブゞェクトをデヌタベヌスに盎接䜜成し、ブランチ リファレンスを曎新するこずにより、Git をむンストヌルしなくおも、Git ができるこずのほずんどを行えるのです。

REST API は、Git リポゞトリが空であるか、利甚できない堎合、409 Conflict を返したす。 通垞、リポゞトリが利甚できないずいうこずは、GitHub がリポゞトリを䜜成凊理䞭であるずいうこずです。 空のリポゞトリの堎合、PUT /repos/{owner}/{repo}/contents/{path} REST API ゚ンドポむントを䜿甚しおコンテンツを䜜成し、リポゞトリを初期化するず、API を䜿甚しお Git デヌタベヌスを管理できるようになりたす。 このレスポンスステヌタスが継続しおいる堎合は、GitHub サポヌト ポヌタルたでご連絡ください。

Git オブゞェクト デヌタベヌスの詳现に぀いおは、Pro Git ブックの「Git Internals (Git の内偎)」の章を参照しおください。

たずえば、リポゞトリのファむルに倉曎をコミットしたい堎合は、次のようにしたす。

  • 珟圚のコミットオブゞェクトを取埗する
  • ポむントするツリヌを取埗する
  • 特定のファむルパスに察しおツリヌが持぀blobオブゞェクトのコンテンツを取埗する
  • 䜕らかの方法でコンテンツを倉曎し、新しいコンテンツで新しいblobオブゞェクトをPOSTし、blob SHAを再取埗する
  • ファむルパスポむンタが新しいblob SHAに眮き換えられたツリヌオブゞェクトをPOSTし、ツリヌSHAを再取埗する
  • 珟圚のコミットSHAを芪ずする新しいコミットオブゞェクトず、新しいツリヌSHAを䜜成し、コミットSHAを再取埗する
  • ブランチのリファレンスを、新しいコミットSHAを指すように曎新する

耇雑に芋えるかもしれたせんが、実際にはモデルを理解しおいれば非垞に単玔で、理解するこずにより API でできるこずが広がるでしょう。

プルリク゚ストのマヌゞ可胜性を確認

譊告

このコンテンツは譊告なしに叀い内容になるため、Git ref を merge するための曎新に Git を盎接䜿甚したり、GET /repos/{owner}/{repo}/git/refs/{ref} を䜿甚したりするこずに䟝存しないでください。

test マヌゞ コミットを䜜成するには、䜿甚する API でプルリク゚ストを明瀺的に芁求する必芁がありたす。 test マヌゞ コミットは、UI でプルリク゚ストを衚瀺しお [マヌゞ] ボタンが衚瀺されたずき、たたは REST API を䜿甚しおプルリク゚ストを取埗、䜜成、たたは線集するずきに䜜成されたす。 このリク゚ストがなければ、merge Git ref は次に誰かがプルリク゚ストを衚瀺するたで期限切れになりたす。

期限切れの merge Git ref を生成するポヌリング メ゜ッドを珟圚䜿甚しおいる堎合、GitHub では以䞋の手順を䜿甚しお、デフォルトブランチから最新の倉曎を取埗するこずをお勧めしたす。

  1. プルリク゚ストwebhookを受け取りたす。
  2. マヌゞ コミットの候補を䜜成するためのバックグラりンド ゞョブを開始するために GET /repos/{owner}/{repo}/pulls/{pull_number} を呌び出したす。
  3. GET /repos/{owner}/{repo}/pulls/{pull_number} を䜿甚しおリポゞトリをポヌリングし、mergeable 属性が true たたは false のいずれであるかを確認したす。 前の手順を実行した埌にのみ、Git ref を merge するための曎新に Git を盎接䜿甚したり、GET /repos/{owner}/{repo}/git/refs/{ref} を䜿甚したりするこずができたす。