Toconangoのブログ

プログラミングのユルフワ備忘録です。間違った記載等ありましたらご連絡頂けますと幸いです。

git あるコミットからHEADまでの差分を、削除ファイルを除外してアーカイブする

git archive を使う

※[commit]はコミットのハッシュ

[commit] ~ HEAD までの差分をアーカイブするコマンド

$ git archive --format=zip --prefix=archive/ HEAD `git diff --name-only [commit] HEAD` -o archive.zip
fatal: pathspec 'hoge.html' did not match any files

オプションの意味

git diff --name-only <commit> HEADというコマンドの出力には、削除済みファイルhoge.htmlも含まれる。

そのため、アーカイブしようとすると、そんなファイル無いと怒られる。

そこで、git diff にある --diff-filter というオプションを使って、削除ファイル名を除外する。

$ git archive --format=zip --prefix=archive/ HEAD `git diff --name-only --diff-filter=ACMRTUXB [commit] HEAD` -o archive.zip

これで、削除ファイル以外の差分ファイルがアーカイブできる。

参考

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

git diff のとき変更したファイルだけを確認する - Qiita