16c5c97f00
* stable-2.15: User Guide refers to "Muted"-changes. Remove unused VERSION from lib/jackson/BUILD Remove unused method in ContributorAgreement Add .apt_generated_tests to .gitignore Change-Id: Ifbdea261e59e1bd56e7555e24ce99784f236786e
947 lines
33 KiB
Plaintext
947 lines
33 KiB
Plaintext
= User Guide
|
|
|
|
This is a Gerrit guide that is dedicated to Gerrit end-users. It
|
|
explains the standard Gerrit workflows and how a user can adapt Gerrit
|
|
to personal preferences.
|
|
|
|
It is expected that readers know about link:http://git-scm.com/[Git]
|
|
and that they are familiar with basic git commands and workflows.
|
|
|
|
[[gerrit]]
|
|
== What is Gerrit?
|
|
|
|
Gerrit is a Git server that provides link:access-control.html[access
|
|
control] for the hosted Git repositories and a web front-end for doing
|
|
link:#code-review[code review]. Code review is a core functionality of
|
|
Gerrit, but still it is optional and teams can decide to
|
|
link:#no-code-review[work without code review].
|
|
|
|
[[tools]]
|
|
== Tools
|
|
|
|
Gerrit uses the git protocol. This means in order to work with Gerrit
|
|
you do *not* need to install any Gerrit client, but having a regular
|
|
git client, such as the link:http://git-scm.com/[git command line] or
|
|
link:http://eclipse.org/egit/[EGit] in Eclipse, is sufficient.
|
|
|
|
Still there are some client-side tools for Gerrit, which can be used
|
|
optionally:
|
|
|
|
* link:http://eclipse.org/mylyn/[Mylyn Gerrit Connector]: Gerrit
|
|
integration with Mylyn
|
|
* link:https://github.com/uwolfer/gerrit-intellij-plugin[Gerrit
|
|
IntelliJ Plugin]: Gerrit integration with the
|
|
link:http://www.jetbrains.com/idea/[IntelliJ Platform]
|
|
* link:https://play.google.com/store/apps/details?id=com.jbirdvegas.mgerrit[
|
|
mGerrit]: Android client for Gerrit
|
|
* link:https://github.com/stackforge/gertty[Gertty]: Console-based
|
|
interface for Gerrit
|
|
|
|
[[clone]]
|
|
== Clone Gerrit Project
|
|
|
|
Cloning a Gerrit project is done the same way as cloning any other git
|
|
repository by using the `git clone` command.
|
|
|
|
.Clone Gerrit Project
|
|
----
|
|
$ git clone ssh://gerrithost:29418/RecipeBook.git RecipeBook
|
|
Cloning into RecipeBook...
|
|
----
|
|
|
|
The URL for cloning the project can be found in the Gerrit web UI
|
|
under `Projects` > `List` > <project-name> > `General`.
|
|
|
|
For git operations Gerrit supports the link:user-upload.html#ssh[SSH]
|
|
and the link:user-upload.html#http[HTTP/HTTPS] protocols.
|
|
|
|
[NOTE]
|
|
To use SSH you may need to link:user-upload.html#ssh[configure your SSH public
|
|
key in your `Settings`].
|
|
|
|
[[code-review]]
|
|
== Code Review Workflow
|
|
|
|
With Gerrit _Code Review_ means to link:#review-change[review] every
|
|
commit *before* it is accepted into the code base. The author of a code
|
|
modification link:user-upload.html#push_create[uploads a commit] as a
|
|
change to Gerrit. In Gerrit each change is stored in a
|
|
link:#change-ref[staging area] where it can be checked and reviewed.
|
|
Only when it is approved and submitted it gets applied to the code
|
|
base. If there is feedback on a change, the author can improve the code
|
|
modification by link:#upload-patch-set[amending the commit and
|
|
uploading the new commit as a new patch set]. This way a change is
|
|
improved iteratively and it is applied to the code base only when is
|
|
ready.
|
|
|
|
[[upload-change]]
|
|
== Upload a Change
|
|
|
|
Uploading a change to Gerrit is done by pushing a commit to Gerrit. The
|
|
commit must be pushed to a ref in the `refs/for/` namespace which
|
|
defines the target branch: `refs/for/<target-branch>`.
|
|
The magic `refs/for/` prefix allows Gerrit to differentiate commits
|
|
that are pushed for review from commits that are pushed directly into
|
|
the repository, bypassing code review. For the target branch it is
|
|
sufficient to specify the short name, e.g. `master`, but you can also
|
|
specify the fully qualified branch name, e.g. `refs/heads/master`.
|
|
|
|
.Push for Code Review
|
|
----
|
|
$ git commit
|
|
$ git push origin HEAD:refs/for/master
|
|
|
|
// this is the same as:
|
|
$ git commit
|
|
$ git push origin HEAD:refs/for/refs/heads/master
|
|
----
|
|
|
|
.Push with bypassing Code Review
|
|
----
|
|
$ git commit
|
|
$ git push origin HEAD:master
|
|
|
|
// this is the same as:
|
|
$ git commit
|
|
$ git push origin HEAD:refs/heads/master
|
|
----
|
|
|
|
[[push-fails]]
|
|
[NOTE]
|
|
If pushing to Gerrit fails consult the Gerrit documentation that
|
|
explains the link:error-messages.html[error messages].
|
|
|
|
[[change-ref]]
|
|
When a commit is pushed for review, Gerrit stores it in a staging area
|
|
which is a branch in the special `refs/changes/` namespace. A change
|
|
ref has the format `refs/changes/XX/YYYY/ZZ` where `YYYY` is the
|
|
numeric change number, `ZZ` is the patch set number and `XX` is the
|
|
last two digits of the numeric change number, e.g.
|
|
`refs/changes/20/884120/1`. Understanding the format of this ref is not
|
|
required for working with Gerrit.
|
|
|
|
[[fetch-change]]
|
|
Using the change ref git clients can fetch the corresponding commit,
|
|
e.g. for local verification.
|
|
|
|
.Fetch Change
|
|
----
|
|
$ git fetch https://gerrithost/myProject refs/changes/74/67374/2 && git checkout FETCH_HEAD
|
|
----
|
|
|
|
[NOTE]
|
|
The fetch command can be copied from the
|
|
link:user-review-ui.html#download[download commands] in the change
|
|
screen.
|
|
|
|
The `refs/for/` prefix is used to map the Gerrit concept of
|
|
"Pushing for Review" to the git protocol. For the git client it looks
|
|
like every push goes to the same branch, e.g. `refs/for/master` but in
|
|
fact for each commit that is pushed to this ref Gerrit creates a new
|
|
branch under the `refs/changes/` namespace. In addition Gerrit creates
|
|
an open change.
|
|
|
|
[[change]]
|
|
A change consists of a link:user-changeid.html[Change-Id], meta data
|
|
(owner, project, target branch etc.), one or more patch sets, comments
|
|
and votes. A patch set is a git commit. Each patch set in a change
|
|
represents a new version of the change and replaces the previous patch
|
|
set. Only the latest patch set is relevant. This means all failed
|
|
iterations of a change will never be applied to the target branch, but
|
|
only the last patch set that is approved is integrated.
|
|
|
|
[[change-id]]
|
|
The Change-Id is important for Gerrit to know whether a commit that is
|
|
pushed for code review should create a new change or whether it should
|
|
create a new patch set for an existing change.
|
|
|
|
The Change-Id is a SHA-1 that is prefixed with an uppercase `I`. It is
|
|
specified as footer in the commit message (last paragraph):
|
|
|
|
----
|
|
Improve foo widget by attaching a bar.
|
|
|
|
We want a bar, because it improves the foo by providing more
|
|
wizbangery to the dowhatimeanery.
|
|
|
|
Bug: #42
|
|
Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b
|
|
Signed-off-by: A. U. Thor <author@example.com>
|
|
----
|
|
|
|
If a commit that has a Change-Id in its commit message is pushed for
|
|
review, Gerrit checks if a change with this Change-Id already exists
|
|
for this project and target branch, and if yes, Gerrit creates a new
|
|
patch set for this change. If not, a new change with the given
|
|
Change-Id is created.
|
|
|
|
If a commit without Change-Id is pushed for review, Gerrit creates a
|
|
new change and generates a Change-Id for it. Since in this case the
|
|
Change-Id is not included in the commit message, it must be manually
|
|
inserted when a new patch set should be uploaded. Most projects already
|
|
link:project-configuration.html#require-change-id[require a Change-Id]
|
|
when pushing the very first patch set. This reduces the risk of
|
|
accidentally creating a new change instead of uploading a new patch
|
|
set. Any push without Change-Id then fails with
|
|
link:error-missing-changeid.html[missing Change-Id in commit message
|
|
footer].
|
|
|
|
Amending and rebasing a commit preserves the Change-Id so that the new
|
|
commit automatically becomes a new patch set of the existing change,
|
|
when it is pushed for review.
|
|
|
|
.Push new Patch Set
|
|
----
|
|
$ git commit --amend
|
|
$ git push origin HEAD:refs/for/master
|
|
----
|
|
|
|
Change-Ids are unique for a branch of a project. E.g. commits that fix
|
|
the same issue in different branches should have the same Change-Id,
|
|
which happens automatically if a commit is cherry-picked to another
|
|
branch. This way you can link:user-search.html[search] by the Change-Id
|
|
in the Gerrit web UI to find a fix in all branches.
|
|
|
|
Change-Ids can be created automatically by installing the `commit-msg`
|
|
hook as described in the link:user-changeid.html#creation[Change-Id
|
|
documentation].
|
|
|
|
Instead of manually installing the `commit-msg` hook for each git
|
|
repository, you can copy it into the
|
|
link:http://git-scm.com/docs/git-init#_template_directory[git template
|
|
directory]. Then it is automatically copied to every newly cloned
|
|
repository.
|
|
|
|
[[review-change]]
|
|
== Review Change
|
|
|
|
After link:#upload-change[uploading a change for review] reviewers can
|
|
inspect it via the Gerrit web UI. Reviewers can see the code delta and
|
|
link:user-review-ui.html#inline-comments[comment directly in the code]
|
|
on code blocks or lines. They can also link:user-review-ui.html#reply[
|
|
post summary comments and vote on review labels]. The
|
|
link:user-review-ui.html[documentation of the review UI] explains the
|
|
screens and controls for doing code reviews.
|
|
|
|
There are several options to control how patch diffs should be
|
|
rendered. Users can configure their preferences in the
|
|
link:user-review-ui.html#diff-preferences[diff preferences].
|
|
|
|
[[upload-patch-set]]
|
|
== Upload a new Patch Set
|
|
|
|
If there is feedback from code review and a change should be improved a
|
|
new patch set with the reworked code should be uploaded.
|
|
|
|
This is done by amending the commit of the last patch set. If needed
|
|
this commit can be fetched from Gerrit by using the fetch command from
|
|
the link:user-review-ui.html#download[download commands] in the change
|
|
screen.
|
|
|
|
It is important that the commit message contains the
|
|
link:user-changeid.html[Change-Id] of the change that should be updated
|
|
as a footer (last paragraph). Normally the commit message already
|
|
contains the correct Change-Id and the Change-Id is preserved when the
|
|
commit is amended.
|
|
|
|
.Push Patch Set
|
|
----
|
|
// fetch and checkout the change
|
|
// (checkout command copied from change screen)
|
|
$ git fetch https://gerrithost/myProject refs/changes/74/67374/2 && git checkout FETCH_HEAD
|
|
|
|
// rework the change
|
|
$ git add <path-of-reworked-file>
|
|
...
|
|
|
|
// amend commit
|
|
$ git commit --amend
|
|
|
|
// push patch set
|
|
$ git push origin HEAD:refs/for/master
|
|
----
|
|
|
|
[NOTE]
|
|
Never amend a commit that is already part of a central branch.
|
|
|
|
Pushing a new patch set triggers email notification to the reviewers.
|
|
|
|
[[multiple-features]]
|
|
== Developing multiple Features in parallel
|
|
|
|
Code review takes time, which can be used by the change author to
|
|
implement other features. Each feature should be implemented in its own
|
|
local feature branch that is based on the current HEAD of the target
|
|
branch. This way there is no dependency to open changes and new
|
|
features can be reviewed and applied independently. If wanted, it is
|
|
also possible to base a new feature on an open change. This will create
|
|
a dependency between the changes in Gerrit and each change can only be
|
|
applied if all its predecessor are applied as well. Dependencies
|
|
between changes can be seen from the
|
|
link:user-review-ui.html#related-changes-tab[Related Changes] tab on
|
|
the change screen.
|
|
|
|
[[watch]]
|
|
== Watching Projects
|
|
|
|
To get to know about new changes you can link:user-notify.html#user[
|
|
watch the projects] that you are interested in. For watched projects
|
|
Gerrit sends you email notifications when a change is uploaded or
|
|
modified. You can decide on which events you want to be notified and
|
|
you can filter the notifications by using link:user-search.html[change
|
|
search expressions]. For example '+branch:master file:^.*\.txt$+' would
|
|
send you email notifications only for changes in the master branch that
|
|
touch a 'txt' file.
|
|
|
|
It is common that the members of a project team watch their own
|
|
projects and then pick the changes that are interesting to them for
|
|
review.
|
|
|
|
Project owners may also configure
|
|
link:intro-project-owner.html#notifications[notifications on
|
|
project-level].
|
|
|
|
[[adding-reviewers]]
|
|
== Adding Reviewers
|
|
|
|
In the link:user-review-ui.html#reviewers[change screen] reviewers can
|
|
be added explicitly to a change. The added reviewer will then be
|
|
notified by email about the review request.
|
|
|
|
Mainly this functionality is used to request the review of specific
|
|
person who is known to be an expert in the modified code or who is a
|
|
stakeholder of the implemented feature. Normally it is not needed to
|
|
explicitly add reviewers on every change, but you rather rely on the
|
|
project team to watch their project and to process the incoming changes
|
|
by importance, interest, time etc.
|
|
|
|
There are also link:intro-project-owner.html#reviewers[plugins which
|
|
can add reviewers automatically] (e.g. by configuration or based on git
|
|
blame annotations). If this functionality is required it should be
|
|
discussed with the project owners and the Gerrit administrators.
|
|
|
|
[[dashboards]]
|
|
== Dashboards
|
|
|
|
Gerrit supports a wide range of link:user-search.html#search-operators[
|
|
query operators] to search for changes by different criteria, e.g. by
|
|
status, change owner, votes etc.
|
|
|
|
The page that shows the results of a change query has the change query
|
|
contained in its URL. This means you can bookmark this URL in your
|
|
browser to save the change query. This way it can be easily re-executed
|
|
later.
|
|
|
|
Several change queries can be also combined into a dashboard. A
|
|
dashboard is a screen in Gerrit that presents the results of several
|
|
change queries in different sections, each section having a descriptive
|
|
title.
|
|
|
|
A default dashboard is available under `My` > `Changes`. It has
|
|
sections to list outgoing reviews, incoming reviews and recently closed
|
|
changes.
|
|
|
|
Users can also define link:user-dashboards.html#custom-dashboards[
|
|
custom dashboards]. Dashboards can be bookmarked in a browser so that
|
|
they can be re-executed later.
|
|
|
|
It is also possible to link:#my-menu[customize the My menu] and add
|
|
menu entries for custom queries or dashboards to it.
|
|
|
|
Dashboards are very useful to define own views on changes, e.g. you can
|
|
have different dashboards for own contributions, for doing reviews or
|
|
for different sets of projects.
|
|
|
|
[NOTE]
|
|
You can use the link:user-search.html#limit[limit] and
|
|
link:user-search.html#age[age] query operators to limit the result set
|
|
in a dashboard section. Clicking on the section title executes the
|
|
change query without the `limit` and `age` operator so that you can
|
|
inspect the full result set.
|
|
|
|
Project owners can also define shared
|
|
link:user-dashboards.html#project-dashboards[dashboards on
|
|
project-level]. The project dashboards can be seen in the web UI under
|
|
`Projects` > `List` > <project-name> > `Dashboards`.
|
|
|
|
[[submit]]
|
|
== Submit a Change
|
|
|
|
Submitting a change means that the code modifications of the current
|
|
patch set are applied to the target branch. Submit requires the
|
|
link:access-control.html#category_submit[Submit] access right and is
|
|
done on the change screen by clicking on the
|
|
link:user-review-ui.html#submit[Submit] button.
|
|
|
|
In order to be submittable changes must first be approved by
|
|
link:user-review-ui.html#vote[voting on the review labels]. By default
|
|
a change can only be submitted if it has a vote with the highest value
|
|
on each review label and no vote with the lowest value (veto vote).
|
|
Projects can configure link:intro-project-owner.html#labels[custom
|
|
labels] and link:intro-project-owner.html#submit-rules[custom submit
|
|
rules] to control when a change becomes submittable.
|
|
|
|
How the code modification is applied to the target branch when a change
|
|
is submitted is controlled by the
|
|
link:project-configuration.html#submit_type[submit type] which can be
|
|
link:intro-project-owner.html#submit-type[configured on project-level].
|
|
|
|
Submitting a change may fail with conflicts. In this case you need to
|
|
link:#rebase[rebase] the change locally, resolve the conflicts and
|
|
upload the commit with the conflict resolution as new patch set.
|
|
|
|
If a change cannot be merged due to path conflicts this is highlighted
|
|
on the change screen by a bold red `Cannot Merge` label.
|
|
|
|
[[rebase]]
|
|
== Rebase a Change
|
|
|
|
While a change is in review the HEAD of the target branch can evolve.
|
|
In this case the change can be rebased onto the new HEAD of the target
|
|
branch. When there are no conflicts the rebase can be done directly
|
|
from the link:user-review-ui.html#rebase[change screen], otherwise it
|
|
must be done locally.
|
|
|
|
.Rebase a Change locally
|
|
----
|
|
// update the remote tracking branches
|
|
$ git fetch
|
|
|
|
// fetch and checkout the change
|
|
// (checkout command copied from change screen)
|
|
$ git fetch https://gerrithost/myProject refs/changes/74/67374/2 && git checkout FETCH_HEAD
|
|
|
|
// do the rebase
|
|
$ git rebase origin/master
|
|
|
|
// resolve conflicts if needed and stage the conflict resolution
|
|
...
|
|
$ git add <path-of-file-with-conflicts-resolved>
|
|
|
|
// continue the rebase
|
|
$ git rebase --continue
|
|
|
|
// push the commit with the conflict resolution as new patch set
|
|
$ git push origin HEAD:refs/for/master
|
|
----
|
|
|
|
Doing a manual rebase is only necessary when there are conflicts that
|
|
cannot be resolved by Gerrit. If manual conflict resolution is needed
|
|
also depends on the link:intro-project-owner.html#submit-type[submit
|
|
type] that is configured for the project.
|
|
|
|
Generally changes shouldn't be rebased without reason as it
|
|
increases the number of patch sets and creates noise with
|
|
notifications. However if a change is in review for a long time it may
|
|
make sense to rebase it from time to time, so that reviewers can see
|
|
the delta against the current HEAD of the target branch. It also shows
|
|
that there is still an interest in this change.
|
|
|
|
[NOTE]
|
|
Never rebase commits that are already part of a central branch.
|
|
|
|
[[abandon]]
|
|
[[restore]]
|
|
== Abandon/Restore a Change
|
|
|
|
Sometimes during code review a change is found to be bad and it should
|
|
be given up. In this case the change can be
|
|
link:user-review-ui.html#abandon[abandoned] so that it doesn't appear
|
|
in list of open changes anymore.
|
|
|
|
Abandoned changes can be link:user-review-ui.html#restore[restored] if
|
|
later they are needed again.
|
|
|
|
[[topics]]
|
|
== Using Topics
|
|
|
|
Changes can be grouped by topics. This is useful because it allows you
|
|
to easily find related changes by using the
|
|
link:user-search.html#topic[topic search operator]. Also on the change
|
|
screen link:user-review-ui.html#same-topic[changes with the same topic]
|
|
are displayed so that you can easily navigate between them.
|
|
|
|
Often changes that together implement a feature or a user story are
|
|
group by a topic.
|
|
|
|
Assigning a topic to a change can be done in the
|
|
link:user-review-ui.html#project-branch-topic[change screen].
|
|
|
|
It is also possible to link:user-upload.html#topic[set a topic on
|
|
push], either by appending `%topic=...` to the ref name or through
|
|
the use of the command line flag `--push-option`, aliased to `-o`,
|
|
followed by `topic=...`.
|
|
|
|
Gerrit may be link:config-gerrit.html#change.submitWholeTopic[configured] to
|
|
submit all changes in a topic together with a single click, even when topics
|
|
span multiple projects.
|
|
|
|
.Set Topic on Push
|
|
----
|
|
$ git push origin HEAD:refs/for/master%topic=multi-master
|
|
|
|
// this is the same as:
|
|
$ git push origin HEAD:refs/heads/master -o topic=multi-master
|
|
----
|
|
|
|
[[hashtags]]
|
|
== Using Hashtags
|
|
|
|
Hashtags are freeform strings associated with a change, like on social media
|
|
platforms. In Gerrit, you explicitly associate hashtags with changes using a
|
|
dedicated area of the UI; they are not parsed from commit messages or comments.
|
|
|
|
Similar to topics, hashtags can be used to group related changes together, and
|
|
to search using the link:user-search.html#hashtag[`hashtag:`] operator. Unlike
|
|
topics, a change can have multiple hashtags, and they are only used for
|
|
informational grouping; changes with the same hashtags are not necessarily
|
|
submitted together.
|
|
|
|
The hashtag feature is only available when running under
|
|
link:note-db.html[NoteDb].
|
|
|
|
.Set Hashtag on Push
|
|
----
|
|
$ git push origin HEAD:refs/for/master%t=stable-bugfix
|
|
|
|
// this is the same as:
|
|
$ git push origin HEAD:refs/heads/master -o t=stable-bugfix
|
|
----
|
|
|
|
[[wip]]
|
|
== Work-in-Progress Changes
|
|
|
|
Work-in-Progress (WIP) changes are visible to anyone, but do not notify or
|
|
require an action from a reviewer.
|
|
|
|
Specifically, when you mark a change as Work-in-Progress:
|
|
|
|
* Reviewers are not notified for most operations, such as adding or removing,
|
|
posting comments, and so on. See the REST API documentation
|
|
link:rest-api-changes.html#set-review-notifications[tables] for more
|
|
information.
|
|
* The change does not show in reviewers' dashboards.
|
|
|
|
WIP changes are useful when:
|
|
|
|
* You have implemented only part of a change, but want to push your change
|
|
to the server to run tests or perform other actions before requesting
|
|
reviewer feedback.
|
|
* During a review, you realize you need to rework your change, and you
|
|
want to stop notifying reviewers of the change until you finish your
|
|
update.
|
|
|
|
To set the status of a change to Work-in-Progress, you can use either
|
|
the command line or the user interface. To use the command line, append
|
|
`%wip` to your push request.
|
|
|
|
----
|
|
$ git push origin HEAD:refs/for/master%wip
|
|
----
|
|
Alternatively, click *WIP* from the Change screen.
|
|
|
|
To mark the change as ready for review, append `%ready` to your push
|
|
request.
|
|
|
|
----
|
|
$ git push origin HEAD:refs/for/master%ready
|
|
----
|
|
Alternatively, click *Ready* from the Change screen.
|
|
|
|
Only change owners, project owners and site administrators can mark changes as
|
|
`work-in-progress` and `ready`.
|
|
|
|
[[wip-polygerrit]]
|
|
In the new PolyGerrit UI, you can mark a change as WIP, by selecting *WIP* from
|
|
the *More* menu. The Change screen updates with a yellow header, indicating that
|
|
the change is in a Work-in-Progress state. To mark a change as ready for review,
|
|
click *Start Review*.
|
|
|
|
[[private-changes]]
|
|
== Private Changes
|
|
|
|
Private changes are changes that are only visible to their owners, reviewers
|
|
and users with the link:access-control.html#category_view_private_changes[
|
|
View Private Changes] global capability. Private changes are useful in a number
|
|
of cases:
|
|
|
|
* You want to check what the change looks like before formal review starts.
|
|
By marking the change private without reviewers, nobody can
|
|
prematurely comment on your changes.
|
|
|
|
* You want to use Gerrit to sync data between different devices. By
|
|
creating a private throwaway change without reviewers, you can push
|
|
from one device, and fetch to another device.
|
|
|
|
* You want to do code review on a change that has sensitive
|
|
aspects. By reviewing a security fix in a private change,
|
|
outsiders can't discover the fix before it is pushed out. Even after
|
|
merging the change, the review can be kept private.
|
|
|
|
To create a private change, you push it with the `private` option.
|
|
|
|
.Push a private change
|
|
----
|
|
$ git commit
|
|
$ git push origin HEAD:refs/for/master%private
|
|
----
|
|
|
|
The change will remain private on subsequent pushes until you specify
|
|
the `remove-private` option. Alternatively, the web UI provides buttons
|
|
to mark a change private and non-private again.
|
|
|
|
When pushing a private change with a commit that is authored by another
|
|
user, the other user will not be automatically added as a reviewer and
|
|
must be explicitly added.
|
|
|
|
For CI systems that must verify private changes, a special permission
|
|
can be granted
|
|
(link:access-control.html#category_view_private_changes[View Private Changes]).
|
|
In that case, care should be taken to prevent the CI system from
|
|
exposing secret details.
|
|
|
|
[[ignore]]
|
|
== Ignoring Or Marking Changes As 'Reviewed'
|
|
|
|
Changes can be ignored, which means they will not appear in the 'Incoming
|
|
Reviews' dashboard and any related email notifications will be suppressed.
|
|
This can be useful when you are added as a reviewer to a change on which
|
|
you do not actively participate in the review, but do not want to completely
|
|
remove yourself.
|
|
|
|
Alternatively, rather than completely ignoring the change, it can be marked
|
|
as 'Reviewed'. Marking a change as 'Reviewed' means it will not be highlighted
|
|
in the dashboard, until a new patch set is uploaded.
|
|
|
|
[[inline-edit]]
|
|
== Inline Edit
|
|
|
|
It is possible to link:user-inline-edit.html#editing-change[edit
|
|
changes inline] directly in the web UI. This is useful to make small
|
|
corrections immediately and publish them as a new patch set.
|
|
|
|
It is also possible to link:user-inline-edit.html#create-change[create
|
|
new changes inline].
|
|
|
|
[[project-administration]]
|
|
== Project Administration
|
|
|
|
Every project has a link:intro-project-owner.html#project-owner[project
|
|
owner] that administrates the project. Project administration includes
|
|
the configuration of the project
|
|
link:intro-project-owner.html#access-rights[access rights], but project
|
|
owners have many more possibilities to customize the workflows for a
|
|
project which are described in the link:intro-project-owner.html[
|
|
project owner guide].
|
|
|
|
[[no-code-review]]
|
|
== Working without Code Review
|
|
|
|
Doing code reviews with Gerrit is optional and you can use Gerrit
|
|
without code review as a pure Git server.
|
|
|
|
.Push with bypassing Code Review
|
|
----
|
|
$ git commit
|
|
$ git push origin HEAD:master
|
|
|
|
// this is the same as:
|
|
$ git commit
|
|
$ git push origin HEAD:refs/heads/master
|
|
----
|
|
|
|
[NOTE]
|
|
Bypassing code review must be enabled in the project access rights. The
|
|
project owner must allow it by assigning the
|
|
link:access-control.html#category_push_direct[Push] access right on the
|
|
target branch (`refs/heads/<branch-name>`).
|
|
|
|
[NOTE]
|
|
If you bypass code review you always need to merge/rebase manually if
|
|
the tip of the destination branch has moved. Please keep this in mind
|
|
if you choose to not work with code review because you think it's
|
|
easier to avoid the additional complexity of the review workflow; it
|
|
might actually not be easier.
|
|
|
|
[NOTE]
|
|
The project owner may enable link:user-upload.html#auto_merge[
|
|
auto-merge on push] to benefit from the automatic merge/rebase on
|
|
server side while pushing directly into the repository.
|
|
|
|
[[user-refs]]
|
|
== User Refs
|
|
|
|
User configuration data such as link:#preferences[preferences] is
|
|
stored in the `All-Users` project under a per-user ref. The user's
|
|
ref is based on the user's account id which is an integer. The user
|
|
refs are sharded by the last two digits (`+nn+`) in the refname,
|
|
leading to refs of the format `+refs/users/nn/accountid+`.
|
|
|
|
[[preferences]]
|
|
== Preferences
|
|
|
|
There are several options to control the rendering in the Gerrit web UI.
|
|
Users can configure their preferences under `Settings` > `Preferences`.
|
|
The user's preferences are stored in a `git config` style file named
|
|
`preferences.config` under the link:#user-refs[user's ref] in the
|
|
`All-Users` project.
|
|
|
|
The following preferences can be configured:
|
|
|
|
- [[review-category]]`Display In Review Category`:
|
|
+
|
|
This setting controls how the values of the review labels in change
|
|
lists and dashboards are visualized.
|
|
+
|
|
** `None`:
|
|
+
|
|
For each review label only the voting value is shown. Approvals are
|
|
rendered as a green check mark icon, vetoes as a red X icon.
|
|
+
|
|
** `Show Name`:
|
|
+
|
|
For each review label the voting value is shown together with the full
|
|
name of the voting user.
|
|
+
|
|
** `Show Email`:
|
|
+
|
|
For each review label the voting value is shown together with the email
|
|
address of the voting user.
|
|
+
|
|
** `Show Username`:
|
|
+
|
|
For each review label the voting value is shown together with the
|
|
username of the voting user.
|
|
+
|
|
** `Show Abbreviated Name`:
|
|
+
|
|
For each review label the voting value is shown together with the
|
|
initials of the full name of the voting user.
|
|
|
|
- [[page-size]]`Maximum Page Size`:
|
|
+
|
|
The maximum number of entries that are shown on one page, e.g. used
|
|
when paging through changes, projects, branches or groups.
|
|
|
|
- [[date-time-format]]`Date/Time Format`:
|
|
+
|
|
The format that should be used to render dates and timestamps.
|
|
|
|
- [[email-notifications]]`Email Notifications`:
|
|
+
|
|
This setting controls the email notifications.
|
|
+
|
|
** `Enabled`:
|
|
+
|
|
Email notifications are enabled.
|
|
+
|
|
** [[cc-me]]`Every comment`:
|
|
+
|
|
Email notifications are enabled and you get notified by email as CC
|
|
on comments that you write yourself.
|
|
+
|
|
** `Disabled`:
|
|
+
|
|
Email notifications are disabled.
|
|
|
|
- [[email-format]]`Email Format`:
|
|
+
|
|
This setting controls the email format Gerrit sends. Note that this
|
|
setting has no effect if the administrator has disabled HTML emails
|
|
for the Gerrit instance.
|
|
+
|
|
** `Plaintext Only`:
|
|
+
|
|
Email notifications contain only plaintext content.
|
|
+
|
|
** `HTML and Plaintext`:
|
|
+
|
|
Email notifications contain both HTML and plaintext content.
|
|
|
|
- [[default-base-for-merges]]`Default Base For Merges`:
|
|
+
|
|
This setting controls which base should be pre-selected in the
|
|
`Diff Against` drop-down list when the change screen is opened for a
|
|
merge commit.
|
|
+
|
|
** `Auto Merge`:
|
|
+
|
|
Pre-selects `Auto Merge` in the `Diff Against` drop-down list when the
|
|
change screen is opened for a merge commit.
|
|
+
|
|
** `First Parent`:
|
|
+
|
|
Pre-selects `Parent 1` in the `Diff Against` drop-down list when the
|
|
change screen is opened for a merge commit.
|
|
+
|
|
|
|
- [[diff-view]]`Diff View`:
|
|
+
|
|
Whether the Side-by-Side diff view or the Unified diff view should be
|
|
shown when clicking on a file path in the change screen.
|
|
|
|
- [[show-site-header]]`Show Site Header / Footer`:
|
|
+
|
|
Whether the site header and footer should be shown.
|
|
|
|
- [[relative-dates]]`Show Relative Dates In Changes Table`:
|
|
+
|
|
Whether timestamps in change lists and dashboards should be shown as
|
|
relative timestamps, e.g. '12 days ago' instead of absolute timestamps
|
|
such as 'Apr 15'.
|
|
|
|
- [[change-size-bars]]`Show Change Sizes As Colored Bars`:
|
|
+
|
|
Whether change sizes should be visualized as colored bars. If disabled
|
|
the numbers of added and deleted lines are shown as text, e.g.
|
|
'+297, -63'.
|
|
|
|
- [[show-change-number]]`Show Change Number In Changes Table`:
|
|
+
|
|
Whether in change lists and dashboards an `ID` column with the numeric
|
|
change IDs should be shown.
|
|
|
|
- [[mute-common-path-prefixes]]`Mute Common Path Prefixes In File List`:
|
|
+
|
|
Whether common path prefixes in the file list on the change screen
|
|
should be link:user-review-ui.html#repeating-path-segments[grayed out].
|
|
|
|
- [[inline-signed-off]]`Insert Signed-off-by Footer For Inline Edit Changes`:
|
|
+
|
|
Whether a `Signed-off-by` footer should be automatically inserted into
|
|
changes that are created from the web UI (e.g. by the `Create Change`
|
|
and `Edit Config` buttons on the project screen, and the `Follow-Up`
|
|
button on the change screen).
|
|
|
|
- [[publish-comments-on-push]]`Publish comments on push`:
|
|
+
|
|
Whether to publish any outstanding draft comments by default when pushing
|
|
updates to open changes. This preference just sets the default; the behavior can
|
|
still be overridden using a link:user-upload.html#publish-comments[push option].
|
|
|
|
- [[use-flash]]`Use Flash Clipboard Widget`:
|
|
+
|
|
Whether the Flash clipboard widget should be used. If enabled and the Flash
|
|
plugin is available, Gerrit offers a copy-to-clipboard icon next to IDs and
|
|
commands that need to be copied frequently, such as the Change-Ids, commit IDs
|
|
and download commands. Note that this option is only shown if the Flash plugin
|
|
is available and the JavaScript Clipboard API is unavailable.
|
|
|
|
- [[work-in-progress-by-default]]`Set new changes work-in-progress`:
|
|
+
|
|
Whether new changes are uploaded as work-in-progress per default. This
|
|
preference just sets the default; the behavior can still be overridden using a
|
|
link:user-upload.html#wip[push option].
|
|
|
|
[[my-menu]]
|
|
In addition it is possible to customize the menu entries of the `My`
|
|
menu. This can be used to make the navigation to frequently used
|
|
screens, e.g. configured link:#dashboards[dashboards], quick.
|
|
|
|
[[reply-by-email]]
|
|
== Reply by Email
|
|
|
|
Gerrit sends out email notifications to users and supports parsing back replies
|
|
on some of them (when link:config-gerrit.html#receiveemail[configured]).
|
|
|
|
Gerrit supports replies on these notification emails:
|
|
|
|
* Notifications about new comments
|
|
* Notifications about new labels that were applied or removed
|
|
|
|
While Gerrit supports a wide range of email clients, the following ones have
|
|
been tested and are known to work:
|
|
|
|
* Gmail
|
|
* Gmail Mobile
|
|
|
|
Gerrit supports parsing back all comment types that can be applied to a change
|
|
via the WebUI:
|
|
|
|
* Change messages
|
|
* Inline comments
|
|
* File comments
|
|
|
|
Please note that comments can only be sent in reply to a comment in the original
|
|
notification email, while the change message is independent of those.
|
|
|
|
Gerrit supports parsing a user's reply from both HTML and plaintext. Please note
|
|
that some email clients extract the text from the HTML email they have received
|
|
and send this back as a quoted reply if you have set the client to plaintext
|
|
mode. In this case, Gerrit only supports parsing a change message. To work
|
|
around this issue, consider setting a <<email-format,User Preference>> to
|
|
receive only plaintext emails.
|
|
|
|
Example notification:
|
|
----
|
|
Some User has posted comments on this change.
|
|
(https://gerrit-review.googlesource.com/123123 )
|
|
|
|
Change subject: My new change
|
|
......................................................................
|
|
|
|
|
|
Patch Set 3:
|
|
|
|
Just a couple of smaller things I found.
|
|
|
|
https://gerrit-review.googlesource.com/#/c/123123/3/MyFile.java
|
|
File
|
|
MyFile.java:
|
|
|
|
https://gerrit-review.googlesource.com/#/c/123123/3/MyFile@420
|
|
PS3, Line 420: someMethodCall(param);
|
|
Seems to be failing the tests.
|
|
|
|
|
|
--
|
|
To view, visit https://gerrit-review.googlesource.com/123123
|
|
To unsubscribe, visit https://gerrit-review.googlesource.com/settings
|
|
|
|
(Footers omitted for brevity, must be included in all emails)
|
|
----
|
|
|
|
Example response from the user:
|
|
----
|
|
Thanks, I'll fix it.
|
|
> Some User has posted comments on this change.
|
|
> (https://gerrit-review.googlesource.com/123123 )
|
|
>
|
|
> Change subject: My new change
|
|
> ......................................................................
|
|
>
|
|
>
|
|
> Patch Set 3:
|
|
>
|
|
> Just a couple of smaller things I found.
|
|
>
|
|
> https://gerrit-review.googlesource.com/#/c/123123/3/MyFile.java
|
|
> File
|
|
> MyFile.java:
|
|
Rename this file to File.java
|
|
>
|
|
> https://gerrit-review.googlesource.com/#/c/123123/3/MyFile@420
|
|
> PS3, Line 420: someMethodCall(param);
|
|
> Seems to be failing the tests.
|
|
>
|
|
Yeah, I see why, let me try again.
|
|
>
|
|
> --
|
|
> To view, visit https://gerrit-review.googlesource.com/123123
|
|
> To unsubscribe, visit https://gerrit-review.googlesource.com/settings
|
|
>
|
|
> (Footers omitted for brevity, must be included in all emails)
|
|
----
|
|
|
|
In this case, Gerrit will persist a change message ("Thanks, I'll fix it."),
|
|
a file comment ("Rename this file to File.java") as well as a reply to an
|
|
inline comment ("Yeah, I see why, let me try again.").
|
|
|
|
|
|
GERRIT
|
|
------
|
|
Part of link:index.html[Gerrit Code Review]
|
|
|
|
SEARCHBOX
|
|
---------
|