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 で作成する場面で使用します。

Try It — Git Command Builder

フルツールを開く