しゃかまる

2014.12.05

Gitのマージ済みブランチ検出ツールを作った (Advent Calendar 5日目)

こんにちは、しゃかまるです。
MH4Gでは しゃか。 という名前でやっています。「。」は必要です。
最近、社内では口が悪いヤツのような不当な扱いを受けていますが、そんなことはありませんよ。

さて、今回はGoでツールを作ってみた記事を書こうと思います。

merged_branch

Gitのマージ済みなブランチを表示するツールです。
ソースはこちらにあります。
この書き方おかしいだろ、などあれば是非ともご指摘ください。

何が問題なの?

多分この記事を読もうと思う人はGitを使ってるだろう、ということで進めていきます。
Gitで運用していると、既にマージしたブランチがリモートに溜まったまま消されずに残る、ということが起こりがちじゃないかな、と思います。ありますよね?
運用フローにもよりますが、hotfix系のブランチとか、他の人に「このブランチをマージしてあとよろしく」としたブランチなんかがよく残っている印象です。

いらないブランチがリモートに溜まっていると、一覧を出した時に不要な情報が増えて作業の邪魔です。
作業者に、作ったら消す、マージしたら消すという認識があれば良いのですが、「え、わざわざ消さないといけないものだったんですか?」という認識だと困りますよね。
そこで、終わったブランチは消すという意識付けのためにも、「おう作業終わったらちゃんと消せや」と言えるツールがあれば良いな、と思った次第です。

何をするツールなの?

簡単に書くと

で検出したマージ済みの各ブランチに対して、

を叩いて、最終コミッターの名前、メールアドレスをリストアップします。

現状、このツールで行うのはここまでです。

git-showはデフォルトでページャを起動したり、いらない情報が多いので

というオプションで実行しています。

Usage

検査したいgitプロジェクト内にmerged_branchを置いて実行するだけです。
カレントブランチにマージされてるブランチ一覧が取得できます。

私が担当しているプロジェクトのdevelopブランチで実行したところ、以下のような出力が得られました。

$ ./merged_branch

develop
Murakami.Shunsuke (hoge@example.com)

remotes/origin/hogehoge
foo (foo@example.com)

remotes/origin/feature/fugafuga
bar (bar@example.com)

remotes/origin/feature/piyopiyo
bar (bar@example.com)

remotes/origin/feature/foobar
fuga (fuga@example.com)

名前とアドレスは隠していますが

branch-name
name (mail-address)

という形式で出力しています。
マージ済みのfeatureが残っていますね。これは良くない。
(私が作ったブランチも残っていましたがしれっと消しました)

おそらくうちで最も巨大なプロジェクトに対して流したところ、100近くのリモートブランチが残っていたので
cronにでも組み込んでみてもらったら面白いんじゃないかと思います。こんな感じかな。

想定される質問

なんでGoなの?

趣味です。
Goである必要は一切ないし、この程度だとシェルのワンライナーで書けるんじゃないかな、と思っています。

なんかネチネチしたツールだね

てへぺろ(・ω<)

まとめ

リモートブランチは消そうね!
盛大なブーメランにならないように気をつけたいと思います。

明日はmassa142 の番です。