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
オプションの意味
--format=zip
zipでアーカイブする--prefix=archive/
解凍時にarchiveというフォルダの下に展開するHEAD
アーカイブするコミットgit diff --name-only [commit] HEAD
アーカイブするファイルを指定-o archive.zip
アーカイブファイル名前を指定
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
これで、削除ファイル以外の差分ファイルがアーカイブできる。