Redmine用Gitフックスクリプトをちょっとだけ汎用的に

TiDD(チケット駆動開発)するにあたって、id:bleis-tiftが非常に便利なフックスクリプトを作ってくれている。
詳しくは Git+Redmineな人におすすめのフックスクリプト集 - みずぴー日記 が分りやすい。


ただ、トピックブランチ名のルール (id/*) や、追加されるメッセージの形式 (refs #*) が決まってて少し使いづらいところもある。


かといって、こんな環境固有の設定をハードコーディングするのもアレだし、設定ファイルにしたところでやっぱりそれをリポジトリに含めるのは微妙だよなぁ…、というわけで、設定ファイルがなければ git-config を使えばいいじゃない、という発想でちょっと改良してみた。
ついでにインストール用スクリプト (git-hooks)*1 も作ったのでインストールが手軽になるはず。


改良点
  • トピックブランチ名、追加メッセージの形式を任意に設定可
  • インストール用スクリプト完備(?) *2
  • ついでに bash-completion 付き
使い方
  1. git-hooks をダウンロードし、パスの通っているフォルダに置く。(他のgitスクリプトがあるフォルダがおそらくベター)
  2. フックスクリプトをインストールしたいリポジトリの中で下記コマンドを実行する。 (要 curl)
$ git hooks install https://github.com/murank/Git-Hooks/raw/master

curl の「SSL certificate problem」がでる場合、「http.sslVerify」 を 「false」 にする (git config --global http.sslVerify false) か、CA証明書を自分でインストールする。
(参考:CygwinでSSLがエラーになる対応に、ルート証明書のアップデートが書いてあった - ブックマクロ開発に)


毎回引数に URL 指定するのが面倒な場合、git-config の hook.remoteURL に指定しておくと引数を省略できる。

$ git config --global hook.remoteURL https://github.com/murank/Git-Hooks/raw/master

git-hooks 自体のアップデートも

# git hooks update https://github.com/murank/Git-Hooks/raw/master

を実行するだけ。これも同じように hook.remoteURL を指定してやることで引数を省略可。



git-hooks も bash-completion に登録したい場合、git-hooks-completion.bashbash-completion.d/ に入れれば使えるようになるはず (要 git-completion)。
入れる場所は下記フォルダのどれかでいいと思う。

  • /etc/bash-completion.d
  • /usr/local/etc/bash-completion.d
  • ~/bash-completion.d
設定

トピックブランチ名の形式 (デフォルト: 「id/%ID%」)
hook.topicBranchFormat にて指定。ブランチ名中のチケットIDの位置は「%ID%」で指定する。(%ID% の位置にある、1個以上の数字をチケットIDとみなす)
sed でチケットIDを取得しているので正規表現も一部可 (ただし、カッコ'()'は使わない方がいいと思う)


例:「feature/id-%ID%/[a-z]*」の場合、「feature/id-123/work」→123



追加メッセージの形式 (デフォルト: 「refs #%ID%」)
hook.msg4TopicBranch にて指定。hook.topicBranchFormat と同じく、
追加メッセージ中のチケットIDの位置は「%ID%」で指定する。


例:「#%ID%」の場合、チケットID:321→「#321」



本家の rewrite 版の開発が結構進んでて今更感はあるけど、一応ソースコードgithub に置いてます。*3

*1:名前かぶったorz https://github.com/bleis-tift/Git-Hooks/tree/rewrite

*2:設定すれば git hooks install でフックスクリプトをインストール可

*3:誰か適当な英語 README を直して…