Git リポジトリの内容を zip ファイルにする

  • 60
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

git clone したフォルダを単純に zip すると、.git フォルダが含まれてしまったり、普段は .gitignore などで無視しているファイルが含まれてしまったりします。

Git リポジトリの内容だけを取り出して zip ファイルにするには、git archive コマンドが便利です。

参考:GitHub だと、Git のタグをつけておくことで、git archive で生成したファイルと同様の zip ファイルが Release ページからダウンロードできます。

基本的な使い方

Git リポジトリの内容を zip ファイルにするには次のようにします。HEAD の部分は、タグ名、ブランチ名、コミットID、などが指定できます。

git archive HEAD --output=hoge.zip

中身を特定のフォルダ以下に入れたい場合は、次のように --prefix オプションを使います。このとき、フォルダ名の後ろに必ず / をつける必要があります。

git archive HEAD --prefix=hogedir/ --output=hoge.zip

(補足 : --prefix オプションは、本来は各ファイルパスにプレフィックス文字列を追加するオプションです。この文字列にフォルダ区切り文字を入れることで、特定のフォルダを指定しているのと同じ効果となります)

一部のフォルダだけを取り出す

Git リポジトリの hogedir フォルダだけを zip ファイルにするには次のようにします。

なお、特定のフォルダ以下に入れたい場合は上述の --prefix オプションが使えます。

パターン1

git archive HEAD:hogedir --output=hoge.zip

この場合、hogedir フォルダそのものは zip には含まれません。hogedir フォルダの中身が zip に含まれます。

パターン2

git archive HEAD hogedir --output=hoge.zip

この場合、hogedir フォルダ自体も zip に含まれます。

注意点

git archive で生成した zip ファイルを展開すると、各ファイルに実行属性がついてしまっていることが分かります。これは残念ながら git archive の仕様のようです。

ファイルの属性をきちんと保ちたい場合は、アーカイブを tar ファイルで作成するのが良さそうです。

git archive HEAD --output=hoge.tar.gz
git archive HEAD --output=hoge.tar.bz2