ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

Git Database APIを使ってみる

Git Database APIでは、GitHub Enterprise上のGitデータベースに対してRaw形式のGitオブジェクトを読み書きしたり、リファレンス (ブランチheadやタグ) をリストおよび更新したりすることができます。

ここには以下の内容があります:

Did this doc help you?

概要

これにより、さまざまなGitの機能を、APIを介して再実装することができます。Raw形式オブジェクトのオブジェクトをデータベースに直接作成し、ブランチリファレンスを更新することにより、Gitをインストールしなくても、Gitができることのほとんどを行えるのです。

Git Database API関数は、Gitリポジトリが空または利用できない場合、409 Conflictを返します。 リポジトリが利用できないということは、通常、GitHub Enterpriseがリポジトリを作成処理中であるということです。 空のリポジトリの場合は、「ファイルコンテンツの作成または更新」エンドポイントを使用してコンテンツを作成し、リポジトリを初期化してGit Database APIを使用できるようにすることができます。 このレスポンスステータスが継続している場合は、GitHub Enterprise サイト管理者までご連絡ください。

Gitデータベースの概要

Gitオブジェクトデータベースについての詳細は、Pro Gitブックの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でプルリクエストを表示して [Merge] ボタンが表示されるか、REST APIを使ってプルリクエストを取得作成、または編集した際に作成されます。 このリクエストがなければ、merge Git refは次に誰かがプルリクエストを表示するまで期限切れになります。

期限切れのmerge Git refを生成するポーリングメソッドを現在使用している場合、GitHubでは以下のステップに従い、ベースブランチ (通常はmaster) から最新の変更を取得することをお勧めします。

  1. プルリクエストwebhookを受け取ります。
  2. GET /repos/{owner}/{repo}/pulls/{pull_number}を呼び出し、マージコミット候補を作成するためのバックグラウンドジョブを開始します。
  3. mergeable属性がtruefalseかを判断するため、GET /repos/{owner}/{repo}/pulls/{pull_number}を使用してリポジトリをポーリングします。 上記のステップを実行後にのみ、Git refsを更新してmergeするため、GitディレクトリやGET /repos/{owner}/{repo}/git/refs/{ref}を使用することができます。

Did this doc help you?