git pullした時に削除済みのリモートブランチとマージ済みのローカルブランチを自動削除する

GitHub Flowのように細かく機能別にブランチを分けてpull requestを作っていく形式だとブランチのゴミが鬱陶しくて仕方が無くなります.

Gitにはgit fetch --pruneというオプションがあり,これでリモートブランチは削除を検知して消してくれます.しかしローカルブランチはそのままです.

なんでそのままなのかわからないのですが,とりあえず削除するのがいい加減面倒になってきたので,シェルスクリプトを書くことにしました.

これ自体はGit でマージ済みのブランチを一括削除する - Qiitaを参照にして簡単に出来ました.

git branch --merged masterとすることでmasterを基準にして,masterに一々チェックアウトしないで済むようにして,現在のブランチも削除から弾くようにしています.

しかしシェルスクリプトを一々実行するのは面倒くさいですね.私は普段Git操作はIt's Magit! A Git Porcelain inside Emacsを使っていて,一々コンソールに戻ってGit操作したくはないので尚更です.

hookを使って自動実行するようにしましょう.

~/Documents/hook/post-merge

と記述します.

git config --global core.hooksPath ~/Documents/hookと設定します.

さらにgit config --global pull.prune trueと設定します.

これでgit pullしてmergeが走ったとき,自動でリモートブランチの削除を検知して,ローカルブランチも削除してくれます.

これまで

  • git fetch -pして削除されたリモートブランチを削除
  • git pullしてmasterにコミットをmerge
  • git branch -dでmergeされたブランチを削除

を手動で行っていたのがgit pullを行えば良いだけになってくれました.

しかし,肝心のMagitを使ったgit pullでpruneが動きません.Magitはgit configの設定を見ないようですね.Magitで使ってもhookが動いてローカルブランチを削除してくれるようになっただけマシなのですが…どなたかMagitでgit pull時にpruneする設定をご存知ないでしょうか.Magitにpull requestを送るしかない?

このエントリーをはてなブックマークに追加 fb-like g-plusone チェック pocket