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