Table of Contents
- 1 git-reviewのインストール
- 2 gerritのリポジトリからクローン
- 3 .gitreviewを追加
- 4 .git/hooks/commit-msgの設定
- 5 パッチの投稿
- 6 リポジトリ反映の確認
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
Replyにて、Code-Reviewスコアと+2、Verifiedスコアを+1することでSubmitボタンが表示され、Sumbitボタンを押すことで変更が反映されます。
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