🧊
gitで追跡中のファイルのみをzipファイルにまとめる
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-archive
→my-archive.zip
ができる
-
- その名前のアーカイブをつくる
- 引数がない場合
- gitディレクトリの名前をつけたアーカイブを作る
- my-repoディレクトリで
git zip
→my-repo.zip
ができる
- my-repoディレクトリで
- タグがあれば最新のタグを名前の末尾につける
- my-repoディレクトリでタグ
v1.2.0
がある状態でgit zip
→my-repo-v1.2.0.zip
ができる
- my-repoディレクトリでタグ
- gitディレクトリの名前をつけたアーカイブを作る
なお、内部で使用しているgit root
はビルトインのサブコマンドではなく、自分で定義したエイリアスです。
~/.config/git/config
[alias]
root = !pwd
こちらのgistを参考にしました:
Discussion