Git
日本語 ▾ トピック ▾ 最新バージョン ▾ git-archive は2.46.0で最後に更新されました

名前

git-archive - 指定されたツリーからファイルのアーカイブを作成する

概要

git archive [--format=<fmt>] [--list] [--prefix=<prefix>/] [<extra>]
	      [-o <file> | --output=<file>] [--worktree-attributes]
	      [--remote=<repo> [--exec=<git-upload-archive>]] <tree-ish>
	      [<path>…​]

説明

指定された形式のアーカイブを作成し、指定されたツリーのツリー構造を含めて標準出力に書き出します。<prefix> が指定されている場合、アーカイブ内のファイル名の前に付加されます。

git archive は、コミットIDまたはタグIDとは対照的に、ツリーIDが指定された場合、動作が異なります。ツリーIDが指定されている場合、アーカイブ内の各ファイルの更新時刻として現在時刻が使用されます。一方、コミットIDまたはタグIDが指定されている場合、参照されるコミットオブジェクトに記録されているコミット時刻が代わりに使用されます。さらに、tar 形式が使用されている場合、コミット ID はグローバル拡張 pax ヘッダーに格納されます。 git get-tar-commit-id を使用して抽出できます。ZIP ファイルでは、ファイルコメントとして格納されます。

オプション

--format=<fmt>

結果のアーカイブの形式。可能な値は、tarziptar.gztgz、および設定オプション tar.<format>.command を使用して定義された形式です。--format が指定されておらず、出力ファイルが指定されている場合、可能な場合はファイル名から形式が推測されます (例: foo.zip に書き込むと、出力は zip 形式になります)。そうでない場合、出力形式は tar です。

-l
--list

使用可能なすべての形式を表示します。

-v
--verbose

進捗を stderr に報告します。

--prefix=<prefix>/

アーカイブ内のパスの前に <prefix>/ を付加します。繰り返すことができます。一番右の値が、すべての追跡対象ファイルに使用されます。 --add-file でどの値が使用されるかは、以下を参照してください。

-o <file>
--output=<file>

アーカイブを stdout の代わりに <file> に書き込みます。

--add-file=<file>

追跡されていないファイルをアーカイブに追加します。複数のファイルを追加するために繰り返すことができます。アーカイブ内のファイルのパスは、この --add-file の前にある最後の --prefix オプションの値 (存在する場合) と <file> のベース名を連結することによって構築されます。

--add-virtual-file=<path>:<content>

指定された内容をアーカイブに追加します。複数のファイルを追加するために繰り返すことができます。

<path> 引数は、リテラルの二重引用符で開始および終了できます。含まれるファイル名は C スタイルの文字列として解釈されます。つまり、バックスラッシュはエスケープ文字として解釈されます。パスにコロンが含まれている場合、コロンがパスと内容の区切り文字として誤って解釈されないように、またはパスが二重引用符で開始または終了する場合、パスを引用符で囲む必要があります。

ファイルモードは通常のファイルに制限されており、オプションはプラットフォームに依存するコマンドラインの制限の対象となる場合があります。簡単なケースではない場合は、追跡されていないファイルを書き込み、代わりに --add-file を使用してください。

--add-file とは異なり、アーカイブに作成されるパスは --prefix オプションの影響を受けないことに注意してください。オプションの値として完全な <path> を指定できるためです。

--worktree-attributes

作業ツリーの .gitattributes ファイルでも属性を探します (属性 を参照)。

--mtime=<time>

アーカイブエントリの更新時刻を設定します。このオプションがない場合、<tree-ish> がコミットまたはタグの場合はコミッター時刻が使用され、ツリーの場合は現在時刻が使用されます。

<extra>

これは、アーカイバーバックエンドが理解できる任意のオプションです。次のセクションを参照してください。

--remote=<repo>

ローカルリポジトリから tar アーカイブを作成する代わりに、リモートリポジトリから tar アーカイブを取得します。リモートリポジトリは、<tree-ish> で許可される sha1 式に制限を設ける場合があることに注意してください。詳細については、git-upload-archive[1] を参照してください。

--exec=<git-upload-archive>

リモート側で git-upload-archive へのパスを指定するために --remote と共に使用されます。

<tree-ish>

アーカイブを作成するツリーまたはコミット。

<path>

オプションのパス パラメーターがない場合、現在の作業ディレクトリのすべてのファイルとサブディレクトリがアーカイブに含まれます。1 つ以上のパスが指定されている場合、これらのみが含まれます。

バックエンドの追加オプション

