Gitテックラボ

git archive -Gitで管理しているファイルをアーカイブ

2016年4月10日

git archive コマンドの使い方

Gitで管理しているワーキングディレクトリには .git ディレクトリやGit関連ファイルがあり、Git管理外のファイルなども含まれる可能性があります。
git archiveコマンドは指定したコミットのツリーをアーカイブしてくれるので、リリース用のファイル一式を作成するのに便利です。

git archiveの簡単な書式例
git archive [コミットIDなど] -o [ファイル名]

[コミットIDなど]にはコミットIDやタグ名、ブランチ名などが指定可能です。
現在のブランチの最終コミットのツリーを archive.zip というファイル名でアーカイブするには次のようにします。

git archive HEAD -o archive.zip

-o オプションはアーカイブファイル名を指定します。
対応しているアーカイブの形式は tar、zip です。

コミットの差分をアーカイブする方法

git archive と git diffを組み合わせて、特定のコミット間の差分のみをアーカイブすることもできます。

git archive [コミット1] `git diff --name-only [コミット2] [コミット3]` -o [ファイル名]

上記では、[コミット1] で抽出元のコミットを指定し、抽出したい差分を git diff で指定しています。
git diff に指定した --name-only はファイルのパスを返すので、これで差分のファイルパスを git archive に渡すことができます。
[コミット2]、[コミット3]には差分を取りたいコミット名を指定します。

例えば、HEADから2つ前のコミットの差分フィアルだけをアーカイブするには、次のようにします。

git archive HEAD `git diff --name-only HEAD HEAD~2` -o archive.zip

エラーの原因となるファイルを除外する

ファイル名に空白などがありうまくアーカイブできない場合、更に sed コマンドをパイプでつないでファイルを除外します。
下記では空白のあるファイルを除外しています。

git archive HEAD `git diff --name-only HEAD HEAD~2| sed '/ /d'` -o archive.zip

Git管理下にあるファイルを除外する

.gitignoreなどのGit関連ファイルもGit管理下にあれば、特に指定しないかぎりアーカイブファイルに含まれます。
.gitattributes というファイルを作成し、そこに下記のような設定をすることで特定のファイルを archive に含まれないようにすることができます。

.gitignore を除外する
.gitignore export-ignore

.gitattributes で指定した設定を活かすには --worktree-attributes オプションを指定します。

git archive HEAD --worktree-attributes -o archive.zip

アーカイブ後の中身を確認する

期待通りのアーカイブができているか、アーカイブファイルの中身を確認するには zipinfo コマンドが便利です。

zipinfo [アーカイブファイル名]

archive.zip に含まれるファイル一覧を出力するには下記のようにします。

zipinfo archive.zip

tar 形式のファイルの場合は下記のようにします。

tar tvf archive.tar

Comment

コメントを残す

メールアドレスが公開されることはありません。

関連記事

リズムファクトリーはホームページの制作会社です。
ホームページ制作に関するご要望・ご相談はこちらからどうぞ。

株式会社リズムファクトリーでは現在、下記の職種について人材募集を行っております。
求人をクリックすると「求人情報サイトFind Job!」の求人詳細画面が開きますので、こちらからご応募下さい。

提供 : Webな人の求人情報サイト Find Job!