Gerritでよく使うgit コマンド

Gerritでよく使うgit コマンド

Gerritは「1つのコミットを何度も修正して完成度を高める」という運用をするため、GitHubとは少し違うコマンドを多用します。

レビュー依頼のプッシュ

GitHubの git push origin main とは異なり、Gerritでは refs/for/ブランチ名 という特殊な場所にプッシュします。これによりレビュー依頼である事を判断します。

$ git push origin HEAD:refs/for/ブランチ名
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Writing objects: 100% (3/3), 284 bytes | 284.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote: http://localhost:8080/c/test-repository/+/1 test-comment [NEW]
remote:
To ssh://localhost:29418/test-repository.git
* [new reference] HEAD ->

現在の位置(HEAD)を、ブランチ名向けのレビュー用(refs/for/ブランチ名)として送ります。

このコマンドを実行すると、Gerrit上に新しいChange(レビュー画面)が作成されます。コマンド結果のURLがレビュー画面のリンクになります。(上記例では、http://localhost:8080/c/test-repository/+/1)

コミット

新しくコードを書き、レビューに出す準備をする時に最初のコミットを行います。

$ git add ファイル名
$ git commit -m "メッセージ"

Gerritでは-mオプションを使用したコミットメッセージを書くことは少なくエディタで書くことが多いです。

vimエディタでコミットメッセージを書きたい場合は、以下設定しておけばgit commitでOKです。

$ git config --global core.editor vim

VS Codeでコミットメッセージを書きたい場合は、以下設定しておけばgit commitでOKです。

$ git config --global core.editor "code --wait"

コミット修正

レビューで指摘があった場合、新たにコミットを作るのではなく、今のコミットを書き換えます。

指摘されたコードだけを修正してコミットメッセージは一字一句そのまま変更したくない場合に使います。

$ git add ファイル名
$ git commit --amend --no-edit

--amend をつけると、直前のコミットを破棄して作り直すオプションです。

--no-edit をつけると、Change-Idが含まれた既存のメッセージをそのまま使えます。(コミット上書き、Change-Idは変わらない)

コミット修正後、再び git push origin HEAD:refs/for/ブランチ名 をすると、Gerrit上の既存のレビューが「Patch Set 2」として更新されます。

他メンバーのレビュー取込(同期)

作業中にサーバー側のmasterが進んだ場合、自分のコミットを最新の状態の上に載せ替えます。

$ git fetch origin
$ git rebase origin/master

Gerritでは git pull よりも、履歴を綺麗に保つために rebase が推奨されることが多いです。

コミット履歴を一本道(直線)にして、レビューしやすくするためになります。
git pull を実行すると、裏側では「自分の変更」と「サーバー側の変更」を合体させるためのマージコミット(例:Merge branch ‘master’ of…)が自動で作られてしまいます。
rebase を使うと、自分の修正を常に「最新のmasterの直後」に置くことができます。

コミット履歴(過去の記録)を表示する

git logでコミット履歴を表示します。

Gerritローカル起動(Windows)

Javaをインストールしておきます。

$ java --version
openjdk 21.0.6 2025-01-21 LTS
OpenJDK Runtime Environment Corretto-21.0.6.7.1 (build 21.0.6+7-LTS)
OpenJDK 64-Bit Server VM Corretto-21.0.6.7.1 (build 21.0.6+7-LTS, mixed mode, sharing)

GerritをWindows環境のローカルで起動します。

こちらからwarをダウンロードします。

C:\gerrit\gerrit-3.13.4.warを配置します。

初期化コマンド実行します。Javaのバージョンが比較的最新の場合は、–add-opens java.base/java.lang=ALL-UNNAMEDを付与します。

$ java --add-opens java.base/java.lang=ALL-UNNAMED ^
  -jar gerrit-3.13.4.war init ^
  --batch --dev -d c:\gerrit\site
[2010-01-01 00:00:00,000] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No c:\gerrit\site\etc\gerrit.config; assuming defaults
Generating SSH host key ... rsa... dsa... ed25519... ecdsa 256... ecdsa 384... ecdsa 521... done
Initialized C:\gerrit\site
Automatic startup not supported on Win32.

初期化コマンドが正常終了したのち、起動します。

$ java --add-opens java.base/java.lang=ALL-UNNAMED ^
-jar gerrit-3.13.4.war daemon -d c:\gerrit\site

これで、`http://localhost:8080`にアクセスすると以下のように起動が確認できます。

commit-msg取得(Windows)

gerritをローカル起動した状態で、curlコマンドでcommit-msgを.gitフォルダ配下にダウンロードします。usernameはtestuserとします。

$ ssh -p 29418 testuser@localhost
$ git clone ~~ hoge.git
$ cd hoge
$ curl -Lo .git\hooks\commit-msg http://localhost:8080/tools/hooks/commit-msg

これでコミットメッセージにChange-Idというユニークな識別子が自動で付与されるようになります。

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました