git-reviewを使ってみる


Table of Contents

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-8port=29418project=testdefaultbranch=master

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

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

Change-Id: Iefea0cba321bdc8bb1cdc8ea11597a7bcb0c4109

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

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

$ git reviewremote: Processing changes: refs: 1, done remote: ERROR: missing Change-Id in commit message footer remote: remote: Hint: To automatically insert Change-Id, install thehook: remote: gitdir=$(git rev-parse –git-dir); scp -p -P 29418hiroom2@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-commitcommit-msg_Git-Hooks common.sh pre-commit_Git-Hooks$ cat .git/hooks/commit-msg#!/bin/shfor script in `ls ${0}_*`; do echo “Running ${script}” ${script} $@
ret=$?
if [ ${ret} -ne 0 ]; then
echo “${script} is FAILED”
exit ${ret}
fidone

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-HooksRunning .git/hooks/commit-msg_Git-HooksRunning .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 logcommit b9737a66ea643cb81566510c708874d2876c5359Author: hiroom2 <[email protected]>Date: Sat Aug 22 19:11:41 2015 +0900 Add new file refs #1 Change-Id: I36702d171d33a0a675c4bcdee468184a9801146d

5 パッチの投稿

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

$ git reviewremote: 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 pullFrom ssh://debian-8:29418/test 23f6e53..17ab1a8 master -> origin/masterUpdating 23f6e53..17ab1a8Fast-forward newfile.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 newfile.txt

Android | Linux | SDL - Narrow Escape