🧊

gitで追跡中のファイルのみをzipファイルにまとめる

2024/02/12に公開

Chrome拡張機能を自作した際に、プロジェクトをzipファイルでアップロードする必要があったため、必要な(gitignoreされていない)ファイルだけを圧縮するスクリプトを書きました。

以下のスクリプトに実行権限をつけてPATHの通ったディレクトリに保存すれば、git zipが使えるようになります。

git-zip
#!/bin/bash

tag="$(git describe --tags 2>/dev/null)"
if [ -n "$tag" ]; then
  tag="-${tag}"
fi
name="${1:-$(basename $(git root))$tag}"
git archive -o "${name}".zip HEAD

git zipは以下のように動作します。

  • 引数がある場合
    • その名前のアーカイブをつくる
      • git zip my-archivemy-archive.zipができる
  • 引数がない場合
    • gitディレクトリの名前をつけたアーカイブを作る
      • my-repoディレクトリでgit zipmy-repo.zipができる
    • タグがあれば最新のタグを名前の末尾につける
      • my-repoディレクトリでタグv1.2.0がある状態でgit zipmy-repo-v1.2.0.zipができる

なお、内部で使用しているgit rootはビルトインのサブコマンドではなく、自分で定義したエイリアスです。

~/.config/git/config
[alias]
  root = !pwd

こちらのgistを参考にしました:

https://gist.github.com/LeonardoCardoso/6c083b90a8c327d8c82f

Discussion