git-reviewを使ってみる

 gerritサーバにパッチを投稿するgit-reviewの使い方をまとめました。

gerritはdebian-8というホスト名のサーバで稼働しています。

gerritのプロジェクト名はtestです。


gerritのインストール方法はこちらを参照してください。

JenkinsのGerrit Tirriger Pluginの使い方はこちらを参照してください。

 

1 git-reviewのインストール

こちらを参考にgit-reviewコマンドをインストールします。

1.1 Debian 8

apt-getでインストールします。

$ sudo apt-get install -y git-review

1.2 osx

pipでインストールします。

$ sudo easy_install pip
$ sudo pip install -U setuptools
$ sudo pip install git-review

2 gerritのリポジトリからクローン

gerritにSSH公開鍵を登録したユーザでクローンします。gerritサーバの設定に合わせてポート29418を指定します。

$ git clone ssh://debian-8:29418/test.git

3 .gitreviewを追加

git-reviewを使うにはサーバの設定を記述した.gitreviewが必要です。リポジトリをクローンしたディレクトリに.gitreviewを追加します。

$ cat .gitreview 
[gerrit]
host=debian-8
port=29418
project=test
defaultbranch=master

4 .git/hooks/commit-msgの設定

gerritは以下のコミットログが記載されていることを期待します。

Change-Id: Iefea0cba321bdc8bb1cdc8ea11597a7bcb0c4109

このコミットログはgerritから自動でダウンロードされる.git/hooks/commit-msgが自動追加します。

しかし、すでに.git/hooks/commit-msgを使用している場合は、Change-Idの自動追加が動作せずに以下のエラーメッセージが表示されます。

$ git review
remote: Processing changes: refs: 1, done            
remote: ERROR: missing Change-Id in commit message footer        
remote: 
remote: Hint: To automatically insert Change-Id, install the
hook:        
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418
hiroom2@debian-8:hooks/commit-msg ${gitdir}/hooks/        
remote: And then amend the commit:        
remote:   git commit --amend        
remote: 
To ssh://hiroom2@debian-8:29418/test
 ! [remote rejected] HEAD -> refs/publish/master/dev/id/1 (missing
 Change-Id in commit message footer)
error: failed to push some refs to 'ssh://hiroom2@debian-8:29418/test'

そこで既存の.git/hooks/commit-msgとの兼ね合いの為、以下のようにcommit-msg_xxxを統括するcommit-msgを新たに作成します。

$ ls .git/hooks/
commit-msg            commit-msg_gerrit  pre-commit
commit-msg_Git-Hooks  common.sh          pre-commit_Git-Hooks
$ cat .git/hooks/commit-msg
#!/bin/sh

for script in `ls ${0}_*`; do
  echo "Running ${script}"
  ${script} $@
ret=$?
if [ ${ret} -ne 0 ]; then
echo "${script} is FAILED"
exit ${ret}
fi done

commit-msg_gerritはgerritサーバからscpコマンドを使ってダウンロードしたcommit-msgです。commit-msg_Git-HooksはRedmineのチケット番号を自動追加するGit-Hooksのスクリプトです。

$ scp -p -P 29418 hiroom2@debian-8:hooks/commit-msg \
.git/hooks/commit-msg_gerrit

これらを用いてコミットすると以下のようになります。

$ git branch -b dev/id/1
$ echo "New file" > newfile.txt
$ git add newfile.txt
$ git commit -m "Add new file"
Running .git/hooks/pre-commit_Git-Hooks
Running .git/hooks/commit-msg_Git-Hooks
Running .git/hooks/commit-msg_gerrit
[dev/id/1 b9737a6] Add new file refs #1
 1 file changed, 1 insertion(+)
 create mode 100644 newfile.txt
$ git log
commit b9737a66ea643cb81566510c708874d2876c5359
Author: hiroom2 <hiroom2.mail@gmail.com>
Date:   Sat Aug 22 19:11:41 2015 +0900

    Add new file refs #1
    
    Change-Id: I36702d171d33a0a675c4bcdee468184a9801146d

5 パッチの投稿

さきほどのコミットをパッチとしてgerritに投稿します。

$ git review
remote: Processing changes: new: 1, refs: 1, done            
remote: 
remote: New Changes:        
remote:   http://debian-8/gerrit/5 Add new file refs #1        
remote: 
To ssh://hiroom2@debian-8:29418/test
 * [new branch]      HEAD -> refs/publish/master/dev/id/1

gerritのサーバにアクセスするとOpenの投稿が見つかります。

All -> Open

https://dl-web.dropbox.com/s/8zbkgmz4x4l7eau/0001_Open-All.png

Replyにて、Code-Reviewスコアと+2、Verifiedスコアを+1することでSubmitボタンが表示され、Sumbitボタンを押すことで変更が反映されます。

https://dl-web.dropbox.com/s/ufnbarr4s54mxab/0002_Replay.png

6 リポジトリ反映の確認

masterブランチに切り替えて、git pullするとパッチが反映されていることを確認できます。

$ git checkout master
$ git pull
From ssh://debian-8:29418/test
   23f6e53..17ab1a8  master     -> origin/master
Updating 23f6e53..17ab1a8
Fast-forward
 newfile.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 newfile.txt