Git
日本語 ▾ トピック ▾ 最新バージョン ▾ git-send-pack 最終更新 2.43.0

名前

git-send-pack - Gitプロトコルを介してオブジェクトを別のリポジトリにプッシュする

書式

git send-pack [--mirror] [--dry-run] [--force]
		[--receive-pack=<git-receive-pack>]
		[--verbose] [--thin] [--atomic]
		[--[no-]signed | --signed=(true|false|if-asked)]
		[<host>:]<directory> (--all | <ref>…​)

説明

通常は、このコマンドの上位ラッパーである *git push* を代わりに使用することをお勧めします。git-push[1] を参照してください。

リモートの可能性があるリポジトリで *git-receive-pack* を呼び出し、名前付きrefを送信して、現在のリポジトリから更新します。

オプション

--receive-pack=<git-receive-pack>

リモート側にある *git-receive-pack* プログラムへのパス。ssh経由でリモートリポジトリにプッシュする場合に役立ちますが、デフォルトの$ PATHのディレクトリにプログラムがない場合があります。

--exec=<git-receive-pack>

--receive-pack=<git-receive-pack> と同じです。

--all

更新するrefを明示的に指定する代わりに、ローカルに存在するすべてのヘッドを更新します。

--stdin

標準入力からrefのリストを取得します。1行に1つです。このオプションに加えてコマンドラインでrefが指定されている場合、標準入力からのrefはコマンドラインのrefの後に処理されます。

--stateless-rpc がこのオプションと一緒に指定されている場合、refのリストはパケット形式(pkt-line)である必要があります。各refは別々のパケットに含まれている必要があり、リストはフラッシュパケットで終わる必要があります。

--dry-run

実際に更新を送信する以外のすべてを実行します。

--force

通常、コマンドは、上書きに使用されたローカルrefの先祖ではないリモートrefの更新を拒否します。このフラグはこのチェックを無効にします。これは、リモートリポジトリがコミットを失う可能性があることを意味します。注意して使用してください。

--verbose

詳細に出力しながら実行します。

--thin

ネットワークトラフィックを削減するために、パックに含まれていないオブジェクトに基づいてデルタ形式でオブジェクトを記録する「シン」パックを送信します。

--atomic

refの更新にアトミックトランザクションを使用します。いずれかのrefの更新に失敗した場合、refを変更せずにプッシュ全体が失敗します。

--[no-]signed
--signed=(true|false|if-asked)

受信側でrefを更新するためのプッシュリクエストにGPG署名し、フックによってチェックしたり、ログに記録したりできるようにします。 false または --no-signed の場合、署名は試行されません。 true または --signed の場合、サーバーが署名付きプッシュをサポートしていないとプッシュは失敗します。 if-asked に設定されている場合、サーバーが署名付きプッシュをサポートしている場合にのみ署名します。 gpg --sign の実際の呼び出しが失敗した場合にも、プッシュは失敗します。受信側の詳細については、git-receive-pack[1] を参照してください。

--push-option=<string>

指定された文字列をプッシュオプションとして渡して、サーバー側のフックで使用します。サーバーがプッシュオプションをサポートしていない場合は、エラーが発生します。詳細については、git-push[1] および githooks[5] を参照してください。

<host>

リポジトリをホストするリモートホスト。この部分が指定されている場合、*git-receive-pack* はssh経由で呼び出されます。

<directory>

更新するリポジトリ。

<ref>…​

更新するリモートref。

REFの指定

リモート側で更新するrefを指定するには、3つの方法があります。

--all フラグを使用すると、ローカルに存在するすべてのrefがリモート側に転送されます。このフラグを使用する場合、* <ref> *を指定することはできません。

--all も * <ref> *もない場合、ローカル側とリモート側の両方に存在するヘッドが更新されます。

1つ以上の * <ref> *が明示的に指定されている場合(コマンドラインまたは --stdin のいずれか)、単一のパターン、またはコロン ":" で区切られたそのようなパターンのペアのいずれかになります(これは、ref名にコロンを含めることができないことを意味します)。単一のパターン * <name> *は、* <name>: <name> *の省略形です。

各パターンペアは、送信元側(コロンの前)と送信先側(コロンの後)で構成されます。プッシュされるrefは、送信元側と一致する一致を見つけることによって決定され、プッシュされる場所は送信先側を使用して決定されます。 refの照合に使用されるルールは、* git rev-parse *がシンボリックref名を解決するために使用するルールと同じです。git-rev-parse[1] を参照してください。

  • <src> がローカルrefの1つと正確に一致しない場合はエラーです。

  • <dst> が複数のリモートrefと一致する場合はエラーです。

  • <dst> がリモートrefと一致しない場合は、次のいずれかになります。

    • "refs /"で始まる必要があります。この場合、<dst> はそのまま宛先として使用されます。

    • <src> == <dst> かつ <src> と一致するrefがリモートrefのセットに存在しない必要があります。ローカルで <src> と一致したrefは、宛先の名前に使用されます。

--force がない場合、<dst> が存在しない場合、または <dst> が <src> の適切なサブセット(つまり、祖先)である場合にのみ、<src> refはリモートに保存されます。「早送りチェック」として知られるこのチェックは、リモートrefを誤って上書きして他のユーザーのコミットを失うことを避けるために行われます。

--force を使用すると、すべてのrefの早送りチェックが無効になります。

オプションで、<ref> パラメーターの前にプラス * + *記号を付けて、そのrefでのみ早送りチェックを無効にすることができます。

GIT

git[1] スイートの一部

scroll-to-top