初めてのシステムと日記

システムも日記も初めてです。

GitとRedmineの連携

GitとRedmineの開発環境で便利なスクリプトを見つけたのでこちらに記載します。


Git+Redmineな人におすすめのフックスクリプト集 - みずぴー日記
http://d.hatena.ne.jp/mzp/20101118/hooks

こちらで紹介されているフックスクリプトで出来ることは以下の通りです。

  • masterブランチへのcommit拒否
  • id/20という命名規則のブランチ(トピックブランチ)でコミットした際、コミットメッセージにrefs 20を自動で追記してくれる

なので簡単にブランチが切れるGitとチケットでプロジェクト管理ができるRedmine
上手く連携させることが可能です。

以下、実際にインストールから検証するまでを記述します。

■インストール

使用するリポジトリの直下で作業します。

// フックスクリプトをダウンロード
$ wget https://download.github.com/bleis-tift-Git-Hooks-730eedc.tar.gz
 ・
 ・ 
 ・
// 解凍
$ tar xvzf bleis-tift-Git-Hooks-730eedc.tar.gz
// 必要なファイルを.git/hooksにコピー
$ cp bleis-tift-Git-Hooks-730eedc/common.sh .git/hooks/
$ cp bleis-tift-Git-Hooks-730eedc/pre-commit .git/hooks/
$ cp bleis-tift-Git-Hooks-730eedc/commit-msg .git/hooks/

以上で終了です。簡単。それぞれのファイルは以下のことを実現してくれます。

  • pre-commit : masterブランチでのコミットを拒否
  • commit-msg : ブランチ名からチケットIDを取得してコミットメッセージに付加
  • common.sh : 上記に必要な関数

またダウンロードファイルにある update をリモートリポジトリに設置すればIDのないブランチのpushを拒否することも出来ます。

■試してみる

masterブランチでコミット

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
// コミットを拒否される
$ git commit
can't commit on master branch.
please commit on topic branch.
$


トピックブランチでコミット

$ git checkout -b id/20
Switched to a new branch 'id/20'
$ git push origin id/20
 ・
 ・
$ git branch -a
* id/20
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/id/20
$ touch test.txt
$ git add test.txt
$ git status
# On branch id/4984
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   test.txt
#
$ git commit -m "テストコミット"
[id/4984 7dfa103] テストコミット
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt
$ git log
commit ****
Author: ****
Date:   ****

    テストコミット refs 4984

 ・
 ・
$

無事動作を確認できました。


以下、使用してみて思ったこと。

・refs [チケット番号]をrefs #[チケット番号]にしたい
 →Redmineのコミットログからチケットへの遷移が可能になる

・id/[チケット番号] の命名規則を変更したい
 →個人的にですがブランチ名に/が入るのは。。


ともかくGit+Redmineで開発している方にはすごくお勧めできるスクリプトかと思います。