Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away