gitで差分ファイルを抽出してzipにまとめる方法

このエントリーをはてなブックマークに追加

Gitでファイル管理しているのに、クライアントがGit使っていないから納品ファイルを zip で送らなければならないなんてことがあったりします。

一度にまとめて送れる時は、ローカルのファイルをそのまま zip にするだけですが、なぜか「差分ファイルがどれかわかるようにください」なんていうなんとも面倒な依頼があったりします。

コマンド一発とかでいいからできないかなーと検索したところ、 Git 管理さえしていたらできる!

メモ用エントリーとしてのこしておきます。

1個前のコミットから現在のコミットまでの差分を抽出してzip

参考にしたのは下記。

gitで差分ファイルを抽出する - Qiita

1個前のコミットから現在のコミットまでの差分を抽出してzipする場合は下記のコマンドになるようです。

git archive --format=zip --prefix=archive/ HEAD `git diff --name-only HEAD HEAD~1` -o archive.zip

参考先のではdiffの最後が HEAD^ になっていたのですが、それではうまく動作せずにエラーになったので、 HEAD~1としています。この数値を変更すれば○回前のログの内容との差分として出力がかわるようになります。

HEADからの回数でたどるのではなく、ハッシュ値でもたどることができます。

--prefix=archive/ のオプションはなくてもいいのですが、あると指定したディレクトリ名の中にファイルをいれてまとめてくれます。

最後の -o archive.zip は出力先のファイル名を指定可能です。

これで差分だけほしいと言われても、時間かけずに抽出してまとめることができます。