Gitの小ネタおれおれAdvent Calendar 2022 – 16 日目
git archive
ってのがあって、指定のブランチの内容を ZIP とかの書式で出してくれます。
Zip 出力
こんな感じ。
$ git archive --format=zip HEAD > ~/tmp/a.zip
出力先が標準出力(CLI の画面)である点に注意。> xxx.zip
を付けてファイルに保存するようにします。
--format
zip
の他に tar
も受け付けます。
HEAD
出力したいブランチとかタグとかコミット ID とかです。色々受け付けてくれるみたい。
> xxx.zip
--output=xxx.zip
というオプションもあるんだけどリダイレクトの方を普段使ってます。なんかよくエラーになっちゃうので……。あんまり調べてないけど特に不自由ないからいいやって。
ホームディレクトリーとか指定できないのかな。
$ git archive --format=zip --output="~/a.zip" HEAD
fatal: could not create archive file '~/a.zip': No such file or directory
一部ファイルを除外
--worktree-attributes
オプションを与えると、プロジェクトディレクトリーにある .gitattributes
という設定ファイルを見るようになります。そこでプロジェクトディレクトリーに用意するとこのファイルは出力しないぞみたいな指定ができます。
.gitattributes
.gitattributes
は設定ファイルで、プロジェクトディレクトリーに置きます。git archive
以外でも使えます。
内容は行ごとに書きます。先頭がファイルパスのパターンで、以下任意数の設定を続けます。
.env
とか .env.local
とか系のファイルを含めたくない場合の例。export-ignore
が git archive
で出さないぞ設定です。
.env* export-ignore
(基本的にはそもそもリポジトリーに入れておかない方が良いと思う。)
除外して圧縮ファイル作成
出力時に --worktree-attributes
をお忘れなく。
$ git archive --format=zip --worktree-attributes HEAD > ~/tmp/a.zip
おしまい
.gitignore
で無視されてるファイルは含まれないみたいです。逆に含める設定もあるのかな、みつからなかったけど。
自分は別名設定して git zip
で出てくるようにしてます。今はもうないけど完成品を ZIP で納品しろって場面で使ってました。