日本語 ▾ トピック ▾ 最新バージョン ▾ 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>…​]

説明

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

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

進行状況を標準エラー出力に報告します。

--prefix=<prefix>/

アーカイブ内のパスの前に <prefix>/ を付加します。複数回指定可能で、一番右の値がすべての追跡ファイルに使用されます。--add-file でどの値が使用されるかは以下を参照してください。

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

アーカイブを標準出力ではなく <file> に書き込みます。

--add-file=<file>

追跡されていないファイルをアーカイブに追加します。複数回指定して複数のファイルを追加できます。アーカイブ内のファイルのパスは、この --add-file の前の最後の --prefix オプションの値(もしあれば)と <file> のベース名を連結して構築されます。

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

指定されたコンテンツをアーカイブに追加します。複数回指定して複数のファイルを追加できます。

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

ファイルモードは通常ファイルに限定されており、このオプションはプラットフォーム固有のコマンドラインの制限を受ける可能性があります。複雑なケースでは、追跡されていないファイルを作成し、代わりに --add-file を使用してください。

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

--worktree-attributes

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

--mtime=<time>

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

<extra>

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

--remote=<repo>

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

--exec=<git-upload-archive>

--remote と併用して、リモート側の git-upload-archive へのパスを指定します。

<tree-ish>

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

<path>

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

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

zip

-<digit>

圧縮レベルを指定します。値が大きいほど、コマンドはより多くの時間をかけて圧縮し、サイズを小さくします。サポートされる値は -0 (store-only) から -9 (best ratio) までです。指定しない場合、デフォルトは -6 です。

tar

-<number>

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

設定

tar.umask

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

tar.<format>.command

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

tar.gztgz 形式は自動的に定義され、デフォルトでマジックコマンド 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 ファイルから取得されます。出力の生成方法を後で調整したい場合(例:適切なexport-ignoreを .gitattributes に追加せずにコミットした場合)、チェックアウトされた .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 リリースの圧縮tarボールを作成します。

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 リリースの圧縮tarボールを作成しますが、グローバルな拡張paxヘッダーは含みません。

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

現在のHEADのDocumentation/ディレクトリ内のすべてを git-1.4.0-docs.zip に入れ、接頭辞 git-docs/ を付けます。

git archive -o latest.zip HEAD

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

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

現在のブランチの最新コミットの内容を接頭辞なしで含み、追跡されていないファイル configure を接頭辞 build/ で含むtarアーカイブを作成します。

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