Jump to content

Gerrit/Alternatives to git-review

From mediawiki.org

If installing git-review is not feasible for you, you can use plain Git as well. This can sometimes be a better option if git-review doesn't suit your workflow.

Set up

[edit]

Download the commit-msg hook script from gerrit:tools/hooks/commit-msg and save it in the .git/hooks/ subdirectory of your cloned copy of the repository. There's three ways to do it:

Using curl

[edit]
cd myrepo/
curl https://gerrit.wikimedia.org/r/tools/hooks/commit-msg > .git/hooks/commit-msg

Mark the file as as "executable". In Linux you can change this with:

 chmod u+x .git/hooks/commit-msg

Using wget

[edit]
cd myrepo/
wget -P .git/hooks https://gerrit.wikimedia.org/r/tools/hooks/commit-msg

Mark the file as as "executable". In Linux you can change this with:

 chmod u+x .git/hooks/commit-msg

Using the web browser

[edit]

Select "Save as..." from the context menu when right-clicking on this link: gerrit:tools/hooks/commit-msg

Save it to myrepo/.git/hooks/

Commit

[edit]

Whenever you commit a change locally, the hook script will automatically add a unique "Change-Id" to the commit message.

Push for review

[edit]

Add to following Git alias to simplify the command to push changes to Gerrit for review. You can do this by executing the following:

 git config --global alias.push-for-review "push gerrit HEAD:refs/for/master"

If you have a single 'origin' remote, then in the above command replace 'gerrit' with 'origin':

 git config --global alias.push-for-review "push origin HEAD:refs/for/master"

The refs/for/ part is a virtual branch prefix used by Gerrit. However, you may replace "master" with another remote branch that you want to commit to. E.g.: When trying to push to the remote branch Foo use refs/for/Foo.

Push a commit to Gerrit with:

 git push-for-review

If you want to group a few related changesets (when working on a feature, or just to make them searchable in Gerrit), you can push them under the same topic using refs/for/Foo%topic=topic, for example:

git push gerrit HEAD:refs/for/master%topic=T12345

git push gerrit HEAD:refs/for/master%topic=my-feature

See also

[edit]