zip

-<digit>

圧縮レベルを指定します。値が大きいほど、コマンドはより多くの時間を費やして小さいサイズに圧縮できます。サポートされている値は -0 (ストアのみ) から -9 (最良の比率) です。指定しない場合、デフォルトは -6 です。

tar

-<number>

圧縮レベルを指定します。値は、tar.<format>.command で設定された圧縮コマンドに渡されます。サポートされているレベルのリストと、このオプションが指定されていない場合のデフォルトレベルについては、設定されたコマンドのマニュアルページを参照してください。

設定

tar.umask

この変数を使用して、tar アーカイブ エントリのパーミッション ビットを制限できます。デフォルトは 0002 で、ワールド書き込みビットをオフにします。特別な値 "user" は、アーカイブ ユーザーの umask が代わりに使用されることを示します。詳細については、umask(2) を参照してください。 --remote が使用されている場合、リモート リポジトリの設定のみが有効になります。

tar.<format>.command

この変数は、git archive によって生成された tar 出力をパイプするシェルコマンドを指定します。コマンドは、生成された tar ファイルを標準入力としてシェルを使用して実行され、最終出力を標準出力に生成する必要があります。圧縮レベルのオプションはすべてコマンドに渡されます (例: -9)。

tar.gz および tgz 形式は自動的に定義され、デフォルトでマジックコマンド git archive gzip を使用します。これは gzip の内部実装を呼び出します。

tar.<format>.remote

true の場合、git-upload-archive[1] を介したリモートクライアントによる使用のためにフォーマットを有効にします。ユーザー定義の形式の場合はデフォルトで false ですが、tar.gz および tgz 形式の場合は true です。

属性

export-ignore

属性 export-ignore が設定されているファイルとディレクトリは、アーカイブファイルに追加されません。詳細については、gitattributes[5] を参照してください。

export-subst

ファイルに属性 export-subst が設定されている場合、Git はこのファイルをアーカイブに追加するときにいくつかのプレースホルダーを展開します。詳細については、gitattributes[5] を参照してください。

属性は、デフォルトでアーカイブされているツリーの .gitattributes ファイルから取得されることに注意してください。事後に出力の生成方法を調整する場合 (たとえば、.gitattributes に適切な export-ignore を追加せずにコミットした場合)、チェックアウトされた .gitattributes ファイルを必要に応じて調整し、--worktree-attributes オプションを使用します。または、任意のツリーをアーカイブするときに適用する必要がある属性を $GIT_DIR/info/attributes ファイルに保持することもできます。

git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)

現在のブランチの最新のコミットの内容を含む tar アーカイブを作成し、/var/tmp/junk ディレクトリに抽出します。

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

v1.4.0 リリースの圧縮 tarball を作成します。

git archive --format=tar.gz --prefix=git-1.4.0/ v1.4.0 >git-1.4.0.tar.gz

上記と同じですが、組み込みの tar.gz 処理を使用します。

git archive --prefix=git-1.4.0/ -o git-1.4.0.tar.gz v1.4.0

上記と同じですが、フォーマットは出力ファイルの拡張子から推測されます。

git archive --format=tar --prefix=git-1.4.0/ v1.4.0^{tree} | gzip >git-1.4.0.tar.gz

v1.4.0 リリースの圧縮 tarball を作成しますが、グローバル拡張 pax ヘッダーは含めません。

git archive --format=zip --prefix=git-docs/ HEAD:Documentation/ > git-1.4.0-docs.zip

現在の HEAD の Documentation/ ディレクトリの内容をすべて、プレフィックス *git-docs/* を付けて *git-1.4.0-docs.zip* に格納します。

git archive -o latest.zip HEAD

現在のブランチの最新のコミットの内容を含む Zip アーカイブを作成します。出力フォーマットは出力ファイルの拡張子から推測されることに注意してください。

git archive -o latest.tar --prefix=build/ --add-file=configure --prefix= HEAD

プレフィックスなしで現在のブランチの最新のコミットの内容と、プレフィックス *build/* を付けた追跡されていないファイル *configure* を含む tar アーカイブを作成します。(※原文に誤りがある可能性があります。`--prefix=`が2回指定されています)

git config tar.tar.xz.command "xz -c"

LZMA 圧縮 tar ファイルを作成するための "tar.xz" フォーマットを設定します。 --format=tar.xz を指定するか、`-o foo.tar.xz` のような出力ファイルを作成することで使用できます。

関連項目

GIT

git[1] スイートの一部

scroll-to-top