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