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

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2020-11-12. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

Git Database APIを使ってみる

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

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

概要

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

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

Gitデータベースの概要

Gitオブジェクトデータベースについての詳細は、Pro GitブックのGitの内側の章を参照してください。

例として、リポジトリのファイルに変更をコミットしたい場合は、次のようにします。

  • 現在のコミットオブジェクトを取得する
  • ポイントするツリーを取得する
  • 特定のファイルパスに対してツリーが持つblobオブジェクトのコンテンツを取得する
  • 何らかの方法でコンテンツを変更し、新しいコンテンツで新しいblobオブジェクトをPOSTし、blob SHAを再取得する
  • ファイルパスポインタが新しいblob SHAに置き換えられたツリーオブジェクトをPOSTし、ツリーSHAを再取得する
  • 現在のコミットSHAを親とする新しいコミットオブジェクトと、新しいツリーSHAを作成し、コミットSHAを再取得する
  • ブランチのリファレンスを、新しいコミットSHAを指すように更新する

複雑に見えるかもしれませんが、実際にはモデルを理解していれば非常に単純で、理解することによりAPIでできることが広がるでしょう。

プルリクエストのマージ可能性を確認

Warning! Please do not depend on using Git directly or GET /repos/{owner}/{repo}/git/refs/{ref} for updates to merge Git refs, because this content becomes outdated without warning.

testマージコミットを作成するには、使用するAPIは、明示的にプルリクエストを要求する必要があります。 testマージコミットは、UIでプルリクエストを表示して [Merge] ボタンが表示されるか、REST APIを使ってプルリクエストを取得作成、または編集した際に作成されます。 このリクエストがなければ、merge Git refは次に誰かがプルリクエストを表示するまで期限切れになります。

If you are currently using polling methods that produce outdated merge Git refs, then GitHub recommends using the following steps to get the latest changes from the default branch:

  1. プルリクエストwebhookを受け取ります。
  2. GET /repos/{owner}/{repo}/pulls/{pull_number}を呼び出し、マージコミット候補を作成するためのバックグラウンドジョブを開始します。
  3. mergeable属性がtruefalseかを判断するため、GET /repos/{owner}/{repo}/pulls/{pull_number}を使用してリポジトリをポーリングします。 You can use Git directly or GET /repos/{owner}/{repo}/git/refs/{ref} for updates to merge Git refs only after performing the previous steps.