必要になったのでそういうものを作りました。
https://github.com/kyanny/git-prune-remote-branch
パスの通ったところに置いて Git のワーキングディレクトリで実行すると master と develop にすでにマージ済みのリモートブランチを全部削除します。 --noop で dry-run モードになるので実際に消す前に確認もできます。なんで master だけじゃなく develop も?というと、僕のチームで gitflow を使っているからです。
$ git clone git://github.com/kyanny/git-prune-remote-branch.git $ git-prune-remote-branch --noop $ git-prune-remote-branch
git push --mirror
じゃダメなの?という意見もあったのですが、マージ済みのものだけ消すのがポイントで、やりたいことがちょっと違うので安全寄りなのをあえて作ってみました。
そもそも Git は分散バージョン管理システムなのだから云々、という意見もあると思いますが、ペパボでは全社的に GitHub の導入を進めていて、僕が関わっている Sqale と 30days Album はいずれもリポジトリを GitHub に置き、機能追加やバグ修正は原則として Pull Request の形で提出してレビューを経るプロセスになっているので、自然とリモートブランチが増えていきます。なのでたまに掃除したくなるわけです。
GitHub で Pull Request ベースのチーム開発をしている場合は二ヶ月に一回くらい役に立つと思うので、ぜひご利用ください。
なお、このスクリプトはリモートブランチを消すだけでローカルの追跡ブランチに対しては何もしませんが、リモートブランチがすでに消えている追跡ブランチは git remote prune
でまとめて消すことができるので、ローカルのゴミ掃除にはこちらをどうぞ。