gerritサーバにパッチを投稿するgit-reviewの使い方をまとめました。
gerritはdebian-8というホスト名のサーバで稼働しています。
gerritのプロジェクト名はtestです。
gerritのインストール方法はこちらを参照してください。
JenkinsのGerrit Tirriger Pluginの使い方はこちらを参照してください。
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-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
Replyにて、Code-Reviewスコアと+2、Verifiedスコアを+1することでSubmitボタンが表示され、Sumbitボタンを押すことで変更が反映されます。
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