git archiveコマンドについて
git archiveコマンドは指定したコミットのツリーをアーカイブファイルとして生成するコマンドです。ソースコードをリリースしたい時などに便利です。
例えば
$ git archive HEAD --format=tar.gz > hoge.tar.gz
とすれば、現在のブランチの最終コミットのツリーをhoge.tar.gzにしてくれます。
また、出力ファイル名指定する-oオプションを指定してやれば、拡張子から判断してtar.gzフォーマットにしてくれます。
$ git archive HEAD -o hoge.tar.gz
デフォルトではtar、tar.gz、zipにしか対応していない
git archiveコマンドは標準では圧縮フォーマットとして、tar、tar.gz、zipにしか対応していません。
$ git archive HEAD --format=tar.bz2 > hoge.tar.bz2
※ hoge.tar.bz2はただのtarファイルになる
としてみても、非対応のフォーマットが指定されたため、デフォルトの圧縮フォーマットのtarで固めただけのアーカイブになってしまいます。
tar.bz2 や tar.xz でアーカイブを作る
それではtar.bz2やtar.xzの圧縮フォーマットでtarballを作りたい場合はどうするかというと、gzipされていないただのtarフォーマットで生成し、それぞれの圧縮コマンドにパイプで渡してやればとりあえず目的は達成できます。
$ git archive HEAD --format=tar | bzip2 > hoge.tar.bz2
$ git archive HEAD --format=tar | xz > hoge.tar.xz
--formatオプションにtar.bz2やtar.xzを対応させる
上述のやりかたでtar.bz2やtar.xzを生成できますが、若干面倒くさいです。--formatオプションでこれらのフォーマットを直接指定できるようになれば便利です。
これはgitの設定で可能です。設定項目は、tar.[拡張子].commandで、これに圧縮プログラムを指定することで拡張子が--formatオプションに対応します。
例えば以下のようにしてグローバルの設定ファイル~/.gitconfigに設定を追加してやると、
$ git config --global tar.tar.bz2.command bzip2
--formatオプションでtar.bz2が指定可能になります。出力ファイル名指定の拡張子にも対応します。
$ git archive HEAD --format=tar.bz2 > hoge.tar.bz2
$ git archive HEAD -o hoge.tar.bz2