Git Archive: .git 履歴なしでコードをエクスポートする
git archive を使って .git ディレクトリを含まないクリーンな tarball や zip を作成する方法を解説。リリース配布やコード納品に最適なコマンドです。
git archive --format=tar.gz --output=project.tar.gz HEAD詳細な説明
git archive は何をするのか?
git archive は特定のコミット、タグ、ブランチの時点でリポジトリの圧縮アーカイブ(tar、tar.gz、zip)を作成します。重要なのは、アーカイブに .git ディレクトリが含まれないため、ソースコードの配布やサーバーへのデプロイに最適です。
基本的な使い方
# 現在の HEAD の tar.gz を作成
git archive --format=tar.gz --output=project.tar.gz HEAD
# zip アーカイブを作成
git archive --format=zip --output=project.zip HEAD
# 特定のタグのアーカイブ
git archive --format=tar.gz --output=release-v1.0.tar.gz v1.0.0
サブディレクトリのアーカイブ
# src/ ディレクトリのみをアーカイブ
git archive --format=tar.gz --output=src-only.tar.gz HEAD src/
プレフィックスの追加
アーカイブの内容にトップレベルのディレクトリ名を追加できます:
git archive --format=tar.gz --prefix=my-project/ --output=release.tar.gz v1.0.0
これにより、ファイルがカレントディレクトリではなく my-project/ ディレクトリに展開されます。
リモートへのパイプ
# SSH 経由でリモートサーバーに直接展開
git archive HEAD | ssh deploy@server "tar -xf - -C /var/www/app"
.gitattributes によるエクスポート制御
.gitattributes を使ってアーカイブからファイルを除外できます:
# .gitattributes
tests/ export-ignore
.github/ export-ignore
.gitignore export-ignore
README.md export-ignore
export-ignore とマークされたファイルは git archive の出力から省かれます。
Archive と Clone の比較
git archive |
git clone |
|
|---|---|---|
| .git を含む | いいえ | はい |
| 履歴を含む | いいえ | はい |
| サイズ | 最小限 | リポジトリ全体 |
| 用途 | 配布、デプロイ | 開発 |
git archive は配布用にコードをパッケージングする最もクリーンな方法であり、内部の Git データや開発ファイルがリリースに漏れることを防ぎます。
ユースケース
Git を使わないクライアントにソースコードを納品する必要があり、タグ付けされたリリースの本番コードのみを含むクリーンな zip ファイルを git archive で作成する場面で使用します。