SYNOPSIS
git remote-<transport> <repository> [<URL>]
DESCRIPTION
リモートヘルパープログラムは通常、エンドユーザーが直接使用することはありませんが、Gitがネイティブでサポートしていないリモートリポジトリと対話する必要がある場合にGitによって呼び出されます。 特定のヘルパーは、ここに記載されている機能のサブセットを実装します。 Gitがリモートヘルパーを使用してリポジトリと対話する必要がある場合、Gitは独立したプロセスとしてヘルパーを生成し、ヘルパーの標準入力にコマンドを送信し、ヘルパーの標準出力からの結果を期待します。 リモートヘルパーはGitから独立したプロセスとして実行されるため、新しいヘルパーを追加するためにGitを再リンクする必要も、ヘルパーをGitの実装にリンクする必要もありません。
すべてのヘルパーは capabilities
(機能)コマンドをサポートする必要があります。これは、ヘルパーが受け入れる他のコマンドをGitが決定するために使用します。これらの他のコマンドを使用して、リモート参照の検出と更新や、オブジェクトデータベースとリモートリポジトリ間のオブジェクトの転送や、ローカルオブジェクトストアの更新を行うことができます。
Gitには、 git-remote-http
や、 git-remote-https
や、 git-remote-ftp
や、 git-remote-ftps
などのさまざまな転送(transport)プロトコルを処理する "curl" ファミリーのリモートヘルパーが付属しています。これらは、機能(capabilities)として、 fetch
と option
と push
を実装します。
INVOCATION
リモートヘルパープログラムは、1つまたは(オプションで)2つの引数を使用して呼び出されます。最初の引数は、Gitのようにリモートリポジトリを指定します。それは設定されたリモートの名前またはURLのいずれかです。2番目の引数はURLを指定します。 通常は <transport>://<address>
の形式ですが、任意の文字列を使用できます。 GIT_DIR
環境変数はリモートヘルパー用に設定されており、追加データを保存する場所や、補助Gitコマンドを呼び出すディレクトリを決定するために使用できます。
Gitが <transport>://<address>
の形式のURLを検出すると、ここで、 <transport>
はネイティブに処理できないプロトコルで、2番目の引数として完全なURLを使用して git remote-<transport>
を自動的に呼び出します。そのようなURLがコマンドラインで直接検出された場合は最初の引数は2番目の引数と同じであり、構成されたリモートで検出された場合最初の引数はそのリモートの名前です。
<transport>::<address>
の形式のURLは、2番目の引数として <address>
を使用して git remote-<transport>
を呼び出すようにGitに明示的に指示します。このようなURLがコマンドラインで直接検出された場合最初の引数は <address>
であり、構成されたリモートで検出された場合最初の引数はそのリモートの名前です。
さらに、構成されたリモートで remote.<name>.vcs
が <transport>
に設定されている場合、Gitは最初の引数として <name>
を使用して git remote-<transport>
を明示的に呼び出します。 remote.<name>.url
が設定されている場合は、2番目の引数は remote.<name>.url
です。 remote.<name>.url
が設定されてない場合、2番目の引数は省略されます。
INPUT FORMAT
Gitは、リモートヘルパーの標準入力にコマンドのリストを1行に1つずつ送信します。 最初のコマンドは常に capabilities
(機能)コマンドであり、これに応答して、リモートヘルパーはサポートする機能のリスト(以下を参照)とそれに続く空白行を出力する必要があります。機能コマンドへの応答により、Gitがコマンドストリームの残りの部分で使用するコマンドが決まります。
コマンドストリームは空白行で終了します。場合によっては(関連するコマンドのドキュメントに示されています)、この空白行の後に他のプロトコル(packプロトコルなど)のペイロードが続きますが、他の場合は入力の終了を示します。
Capabilities
各リモートヘルパーは、コマンド群のサブセットのみをサポートすることが期待されています。ヘルパーがサポートする操作は、 capabilities
コマンドへの応答でGitに宣言されます(以下のCOMMANDSを参照)。
以下に、定義されているすべての機能をリストし、それぞれについて、その機能を持つヘルパーが提供しなければならないコマンドをリストします。
Capabilities for Pushing
- connect
-
gitのネイティブpackfileプロトコルを使用した通信のために、
git receive-pack
(プッシュ用)、git upload-pack
などへの接続を試みることができます。これには、双方向の全二重接続が必要です。サポートされているコマンド:
connect
- stateless-connect
-
実験的:内部使用のみ。 gitのワイヤープロトコル バージョン2を使用して、通信のためにリモートサーバーへの接続を試みることができます。詳細については、 stateless-connect コマンドのドキュメントを参照してください。
サポートされているコマンド:
stateless-connect
. - push
-
リモートrefを発見する事ができ、そして、ローカルコミットとそれらに至るまでの履歴を、新規または既存のリモートrefにプッシュする事ができます。
サポートされているコマンド:
list for-push
,push
. - export
-
リモートrefを発見し、指定のオブジェクトを高速インポートストリームからリモートrefにプッシュできます。
サポートされているコマンド:
list for-push
,export
.
ヘルパーが connect
を広告(advertise)する場合、Gitは可能であればそれを使用し、接続時にヘルパーが要求すると別の機能にフォールバックします(「COMMANDS」セクションの connect
コマンド参照)。 push
と export
のどちらかを選択する場合、Gitは push
を優先します。他のフロントエンドには、他の優先順位がある場合があります。
- no-private-update
-
refspec
機能を使用する場合、gitは通常、プッシュが成功するとプライベートrefを更新します。リモートヘルパーが機能no-private-update
を宣言すると、この更新は無効になります。
Capabilities for Fetching
- connect
-
Gitのネイティブpackfileプロトコルを使用した通信のために、
git upload-pack
(フェッチ用)、git receive-pack
などへの接続を試みることができます。これには、双方向の全二重接続が必要です。サポートされているコマンド:
connect
- stateless-connect
-
実験的:内部使用のみ。 gitのワイヤープロトコル バージョン2を使用して、通信のためにリモートサーバーへの接続を試みることができます。詳細については、 stateless-connect コマンドのドキュメントを参照してください。
サポートされているコマンド:
stateless-connect
. - fetch
-
リモートrefを発見し、それらから到達可能なオブジェクトをローカルオブジェクトストアに転送できます。
サポートされているコマンド:
list
,fetch
. - import
-
リモートrefを発見し、それらから到達可能なオブジェクトを高速インポート形式(fast-import format)のストリームとして出力できます。
サポートされているコマンド:
list
,import
. - check-connectivity
-
クローンを要求(request)されたときに、受信したパックが、自己完結しており、そして、接続されていることを保証できます。
- get
-
get
コマンドを使用して、 特定の URI からファイルをダウンロードできます。
ヘルパーが connect
を広告(advertise)する場合、Gitは可能であればそれを使用し、接続時にヘルパーが要求すると別の機能にフォールバックします(「COMMANDS」セクションの connect
コマンド参照)。 fetch
と import
のどちらかを選択する場合、Gitは fetch
を優先します。他のフロントエンドには、他の優先順位がある場合があります。
Miscellaneous capabilities
- option
-
他のコマンドの実行方法に影響を与える
verbosity
(stderrに書き込む出力量)や、depth
(浅いクローン(shallow clone)の場合に必要な履歴量)などの設定を指定します。 - refspec <refspec>
-
import
またはexport
を実装するリモートヘルパーの場合、この機能により、refs/heads
またはrefs/remotes
に直接書き込む代わりに、refsをプライベート名前空間に制約できます。import
機能を提供するすべてのインポーターがこれを使用することをお勧めします。export
では必須です。機能
refspec refs/heads/*:refs/svn/origin/branches/*
を広告(advertise)するヘルパーは、import refs/heads/topic
と問われた時に出力されるストリームは 、refs/svn/origin/branches/topic
ref を更新します。この機能は複数回広告できます。最初に適用可能なrefspecが優先されます。この機能でアドバタイズされるrefspecの(
:
の)左側は、listコマンドによって報告されるすべてのrefをカバーする必要があります。refspec
機能が広告されていない場合は暗黙のrefspec *:*
が設定されています。分散型バージョン管理システム用のリモートヘルパーを作成する場合は、リポジトリのローカルコピーを保持して対話することをお勧めします。プライベート名前空間refsがこのローカルリポジトリを指すようにし、refs/remotes 名前空間はリモートリポジトリを追跡するために使用されます。
- bidi-import
-
これにより、
import
機能が変更されます。fast-importコマンドのcat-blob
とls
をリモートヘルパーが使用して、fast-importのメモリにすでに存在するブロブとツリーに関する情報を取得できます。これには、fast-importからリモートヘルパーへのチャネルが必要です。import
に加えて広告される場合、Gitはfast-importからリモートヘルパーのstdinへのパイプを確立します。 したがって、Gitとfast-importは両方ともリモートヘルパーのstdinに接続されています。Gitは複数のコマンドをリモートヘルパーに送信できるため、データをfast-importに送信する前に、bidi-import
を使用するヘルパーがバッチのすべてのimport
コマンドをバッファリングする必要があります。 これは、ヘルパーのstdinでコマンドと、fast-import高速インポート応答が混在するのを防ぐためです。 - export-marks <file>
-
これにより、
export
機能が変更され、完了時に内部マークテーブル(internal marks table)を<file>にダンプするようにGitに指示します。詳細については git-fast-export(1) の--export-marks=<file>
を参照してください。 - import-marks <file>
-
これにより、
export
機能が変更され、入力を処理する前に<file>で指定したマークをロードするようにGitに指示します。詳細については git-fast-export(1) の--import-marks=<file>
を参照してください。 - signed-tags
-
これにより、
export
機能が変更され、--signed-tags=verbatim
を linkgit:git-fast-export[1]に渡すようにGitに指示します。この機能がない場合、Gitは--signed-tags=warn-strip
を使用します。 - object-format
-
これは、ヘルパーが明示的なハッシュアルゴリズム拡張(explicit hash algorithm extension)を使用してリモート側と対話できることを示しています。
COMMANDS
コマンドは、ヘルパーの標準入力に、呼び出し元によって1行に1つずつ与えられます。
- capabilities
-
ヘルパーの機能を1行に1つずつリスト出力し、空白行で終わります。各機能の前に
*
を付けることができます。これは、リモートヘルパーを使うGitのバージョンで理解することが必須であることを示します。不明な必須機能は致命的なエラーです。このコマンドのサポートは必須です。
- list
-
refを1行に1つずつ、
<value> <name> [<attr> ...]
の形式で一覧出力します。 値は、16進のsha1ハッシュ または、symrefの場合は@<dest>
または、キーと値のペアの場合は:<keyword> <value>
または、 `?` の場合はヘルパーがrefの値を取得できなかったことを示します。 nameの後には、スペースで区切られたattributes(属性)のリストが続きます。認識されない属性は無視されます。リストは空白行で終わります。現在定義されている属性のリストについては、「REF LIST ATTRIBUTES」を参照してください。現在定義されているキーワードのリストについては、「REF LIST KEYWORDS」を参照してください。
ヘルパーに「fetch」または「import」機能がある場合にサポートされます。
- list for-push
-
list
と似ていますが、呼び出し元が結果のrefリストでプッシュコマンドを準備したい場合にのみ使用される点が異なります。プッシュとフェッチの両方をサポートするヘルパーは、これを使用して、list
の出力が使用される操作を区別し、実行する必要のある作業の量を減らすことができます。ヘルパーに "push" または "export" 機能がある場合にサポートされます。
- option <name> <value>
-
転送(transport)ヘルパーオプション <name> を <value> に設定します。出力は、
ok
(オプションが正常に設定された)または、unsupported
(オプションが認識されない)または、error <msg>
(オプション<name>はサポートされていますが、<value>は無効です)のいずれかを含む単一行です。オプションは他のコマンドの前に設定する必要があり、それらのコマンドの動作に影響を与える可能性があります。現在定義されているオプションのリストについては、OPTIONSを参照してください。
ヘルパーに "option" 機能がある場合にサポートされます。
- fetch <sha1> <name>
-
指定されたオブジェクトをフェッチし、必要なオブジェクトをデータベースに書き込みます。fetchコマンドは、1行に1つずつバッチで送信され、空白行で終了します。 同じバッチ内のすべてのfetchコマンドが完了すると、1行の空白行を出力します。この方法でフェッチできるのは、sha1を使用した
list
の出力で報告されたオブジェクトのみです。オプションで、refが適切に更新されるまでパックを保持している
$GIT_DIR/objects/pack
の下のファイルのフルパスを示すlock<file>
行を出力できます。パスは.keep
で終わる必要があります。これは、keepコンポーネントのみを指定して、 <pack,idx,keep> タプルに名前を付けるメカニズムです。保持されたパックは、フェッチが完了するまでそのオブジェクトが参照されない場合でも、並列再パック(concurrent repack)によって削除されません。.keep
ファイルはフェッチの終了時に削除されます。オプション
check-connectivity
が要求された場合、クローンが自己完結型(self-contained)で接続されていれば、ヘルパーはconnectivity-ok
を出力する必要があります。ヘルパーに "fetch" 機能がある場合にサポートされます。
- push +<src>:<dst>
-
指定された ローカル <src> コミットまたはブランチを、 <dst>で記述されたリモートブランチにプッシュします。 1つ以上の
push
コマンドのバッチシーケンスは空白行で終了します(pushへの参照が1つしかない場合は、単一のpush
コマンドの後に空白行が続きます)。たとえば、以下はpush
の2つのバッチであり、最初のはリモートヘルパーに、ローカル参照master
をリモート参照master
にプッシュし、ローカルHEAD
をリモートbranch
にプッシュするように要求します。2番目のは reffoo
を refbar
にプッシュするように要求します(+
によって要求された強制更新です)。push refs/heads/master:refs/heads/master push HEAD:refs/heads/branch \n push +refs/heads/foo:refs/heads/bar \n
最後の
push
コマンドの後、バッチの終了空白行の前に、0個以上のプロトコルオプションを入力できます。プッシュが完了すると、1つ以上の
ok <dst>
またはerror <dst> <why>?
行を出力して、プッシュされた各参照の成功または失敗を示します。ステータスレポートの出力は空白行で終了します。オプションフィールド <why> は、LFが含まれている場合、Cスタイルの文字列でクォートされる場合があります。ヘルパーに "push" 機能がある場合にサポートされます。
- import <name>
-
名前付きrefの現在の値をインポートするfast-importストリームを生成します。履歴を効率的に構築するために、必要に応じて他の参照を追加でインポートする場合があります。スクリプトは、ヘルパー固有のプライベート名前空間に書き込みます。名前付きrefの値は、「refspec」機能からのrefspecをrefの名前に適用することによって派生した、この名前空間内の場所に書き込む必要があります。
他のバージョン管理システムとの相互運用性に特に役立ちます。
push
と同様に、1つ以上のimport
のバッチシーケンスは空白行で終了します。import
の各バッチごとに、リモートヘルパーはdone
コマンドで終了する fast-import ストリームを生成する必要があります。bidi-import
機能を使用する場合は、ヘルパーのstdinでの、コマンドとfast-import応答の混合を防ぐために、fast-importへのデータの送信を開始する前にバッチシーケンスを完全にバッファリングする必要があることに注意してください。ヘルパーに "import" 機能がある場合にサポートされます。
- export
-
後続の入力は、リモートにプッシュする必要のあるオブジェクトを含むfast-importストリーム(
git fast-export
によって生成される)の一部であることをリモートヘルパーに指示します。他のバージョン管理システムとの相互運用性に特に役立ちます。
export-marks
とimport-marks
機能は、指定されている場合、git fast-export` に渡される限り、このコマンドに影響します。 `git fast-export
は、ローカルオブジェクトのマークのテーブルを ロード/保存 します。 これは、増分操作の実装に使用できます。ヘルパーに "export" 機能がある場合にサポートされます。
- connect <service>
-
指定のサービスに接続します。ヘルパーの標準入力と標準出力は、リモート側で指定指定のサービスに接続されます(gitプレフィックスはサービス名に含まれているので、例えばフェッチはサービスとして
git-upload-pack
を使用します)。このコマンドに対する有効な応答は、空行(接続が確立されました)と、fallback
(スマート転送サポートなし、バカ転送(dumb transports)にフォールバック)と、エラーメッセージが印刷された状態で終了するだけです(接続できません、フォールバックしようと気にしないで)。肯定(空)応答が改行で終了すると、サービスの出力が開始されます。接続が終了すると、リモートヘルパーは終了します。ヘルパーに "connect" 機能がある場合にサポートされます。
- stateless-connect <service>
-
実験的: 内部使用のみ。 gitのワイヤープロトコルバージョン2を使用して通信するために、指定のリモートサービスに接続します。このコマンドへの有効な応答は、空行(接続が確立されました)と、
fall back
(スマート転送サポートなし、バカ転送にフォールバック)と、エラーメッセージ出力するだけです(接続できません。わざわざフォールバックしようとしないでください)。 正の(空の)応答を終了する改行の後、サービスの出力が開始されます。 メッセージ(要求と応答の両方)は、0個以上のPKT-LINEで構成され、フラッシュパケットで終了する必要があります。 応答メッセージには、応答の終了を示すフラッシュパケットの後に応答終了パケットがあります。 クライアントは、サーバーが要求と応答のペアの間に状態を保持することを期待してはなりません。接続が終了すると、リモートヘルパーが終了します。ヘルパーに "stateless-connect" 機能がある場合にサポートされます。
- get <uri> <path>
-
指定の
<uri>
から指定の<path>
へファイルをダウンロードします。<path>.temp
が存在する場合、Git は.temp
ファイルが以前の試みからの部分的なダウンロードであると想定し、 その位置からダウンロードを再開します。
致命的なエラーが発生した場合、プログラムはエラーメッセージをstderrに書き込み、終了します。呼び出し元は、子が現在のコマンドに対する有効な応答を完了せずに接続を閉じた場合に、適切なエラーメッセージを出力することを期待します。
ヘルパーによって報告された機能から判断できるように、追加のコマンドがサポートされる場合があります。
REF LIST ATTRIBUTES
list
コマンドは、各refの後に属性(attribute)のリストが続くことがあるrefのリストを生成します。以下のrefリスト属性(ref list attributes)が定義されています。
- unchanged
-
このrefは、最後にインポートまたはフェッチしたときから変更されていませんが、ヘルパーは必ずしもどの値が生成されたかを判別することはできるわけではありません。
REF LIST KEYWORDS
listコマンドは、キーと値のペア(key-value pairs)のリストを生成する場合があります。以下のキーが定義されています。
- object-format
-
refは指定のハッシュアルゴリズムを使用しています。このキーワードは、サーバーとクライアントの両方がオブジェクト形式の拡張機能(object-format extension)をサポートしている場合にのみ使用されます。
OPTIONS
以下のオプションは、リモートヘルパーに option 機能がある場合にGitによって定義され、(適切な状況下で)設定されます。
- option verbosity <n>
-
ヘルパーによって表示されるメッセージの詳細度を変更します。 <n>の値0は、プロセスが静かに動作し、ヘルパーがエラー出力のみを生成することを意味します。 1は冗長性のデフォルトレベルであり、<n>の値が大きさは、コマンドラインで渡される
-v
フラグの数に対応します。 -
option progress {
true
|false
} -
コマンド実行中に転送(transport)ヘルパーによって表示される進行状況メッセージを有効(または無効)にします。
- option depth <depth>
-
浅いリポジトリ(shallow repository)の履歴を深めます。
- option deepen-since <timestamp>
-
時間に基づいて浅いリポジトリ(shallow repository)の履歴を深めます。
- option deepen-not <ref>
-
refを除く浅いリポジトリ(shallow repository)の履歴を深めます。複数回使用できます。
-
option deepen-relative {
true
|false
} -
現在の境界に比べて浅いリポジトリの履歴を深めます。 「option depth」で使用する場合にのみ有効です。
-
option followtags {
true
|false
} -
有効にすると、フェッチコマンド中にタグが指すオブジェクトが転送された場合、ヘルパーは注釈付きのタグオブジェクトを自動的にフェッチする必要があります。 タグがヘルパーによってフェッチされない場合、通常、2番目のフェッチコマンドが送信され、タグを具体的に要求します。一部のヘルパーは、このオプションを使用して2番目のネットワーク接続を回避できる場合があります。
-
option dry-run {
true
|false
} -
trueの場合、操作が正常に完了したふりをしますが、実際にはリポジトリデータを変更しません。 ほとんどのヘルパーの場合、これはサポートされている場合、
push
にのみ適用されます。 - option servpath <c-style-quoted-path>
-
次の接続のサービスパス(
--upload-pack
、--receive-pack
など)を設定します。 リモートヘルパーはこのオプションをサポートする場合がありますが、接続要求が発生する前に、設定されているこのオプションに依存してはなりません。 -
option check-connectivity {
true
|false
} -
ヘルパーにクローンの接続を確認(check)するように依頼(request)します。
-
option force {
true
|false
} -
ヘルパーに強制更新を実行するように依頼(request)します。デフォルトは
false
です。 -
option cloning {
true
|false
} -
これがクローンリクエストであることをヘルパーに通知します(つまり、現在のリポジトリは空であることが保証されています)。
-
option update-shallow {
true
|false
} -
新しいrefで必要な場合は、 .git/shallow を拡張できるようにします。
-
option pushcert {
true
|false
} -
GPG署名プッシュ。
- option push-option <string>
-
<string>をプッシュオプションとして送信します。プッシュオプションにはLFまたはNUL文字を含めることはできないため、文字列はエンコードされません。
-
option from-promisor {
true
|false
} -
これらのオブジェクトがpromisorからフェッチされていることを示します。
-
option no-dependents {
true
|false
} -
依存関係ではなく、必要なオブジェクトのみをフェッチする必要があることを示します。
-
option atomic {
true
|false
} -
プッシュするときは、リモートサーバーに単一のアトミックトランザクションで参照を更新するように要求します。 成功すると、すべての参照が更新されるか、何も更新されません。 リモート側がこの機能をサポートしていない場合、プッシュは失敗します。
-
option object-format {
true
|algorithm} -
true
の場合、呼び出し元がハッシュアルゴリズム情報をリモートから返されることを望んでいることを示します。 このモードは、refをフェッチするときに使用されます。algorithm に設定されている場合は、発信者がそのアルゴリズムを使用してリモート側と対話することを希望していることを示します。
GIT
Part of the git(1) suite