MacからSourceTreeを通じてGerritを利用する際のメモ
前提
以下は実施済み・設定済みとし、本記事では扱わない
- Gerrit上でのユーザ作成と設定
- 公開鍵登録
- リポジトリへの権限設定
開発の準備
秘密鍵の設置場所
クライアントPCに保持している秘密鍵の設置場所は、鍵生成時のデフォルト~/.ssh/id_rsa
にしておく
この場所でないと、SourceTreeが秘密鍵を見つけられずGerritサーバへの接続に失敗してしまう
Gitの設定
クライアントPCのGitのデフォルトユーザ名は、Gerritで登録したユーザ名と一致させておく
一致させていないと、Gerritサーバへの接続に失敗してしまう場合がある
手順
SourceTreeを起動し、Command+「,」により、設定画面を開き、以下を設定する
リポジトリのクローン
ブラウザ上でコマンドを取得し、Terminal上で実行する
手順
ブラウザでGerritにログインし、対象リポジトリのページを開く
SSHを選択し、「Clone with commit-msg hook」と表示されているコマンドをコピーし、Terminal上で実行する
「with commit-msg hook」のコマンドを利用すると、ローカルの各コミットで、コミットメッセージの末尾にGerritのコードレビューを一意に識別するChange-Idが自動で付与されるようになる
レビュアーに割り当てられた際の操作
修正内容をローカルで確認する
コードレビューのページでローカルリポジトリに修正内容を反映するコマンドを取得し、Terminal上で実行する
手順
コードレビューのページを開き、右上のメニューから「Download patch」をクリック
接続方法を「SSH」に変更し、Checkoutのコマンドをコピーして、Terminal上で実行する
レビューを提出する際の操作
新しくコードレビューを開始する
ローカルのリポジトリでコミットした内容を、Gerritサーバのレビュー専用のブランチにPUSHする
手順
Windowsでは、.git/config
ファイルの[origin]
配下にPUSH先を追記(以下参照)した上で、SourceTreeのPUSH機能をそのまま利用する
[origin]
...
push = refs/heads/*:refs/for/*
一方で、Macではどうやら上手くいかないので、代替の手段を利用する
PUSHの代替手段:カスタムアクションを用意する
以下スクリプトファイルをクライアントPCの任意の場所に保存しておく
# !/bin/sh
BRANCH=`git symbolic-ref --short HEAD`
git push origin HEAD:refs/for/$BRANCH --tags
echo "Pushed the branch to gerrit: $BRANCH"
以下コマンドで、保存したスクリプトファイルに実行権限を付与する
chmod 755 GerritPush.sh
SourceTreeを起動し、Command+「,」により設定画面を開き、カスタムアクションの項目を選択する
左下の「追加」ボタンを押し、メニューキャプションに「GerritへPUSH」(任意の名前)、実行するスクリプトに先ほど保存したスクリプトファイルを選択し、「OK」ボタンを押す
PUSH対象のブランチにチェックアウトした上で、任意のコミットを右クリックし、作成したカスタムアクションを選択する
参考:https://github.com/WeiWeiOuO/Using-Sourcetree-on-Gerrit
コードレビューの指摘を受けてコードを修正する
該当のコミットを、コミットメッセージのChange-Idだけ変えずに修正し、再度GerritサーバにPUSHする
手順
ローカルで修正が完了したら、「最新のコミットを修正」のオプションを選択する
Change-Id部分以外のメッセージを適宜書き換えてコミット
Change-Id部分は書き換えてしまうと、PUSHしたときに別のコードレビュー扱いになってしまうので注意
カスタムアクションを用いてGerritサーバにPUSHすると、Gerrit上でコードの更新が反映される
修正前のコードの変更はGerrit上に残る一方で、修正前のコミットメッセージは残らないため、注意する必要がある
その他
Gerritの練習
Gerritの利用方法は多少癖があると感じるので、ローカルにGerritサーバを立てて練習するのがオススメ
以下の公式が用意しているDockerを用いた構築手順を参考にすると、非常に簡単にローカルにGerritサーバを立てられる
https://github.com/GerritCodeReview/docker-gerrit