前回の続きっぽい記事です。
手当たり次第ブランチを切りまくっていると、問題になってくるのが不要ブランチの処分。
実験用のお砂場として弄り回した果てに存在すら忘れていたのがチラホラ...
以前も似たような事をやりましたが、あのバージョンだと日付以降の設定ができなかったり...とやや使い勝手が悪いです。
今回はgit標準のコマンドfor-each-refとUNIXツールを上手く活用して日付指定つきのブランチ削除に挑戦します。
実例:remotes/originにある2014年6月1日以前のブランチを消す(主要なものは除外)
git for-each-ref --sort=-committerdate refs/remotes/origin --format='%(authordate:short) %(refname)' > .tmpdata.txt
として一時データをおきます。
2014-07-02 refs/remotes/origin/f/bdd_cases 2014-05-10 refs/remotes/origin/f/a 2014-04-27 refs/remotes/origin/f/b 2014-04-19 refs/remotes/origin/f/c 2014-04-19 refs/remotes/origin/fix/a ... 2014-03-27 refs/remotes/origin/master
これを、awkを使ってコマンド化します。
awk '$1 < "2014-06-01" && $2 !~ /master/ {print $2}' .tmpdata.txt | sed -e "s/^refs\/remotes\/origin\//git push \:/" > cmd.bash
間違って重要ブランチを吹っ飛ばさないよう、awkの条件式で点検。
複雑化を嫌う場合にはコマンド化のあとにsedで除去するのも手かもしれません。
ともかく、終われば
$ cat cmd.bash git push origin :f/a git push origin :f/b git push origin :f/c git push origin :fix/a ...
というものができるので...
しめやかに実行。サヨナラ!
$ source cmd.bash To git@bitbucket.org:hogehoge/sample.git - [deleted] f/a To git@bitbucket.org:hogehoge/sample.git - [deleted] f/b ...