git archiveで差分をtar.gzで固める

納品時やgitリポジトリにアクセスできない他社に差分ファイルを渡す際の方法です。

$ git archive --format=tar.gz --prefix=proj/ HEAD `git diff --diff-filter=d --name-only HEAD^ HEAD` -o proj-`date +%Y%m%d`.tar.gz
  • –format: tar.gzで固める
  • –prefix: 固めたgzipのファイル名のパスの前にprefixをつける。例えば上の例は次のようになります。
$ tar -xvzf proj-20190324.tar.gz
x proj/
x proj/archived
x proj/archived/file.txt

差分ファイル名のリストの出し方については次の通り。

  • –diff-filter: 削除した差分のみを抽出
  • –name-only: 今回はファイルのリストのみが欲しい
  • HEAD^ HEAD: ひとつ前のコミットとの差分を取る。