= Gerrit Code Review - Project Configuration

Every project has a configuration that defines access rights and controls
project-specific behavior.

The project configuration is stored inside the git repository inside the
`refs/meta/config` branch.

[[refs-meta-config]]
== The `refs/meta/config` branch

The `refs/meta/config` branch contains configuration files. It is disconnected
from the normal branches under `refs/heads/` that contain the source code.

The files inside the `refs/meta/config` branch are versioned just like any
other file in the repository. This means from the git history of the
`refs/meta/config` branch it can be seen how the configuration changed
over time and which configuration was active when.

[[configuration-files]]
== Configuration files

The project configuration is stored in the following files (these files are
stored inside the `refs/meta/config` branch, see
link:#refs-meta-config[above]):

* link:#file-project_config[project.config]:
  Contains the link to the parent project, the project description, access
  rights, label definitions, submit requirements and options to control
  project-specific behavior.
* link:#file-groups[groups]:
  Resolves group names that are mentioned in `project.config` to group UUIDs.
* [DEPRECATED] link:#file-rules_pl[rules.pl]:
  Contains Prolog rules that control when a change becomes ready to submit.
  Note, Prolog rules are deprecated and have been replaced by
  link:config-submit-requirements.html[submit requirements].

In addition, there can be configuration files from Gerrit plugins, usually they
are named `<PLUGIN-NAME>.config`.

[[update]]
== Updating the project configuration

There are several possibilities to update the project configuration:

[[update-through-web-ui]]
* Through the Gerrit web UI:
+
[[update-through-general-screen]]
--
* On the project's `General` screen:
+
The `General` screen can be found under:
`BROWSE` > `Repositories` > `<project-name>` > `General`
+
In the `Configurations` section this screen allows to edit the project
description and change repository options.
+
Note, this screen only supports changing the most important repository options,
but it doesn't expose all options that exist.
+
All changes are directly applied (without code review).
--
+
[[update-through-access-screen]]
--
* On the project's `Access` screen:
+
The `Access` screen can be found under:
`BROWSE` > `Repositories` > `<project-name>` > `Access`
+
This screen allows to edit the project's access rights.
+
Updating access rights via the `Access` screen updates the
link:#file-groups[groups] file automatically.
+
Modifications can either be applied directly (`SAVE` button) or saved for
review (`SAVE FOR REVIEW` button).
+
Saving access modification for review (`SAVE FOR REVIEW` button) creates an
open change for the `refs/meta/config` branch where the modifications can be
reviewed by a project owner. The modifications become effective only after a
project owner submits the change.
--
+
[[update-via-online-editing]]
--
** Via online editing:
+
The project's `Commands` screen, that can be found under `BROWSE` >
`Repositories` > `<project-name>` > `Commands`, offers an `EDIT REPO CONFIG`
command that allows to edit the `project.config` file directly in the Gerrit
web UI.
+
The `EDIT REPO CONFIG` command creates a new work-in-progress change with a
change edit that contains the `project.config` file. Clicking on the command
opens an online editor for the `project.config` file, allowing the user to make
modifications to it.
+
Modifications need to be saved and published ("saving" saves the modifications
in the change edit, "publishing" publishes the change edit to make it visible
to other users). While the change edit is not published yet, it's possible to
add further files to it (e.g. the link:#file-groups[groups] file if it needs to
be modified, in contrast to making access rights changes through the `Access`
screen the `groups` file is not automatically updated). For further details how
to work with change edits see the link:user-inline-edit.html[inline edit user
guide]. After publishing the change edit, the change should be set to ready by
clicking on `START REVIEW` > `SEND AND START REVIEW`. At this time you also
want to add a project owner as a reviewer so that they can review and approve
the change.
--

[[update-by-git-push]]
* By pushing updates via Git:
+
Since the configuration files are stored in a git branch, it's possible to
update them via normal git operations:
+
--
1. Clone the repository if you don't have it available yet. The clone command
   can be found in the `Download` section of project's `General` screen
   (`BROWSE` > `Repositories` > `<project-name>` > `General`).
2. Fetch and checkout the `refs/meta/config branch`, e.g. by `git fetch origin
   refs/meta/config && git checkout FETCH_HEAD`.
3. Edit the `project.config` file or other configuration files and commit the
   changes, e.g. by `git commit --all`. Note, since the `project.config` file
   uses the format of a git config file you can also edit it via the
   `git config` command (e.g. to set a project description do: `git config -f
   project.config project.description "My project description"`).
4. Push the newly created commit, either to update the `refs/meta/config`
   branch directly without code-review (e.g. `git push origin
   HEAD:refs/meta/config`), or for review (e.g. `git push origin
   HEAD:refs/for/refs/meta/config`).
--
+
[NOTE]
Updates to access right may require changes in the link:#file-groups[groups]
file. In contrast to making access rights changes through the `Access` screen
the `groups` file is not automatically updated.

[[update-through-rest-api]]
* Through the Gerrit REST API:
+
Gerrit offers several REST endpoints to modify the project configuration:
+
** link:rest-api-projects.html#set-config[Set Config] REST endpoint:
   Allows to edit the project description and change repository options.
** link:rest-api-projects.html#set-access[Add, Update and Delete Access Rights
   for Project] REST endpoint:
   Allows to edit the access rights of the project.
** link:rest-api-projects.html#create-access-change[Create Access Rights Change
   for review] REST endpoint:
   Allows to create a change with access right modifications that can be
   reviewed and submitted by a project owner.

[[required-permissions]]
== Required permissions

Depending on how the project configuration is changed different access rights
are required:

* Direct updates through the web UI (link:#update-through-general-screen[
  updates through the `General` screen] and link:#update-through-access-screen[
  direct updates of access rights through the `Access` screen via the `SAVE`
  button]) and direct updates through the REST API (via the
  link:rest-api-projects.html#set-config[Set Config] REST endpoint or the
  link:rest-api-projects.html#set-access[Add, Update and Delete Access Rights
  for Project] REST endpoint) require the user to be a project owner (have the
  link:access-control.html#category_owner[Owner] access right assigned on
  `refs/*` or have the link:access-control.html#capability_administrateServer[
  Administrate Server] global capability assigned on the `All-Projects` root
  project).
* link:#update-by-git-push[Direct updates through `git push`] require the
  user to have the link:access-control.html#category_push[Push] access right
  assigned on `refs/meta/config` and be a project owner (have the
  link:access-control.html#category_owner[Owner] access right assigned on
  `refs/*` or have the link:access-control.html#capability_administrateServer[
  Administrate Server] global capability assigned on the `All-Projects` root
  project).
* Creating changes for updates through the web UI
  (link:#update-through-access-screen[proposing updates of access rights
  through the `Access` screen via the `SAVE FOR REVIEW` button] and
  link:#update-via-online-editing[proposing updates via the `EDIT REPO CONFIG`
  command]), creating changes for updates through the REST API (via the
  link:rest-api-projects.html#create-access-change[Create Access Rights Change
  for review] REST endpoint) and link:#update-by-git-push[pushing changes for
  review] require the user to be able to see the `refs/meta/config` branch
  (have the link:access-control.html#category_read[Read] access right assigned
  on `refs/meta/config`) and be allowed to create changes for it (have the
  link:access-control.html#category_push[Push] access right assigned on
  `refs/for/refs/meta/config` or be a project owner or be an administrator).

[[comments]]
=== Comments in project configuration files

In principle it's possible to have comments in the project configuration files
(lines starting with '#'), however if any Gerrit API is used that lead to
modifications in the configuration files the comments may be dropped. This is
because when Gerrit parses the configuration files and writes them back with
updates, comments are not preserved.

[TIP]
When updating the project configuration use the commit message to record the
reason for the settings so that this information is preserved in the git
history. For example, this allows using `git blame` to inspect why
configuration values have been set.

[[inheritance]]
== Inheritance

Projects in Gerrit are organized hierarchically in a tree with the
`All-Projects` project as the root project. The parent project is defined in
the link:#access.inheritFrom[access section] of the `project.config` file.

Projects inherit access rights and options from their parent project, but not
all options are inheritable. See the description of the options in the
link:#file-project_config[project.config] file to learn whether they are
inherited or not.

Options with boolean values support a special `INHERIT` value to make them
inherit the value that is set in the parent project.

Some settings can be enforced for child projects (or if set on the
`All-Projects` root project for all projects), e.g. access right restrictions
via link:access-control#block[BLOCK rules] or
link:config-submit-requirements.html#submit_requirement_can_override_in_child_projects[
non-overridable] submit requirements.

[NOTE]
Project owners can be allowed to change the parent of projects that they own
(see config-gerrit.html#receive.allowProjectOwnersToChangeParent[
receive.allowProjectOwnersToChangeParent] setting which is `false` by default).
In this case project owners may escape the settings that are enforced by their
parent project by choosing a different parent project.

[[file-project_config]]
== The file `project.config`

The `project.config` file contains the link to the parent project, the project
description, access rights, link:config-labels.html[label definitions],
link:config-submit-requirements.html[submit requirements] and options to
control project-specific behavior.

The format in this file corresponds to the Git config file format.

[TIP]
--
Since the format of the `project.config` file adheres to the Git config file
format, utilizing the `git config` command when modifying the file is
recommended. This way you can avoid breaking the format of the file
accidentally.

Here is an example of a `git config` command that updates the project
description:

----
$ git config -f project.config project.description "Foo Bar"
----
--

This is an example of a `project.config` file:

----
[project]
  description = Collection of scripts for setting up foo bar.
[access "refs/*"]
  read = group Registered Users
[access "refs/heads/*"]
  label-Code-Review = -2..+2 group Maintainers
  label-Code-Review = -1..+1 group Registered Users
  label-Your-Label = -1..+1 group Maintainers
[receive]
  requireChangeId = true
[label "Your-Label"]
  function = NoOp
  value = -1 Your -1 Description
  value =  0 Your No score Description
  value = +1 Your +1 Description
[submit-requirement "Your-Label"]
  description = At least one maximum vote for label 'Your-Label' is required
  applicableIf = -branch:refs/meta/config
  submittableIf = label:Your-Label=MAX AND -label:Your-Label=MIN
----

The sections that can appear in the `project.config` file are explained below.

[[access-section]]
=== Access section

[[access.inheritFrom]]access.inheritFrom::
+
Name of the parent project from which access rights are inherited.
+
If not set, access rights are inherited from the `All-Projects` root project.

[[access-subsection]]
==== Access subsection

`access` subsections define access rules for a ref or a ref namespace. The ref
or ref namespace is specified as the subsection name and can be a concrete ref
(e.g. `refs/heads/master`), a ref pattern (last path segment is '\*', e.g.
`refs/heads/*`) or a regular expression (must start with '^', e.g.
`^refs/heads/rel-.*`).

[NOTE]
For ref patterns '\*' can only appear as the last path segment. If a '*' is
required in any other place the ref namespace must be specified as a regular
expression (must start with '^', '\*' must follow what's being matched, e.g.
".*" to match any string).

[NOTE]
Only one access subsection per ref and per ref namespace is allowed.

The `access` subsections contain access rules that apply to the ref or ref
namespace of the `access` subsections. The format of the access rules is: +
`<accessCategoryId> = (block|deny)? <range>? group <group-name>`

* `<accessCategoryId>`: ID of the link:access-control.html#access_categories[
  access category] for which the access rule should be defined. The ID of the
  access category is the name of the access category in lowerCamelCase (e.g.
  `createTag`), except for label permissions where it is `label-<label-Name>`
  (e.g. `label-Code-Review`).
* `(block|deny)?`: `block` defines a link:access-control.html#block-rule[BLOCK]
  rule, `deny` defines a link:access-control.html#deny-rule[DENY] rule, if
  neither `block` or `deny` is specified an link:access-control.html#allow-rule[
  ALLOW] rule is defined.
* `<range>?`: Only set for label permission. The voting range in the format
  `<min-vote>..<max-vote>` (e.g. `-1..+1`).
* `group <group-name>`: The (local) name of the group to which the access rule
  should apply (e.g. `group Foo Bar`). The (local) group name must exist in the
  link:#file-groups[groups] file, so that Gerrit can resolve it to the group
  UUID.

To make access rules link:access-control.html#exclusive[exclusive] they need to
be included into the value of the `exclusiveGroupPermissions` key: +
`exclusiveGroupPermissions = <space-separated-list-of-access-category-ids>`

.Example access subsections
----
  [access "refs/heads/*"]
    create = group Administrators
    delete = group Administrators
    deleteChanges = group Administrators
    label-Code-Review = -2..+2 group Maintainers
    label-Code-Review = -1..+1 group Registered Users
    label-Verified = -1..+1 group Registered Users
    push = block Registered Users
    submit = group Maintainers
    exclusiveGroupPermissions = deleteChanges submit
  [access "^refs/tags/rel-.*"]
    createTag = group Maintainers
    createSignedTag = group Maintainers
----

[[branchOrder-section]]
=== branchOrder section

Defines a branch ordering which is used for backporting of changes.
Backporting will be offered for a change (in the Gerrit UI) for all
more stable branches where the change can merge cleanly.

[[branchOrder.branch]]branchOrder.branch::

A branch name, typically multiple values will be defined. The order of branch
names in this section defines the branch order. The topmost is considered to be
the least stable branch (typically the master branch) and the last one the
most stable (typically the last maintained release branch).

.Example:
----
[branchOrder]
  branch = master
  branch = stable-2.9
  branch = stable-2.8
  branch = stable-2.7
----

The `branchOrder` section is inheritable. This is useful when multiple or all
projects follow the same branch rules. A `branchOrder` section in a child
project completely overrides any `branchOrder` section from a parent i.e. there
is no merging of `branchOrder` sections. A present but empty `branchOrder`
section removes all inherited branch order.

Branches not listed in this section will not be included in the mergeability
check. If the `branchOrder` section is not defined then the mergeability of a
change into other branches will not be computed.

[[capability-section]]
=== Capability section

The `capability` section only appears once, and only in the `project.config`
file of the `All-Projects` root project. It controls Gerrit administration
capabilities that are configured on a global level.

.Example:
----
[capability]
  administrateServer = group Administrators
----

[NOTE]
The (local) group names for which capabilities are assigned must exist in the
link:#file-groups[groups] file, so that Gerrit can resolve them to their group
UUID.

Please refer to the
link:access-control.html#global_capabilities[Global Capabilities]
documentation for a full list of available capabilities.

[[change-section]]
=== Change section

The change section includes configuration for project-specific change settings:

[[change.privateByDefault]]change.privateByDefault::
+
Controls whether all new changes in the project are set as private by default.
+
Note that a new change will be public if the `is_private` field in
link:rest-api-changes.html#change-input[ChangeInput] is set to `false` explicitly
when calling the link:rest-api-changes.html#create-change[CreateChange] REST API
or the `remove-private` link:user-upload.html#private[PushOption] is used during
the Git push.
+
Default is `INHERIT`, which means that this property is inherited from
the parent project.

[[change.workInProgressByDefault]]change.workInProgressByDefault::
+
Controls whether all new changes in the project are set as WIP by default.
+
Note that a new change will be ready if the `workInProgress` field in
link:rest-api-changes.html#change-input[ChangeInput] is set to `false` explicitly
when calling the link:rest-api-changes.html#create-change[CreateChange] REST API
or the `ready` link:user-upload.html#wip[PushOption] is used during
the Git push.
+
Default is `INHERIT`, which means that this property is inherited from
the parent project.

[[commentlink-section]]
=== Commentlink section

Optionally a `commentlink` section can be added to define project-specific
comment links. The `commentlink` section has the same format as the
link:config-gerrit.html#commentlink[commentlink] section in `gerrit.config`
which is used to define global comment links.

[[label-section]]
=== Label section

Please refer to link:config-labels.html#label_custom[Custom Labels] documentation.

[[mimetype-section]]
=== MIME Types section

The +mimetype+ section may be configured to force the web code
reviewer to return certain MIME types by file path. MIME types
may be used to activate syntax highlighting.

----
[mimetype "text/x-c"]
  path = *.pkt
[mimetype "text/x-java"]
  path = api/current.txt
----

[[project-section]]
=== Project section

The project section includes configuration of project settings.

These are the keys:

[[description]]description::
+
A description for the project.

[[state]]state::
+
This setting defines the state of the project. A project can have the
following states:

- `Active`:
+
The project is active and users can see and modify the project according
to their access rights on the project.

- `Read Only`:
+
The project is read only and all modifying operations on it are
disabled. E.g. this means that pushing to this project fails for all
users even if they have push permissions assigned on it.
+
Setting a project to this state is an easy way to temporary close a
project, as you can keep all write access rights in place and they will
become active again as soon as the project state is set back to
`Active`.
+
This state also makes sense if a project was moved to another location.
In this case all new development should happen in the new project and
you want to prevent that somebody accidentally works on the old
project, while keeping the old project around for old references.

- `Hidden`:
+
The project is hidden; It will not appear in any searches and is only visible
to project owners by going directly to the repository admin page. Other users
are not able to see the project even if they have read permissions granted on
the project.


[[receive-section]]
=== Receive section

The receive section includes configuration of project-specific
receive settings:

[[receive.requireContributorAgreement]]receive.requireContributorAgreement::
+
Controls whether or not a user must complete a contributor agreement before
they can upload changes. Default is `INHERIT`. If `All-Projects` enables this
option then the dependent project must set it to false if users are not
required to sign a contributor agreement prior to submitting changes for that
specific project. To use that feature the global option in `gerrit.config`
must be enabled:
link:config-gerrit.html#auth.contributorAgreements[auth.contributorAgreements].

[[receive.requireSignedOffBy]]receive.requireSignedOffBy::
+
Sign-off can be a requirement for some projects (for example Linux kernel uses
it). Sign-off is a line at the end of the commit message which certifies who
is the author of the commit. Its main purpose is to improve tracking of who
did  what, especially with patches. Default is `INHERIT`, which means that this
property is inherited from the parent project.

[[receive.requireChangeId]]receive.requireChangeId::
+
The `Require Change-Id in commit message` option defines whether a
link:user-changeid.html[Change-Id] in the commit message is required
for pushing a commit for review. If this option is set, trying to push
a commit for review that doesn't contain a Change-Id in the commit
message fails with link:error-missing-changeid.html[missing Change-Id
in commit message footer].
+
It is recommended to set this option and use a
link:user-changeid.html#create[commit-msg hook] (or other client side
tooling like EGit) to automatically generate Change-Id's for new
commits. This way the Change-Id is automatically in place when changes
are reworked or rebased and uploading new patch sets gets easy.
+
If this option is not set, commits can be uploaded without a Change-Id,
but then users have to remember to copy the assigned Change-Id from the
change screen and insert it manually into the commit message when they
want to upload a second patch set.
+
Default is `INHERIT`, which means that this property is inherited from
the parent project. The global default for new hosts is `true`
+
This option is deprecated and future releases will behave as if this
is always `true`.

[[receive.maxObjectSizeLimit]]receive.maxObjectSizeLimit::
+
Maximum allowed Git object size that receive-pack will accept. If an object
is larger than the given size the pack-parsing will abort and the push
operation will fail. If set to zero then there is no limit.
+
Project owners can use this setting to prevent developers from pushing
objects which are too large to Gerrit. This setting can also be set in
`gerrit.config` globally (link:config-gerrit.html#receive.maxObjectSizeLimit[
receive.maxObjectSizeLimit]).
+
The project specific setting in `project.config` may not set a value higher
than the global limit (if configured). In other words, it is only honored when
it further reduces the global limit.
+
When link:config-gerrit.html#receive.inheritProjectMaxObjectSizeLimit[
`receive.inheritProjectmaxObjectSizeLimit`] is enabled in the global config,
the value is inherited from the parent project. Otherwise, it is not inherited
and must be explicitly set per project.
+
Default is zero.
+
Common unit suffixes of k, m, or g are supported.

[[receive.checkReceivedObjects]]receive.checkReceivedObjects::
+
Controls whether or not the JGit functionality for checking received objects
is enabled.
+
By default Gerrit checks the validity of git objects. Setting this variable to
false should not be used unless a project with history containing invalid
objects needs to be pushed into a Gerrit repository.
+
This functionality is provided as some other git implementations have allowed
bad history to be written into git repositories. If these repositories need pushing
up to Gerrit then the JGit checks need to be disabled.
+
The default value for this is true, false disables the checks.

[[receive.enableSignedPush]]receive.enableSignedPush::
+
Controls whether server-side signed push validation is enabled on the
project. Only has an effect if signed push validation is enabled on the
server; see the link:config-gerrit.html#receive.enableSignedPush[global
configuration] for details.
+
Default is `INHERIT`, which means that this property is inherited from
the parent project.

[[receive.requireSignedPush]]receive.requireSignedPush::
+
Controls whether server-side signed push validation is required on the
project. Only has an effect if signed push validation is enabled on the
server, and link:#receive.enableSignedPush[`receive.enableSignedPush`] is
set on the project. See the
link:config-gerrit.html#receive.enableSignedPush[global configuration]
for details.
+
Default is `INHERIT`, which means that this property is inherited from
the parent project.

[[receive.rejectImplicitMerges]]receive.rejectImplicitMerges::
+
Controls whether a check for implicit merges will be performed when changes are
pushed for review. An implicit merge is a case where merging an open change
would implicitly merge another branch into the target branch. Typically, this
happens when a change is done on master and, by mistake, pushed to a stable branch
for review. When submitting such change, master would be implicitly merged into
stable without anyone noticing that. When this option is set to 'true' Gerrit
will reject the push if an implicit merge is detected.
+
This check is only done for non-merge commits, merge commits are not subject of
the implicit merge check.
+
Default is `INHERIT`, which means that this property is inherited from
the parent project.

[[receive.createNewChangeForAllNotInTarget]]receive.createNewChangeForAllNotInTarget::
+
This option provides a convenience for selecting
link:user-upload.html#base[the merge base] by setting it automatically
to the target branch's tip so you can create new changes for all
commits not in the target branch.
+
This option is disabled if the tip of the push is a merge commit.
+
This option also only works if there are no merge commits in the
commit chain, in such cases it fails warning the user that such
pushes can only be performed by manually specifying
link:user-upload.html#base[bases]
+
This option is useful if you want to push a change to your personal
branch first and for review to another branch for example. Or in cases
where a commit is already merged into a branch and you want to create
a new open change for that commit on another branch.

[[reviewer-section]]
=== reviewer section

Defines config options to adjust a project's reviewer workflow such as enabling
reviewers and CCs by email.

[[reviewer.enableByEmail]]reviewer.enableByEmail::
+
A boolean indicating if reviewers and CCs that do not currently have a Gerrit
account can be added to a change by providing their email address.
+
This setting only takes effect for changes that are readable by anonymous users.
+
Default is `INHERIT`, which means that this property is inherited from
the parent project. If the property is not set in any parent project, the
default value is `FALSE`.

[[reviewer.skipAddingAuthorAndCommitterAsReviewers]]reviewer.skipAddingAuthorAndCommitterAsReviewers::
+
Whether to skip adding the Git commit author and committer as reviewers for
a new change.
+
Default is `INHERIT`, which means that this property is inherited from
the parent project. If the property is not set in any parent project, the
default value is `FALSE`.

[[submit-section]]
=== Submit section

The submit section includes configuration of project-specific
submit settings:

[[content_merge]]

[[submit.mergeContent]]submit.mergeContent::
+
Defines whether Gerrit will try to do a content merge when a path conflict
occurs while submitting a change.
+
A path conflict occurs when the same file has been changed on both sides of a
merge, e.g. when the same file has been touched in a change and concurrently in
the target branch.
+
Doing a content merge means that Gerrit attempts to merge the conflicting file
contents from both sides of the merge. This is successful if the touched lines
(plus some surrounding context lines) do not overlap (i.e. both sides touch
distinct lines).
+
NOTE: The content merge setting is not relevant when
link:#fast_forward_only[fast forward only] is configured as the
link:#submit.action[submit action] because in this case Gerrit will never
perform a merge, rebase or cherry-pick on submit.
+
If content merges are disabled, the submit button in the Gerrit web UI is
disabled, if any path conflict would occur on submitting the change. Users then
need to rebase the change manually to resolve the path conflict and then get
the change re-approved so that they can submit it.
+
NOTE: If only distinct lines have been touched on both sides, rebasing the
change from the Gerrit UI is sufficient to resolve the path conflict, since the
rebase action always does the rebase with content merge enabled.
+
The advantage of enabling content merges on submit is that it makes it less
likely that change submissions are rejected due to conflicts. Each change
submission that goes through with content merge, but would be rejected
otherwise, saves the user from needing to do extra work to get the change
submitted (rebase the change, get it re-approved and then submit it again).
+
On the other hand, disabling content merges decreases the chance of breaking
branches by submitting content merges of incompatible modifications in the same
file, e.g. a function is removed on one side and a new usage of that function
is added on the other side. Note, that the chance of breaking a branch by
incompatible modifications is only reduced, but not eliminated, e.g. even with
content merges disabled it's possible that a function is removed in one file
and a new usage of that function is added in another file.
+
The huge drawback of disabling content merge is that users need to do extra
work when a change isn't submittable due to a path conflict which could be
avoided if content merge was enabled (see above). In addition to this, it also
confuses and frustrates users if a change submission is rejected by Gerrit due
to a path conflict, but then when they rebase the change manually they do not
see any conflict (because manual rebases are always done with content merge
enabled).
+
In general, the stability gain of disabling content merges is not worth the
overhead and confusion that this adds for users, which is why disabling content
merges is highly discouraged.
+
Valid values are `true`, `false`, or `INHERIT`.
+
The default is `INHERIT`.
+
NOTE: Project owners can also set this option in the Gerrit UI:
`Browse` > `Repositories` > my/repository > `Allow content merges`.

[[submit.action]]submit.action::
+
Defines the submit action aka submit type aka submit strategy that Gerrit
should use to integrate changes into the target branch when they are submitted.
+
In general, submitting a change only merges the change if all its dependencies
are also submitted. The only exception is the `cherry pick` submit action which
ignores dependencies and hence is not recommended to be used (see
link:#cherry_pick[below]).
+
[[submit-type]]
--
The following submit actions are supported:

[[merge_if_necessary]]
* 'merge if necessary':
+
With this action, when a change is being submitted, Gerrit fast-forwards the
target branch if possible, and otherwise creates a merge commit automatically.
+
A fast-forward is possible if the commit that represents the current patch set
of the change has the current head of the target branch in its parent lineage.
+
If a fast-forward is not possible, Gerrit automatically creates a merge commit
that merges the current patch set of the change into the target branch and then
the target branch is fast-forwarded to the merge commit.
+
The behavior of this submit action is identical with the classical `git merge`
behavior, or
link:https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---ff[git
merge --ff].
+
With this submit action the commits that have been reviewed and approved are
retained in the git history of the target branch. This means, by looking at the
history of the target branch, you can see for all commits when they were
originally committed and on which parent commit they were originally based.

[[always_merge]]
[[merge_always]]
* 'merge always':
+
With this action, when a change is being submitted, Gerrit always creates a
merge commit, even if a fast-forward is possible.
+
This is identical to the behavior of
link:https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---no-ff[git merge --no-ff].
+
With this submit action the commits that have been reviewed and approved are
retained in the git history of the target branch. This means, by looking at the
history of the target branch, you can see for all commits when they were
originally committed and on which parent commit they were originally based. In
addition, from the merge commits you can see when the changes were submitted
and it's possible to follow submissions with `git log --first-parent`.

[[rebase_if_necessary]]
* 'rebase if necessary':
+
With this action, when a change is being submitted, Gerrit fast-forwards the
target branch if possible, and otherwise does a rebase automatically.
+
A fast-forward is possible if the commit that represents the current patch set
of the change has the current head of the target branch in its parent lineage.
+
If a fast-forward is not possible, Gerrit automatically rebases the current
patch set of the change on top of the current head of the target branch and
then the target branch is fast-forwarded to the rebased commit.
+
With this submit action, when a rebase is performed, the original commits that
have been reviewed and approved do not become part of the target branch's
history. This means the information on when the original commits were committed
and on which parent they were based is not retained in the branch history.
+
Using this submit action results in a linear history of the target branch,
unless merge commits are being submitted. For some people this is an advantage
since they find the linear history easier to read.
+
NOTE: Rebasing merge commits is done by rebasing their first parent commit,
i.e. the first parent is updated to the new base while the second parent stays
intact.

[[rebase_always]]
* 'rebase always':
+
With this action, when a change is being submitted, Gerrit always does a
rebase, even if a fast-forward is possible.
+
With this submit action, the original commits that have been reviewed and
approved do not become part of the target branch's history. This means the
information on when the original commits were committed and on which parent
they were based is not retained in the branch history.
+
Using this submit action results in a linear history of the target branch,
unless merge commits are being submitted. For some people this is an advantage
since they find the linear history easier to read.
+
NOTE: Rebasing merge commits is done by rebasing their first parent commit,
i.e. the first parent is updated to the new base while the second parent stays
intact.
+
When rebasing the patchset, Gerrit automatically appends onto the end of the
commit message a short summary of the change's approvals, and a URL link back
to the change in the web UI (see link:#submit-footers[below]).
+
The footers that are added are exactly the same footers that are also added by
the link:#cherry_pick[cherry pick] action. Thus, the `rebase always` action can
be considered similar to the `cherry pick` action, but with the important
distinction that `rebase always` does not ignore dependencies, which is why
using the `rebase always` action should be preferred over the `cherry pick`
submit action.

[[fast_forward_only]]
* 'fast forward only' (usage generally not recommended):
+
With this action a change can only be submitted if at submit time the target
branch can be fast-forwarded to the commit that represents the current patch
set of the change. This means in order for a change to be submittable its
current patch set must have the current head of the target branch in its parent
lineage.
+
The advantage of using this action is that the target branch is always updated
to the exact commit that has been reviewed and approved. In particular, if CI
verification is configured, this means that the CI verified the exact commit to
which the target branch is being fast-forwarded on submit (assuming no approval
copying is configured for CI votes).
+
The huge drawback of using this action is that whenever one change is submitted
all other open changes for the same branch, that are not successors of the
submitted change, become non-submittable, since the target branch can no longer
be fast-forwarded to their current patch sets. Making these changes submittable
again requires rebasing and re-approving/re-verifying them. For most projects
this causes an unreasonable amount of overhead that doesn't justify the
stability gain by verifying exact commits so that using this submit action is
generally discouraged. Using this action should only be considered for projects
that have a low frequency of changes and that have special requirements to
never break any target branch.
+
NOTE: With this submit action Gerrit does not create merge commits on
submitting a change, but merge commits that are created on the client, prior to
uploading to Gerrit for review, may still be submitted.

[[cherry_pick]]
* 'cherry pick' (usage not recommended, use link:#rebase_always[rebase always]
instead):
+
With this submit action Gerrit always performs a cherry pick of the current
patch set when a change is submitted. This ignores the parent lineage and
instead creates a brand new commit on top of the current head of the target
branch. The submitter becomes the committer of the new commit and the original
commit author is retained.
+
Ignoring change dependencies on submit is often confusing for users. For users
that stack changes on top of each other, it's unexpected that these
dependencies are ignored on submit. Ignoring dependencies also means that
submitters need to submit the changes individually in the correct order.
Otherwise it's likely that submissions fail due to conflicts or that the
target branch gets broken (because it contains the submitted change, but not
its predecessors which may be required for the submitted change to work
correctly).
+
If link:config-gerrit.html#change.submitWholeTopic[`change.submitWholeTopic`]
is enabled changes that have the same topic are submitted together, the same as
with all other submit actions. This means by setting the same topic on all
dependent changes it's possible to submit a stack of changes together and
overcome the limitation that change dependencies are ignored.
+
When cherry picking the patchset, Gerrit automatically appends onto the end of
the commit message a short summary of the change's approvals, and a URL link
back to the change in the web UI (see link:#submit-footers[below]).
+
Using this submit action is not recommended because it ignores change
dependencies, instead link:#rebase_always[rebase always] should be used which
behaves the same way except that it respects change dependencies (in particular
`rebase always` adds the same kind of footers to the merged commit as
`cherry pick`).

--
+
[[submit_type_inherit]]
In addition the submit action can be set to `Inherit`, which means that the
value that is configured in the parent project applies. For new projects
`Inherit` is the default, unless the default is overridden by the global
link:config-gerrit.html#repository.name.defaultSubmitType[defaultSubmitType]
configuration. Configuring `Inherit` for the `All-Projects` root project is
equivalent to configuring link:#merge_if_necessary[merge if necessary].
+
If `submit.action` is not set, the default is 'merge if necessary'.
+
NOTE: The different submit actions are also described in the
link:https://docs.google.com/presentation/d/1C73UgQdzZDw0gzpaEqIC6SPujZJhqamyqO1XOHjH-uk/edit#slide=id.g4d6c16487b_1_800[Gerrit - Concepts and Workflows]
presentation, where their behavior is visualized by git commit graphs.
+
NOTE: If Gerrit performs a merge, rebase or cherry-pick as part of the
change submission (true for all submit actions, except for
link:#fast_forward_only[fast forward only]), it is controlled by the
link:#submit.mergeContent[mergeContent] setting whether a content merge is
performed when there is a path conflict.
+
NOTE: If Gerrit performs a merge, rebase or cherry-pick as part of the
change submission (true for all submit actions, except for
link:#fast_forward_only[fast forward only]), it can be that trying to submit
a change would fail due to Git conflicts (if the same lines were modified
concurrently, or if link:#submit.mergeContent[mergeContent] is disabled also if
the same files were modified concurrently). In this case the submit button in
the Gerrit web UI is disabled and a tooltip on the disabled submit button
informs about the change being non-mergeable.
+
[[submit-footers]]
--
NOTE: If Gerrit performs a rebase or cherry-pick as part of the change
submission (true for link:#rebase_if_necessary[rebase if necessary],
link:#rebase_always[rebase always] and link:#cherry_pick[cherry pick]) Gerrit
inserts additional footers into the commit message of the newly created
commit: +
 +
* `Change-Id: <change-id>` (only if this footer is not already present, see
  link:user-changeid.html[Change-Id]) +
* `Reviewed-on: <change-url>` (links to the change in Gerrit where this commit
  was reviewed) +
* `Reviewed-by: <reviewer>` (once for every reviewer with a positive
  `Code-Review` vote) +
* `Tested-by: <reviewer>` (once for every reviewer with a positive `Verified`
  vote) +
* `<label-name>: <reviewer>` (once for every reviewer with a positive vote on
  any other label) +
 +
In addition, plugins that implement a
link:dev-plugins.html#change-message-modifier[Change Message Modifier] may add
additional custom footers.
--
+
NOTE: For the value of `submit.action` in `project.config` use the exact
spelling as given above, e.g. 'merge if necessary' (without the single quotes,
but with the spaces).
+
NOTE: Project owners can also set the submit action in the Gerrit UI:
`Browse` > `Repositories` > my/repository > `Submit type`

[[submit.matchAuthorToCommitterDate]]submit.matchAuthorToCommitterDate::
+
Defines whether the author date will be changed to match the submitter date upon submit, so that
git log shows when the change was submitted instead of when the author last committed. Valid
values are 'true', 'false', or 'INHERIT'. The default is 'INHERIT'. This option only takes effect
in submit strategies which already modify the commit, i.e. Cherry Pick, Rebase Always, and
(when rebase is necessary) Rebase If Necessary.

[[submit.rejectEmptyCommit]]submit.rejectEmptyCommit::
+
Defines whether empty commits should be rejected when a change is merged. When using
link:#submit.action[submit action] Cherry Pick, Rebase If Necessary or Rebase Always changes may
become empty upon submit, since the rebase|cherry-pick can lead to an empty commit. If this option
is set to 'true' the merge would fail in such a case. An empty commit is still allowed as the
initial commit on a branch.

[[submit-requirement-section]]
=== Submit Requirement section

Please refer to link:config-submit-requirements.html[Configuring Submit
Requirements] documentation.

[[file-groups]]
== The file `groups`

The `groups` file resolves group names that are mentioned in
link:#access-subsection[access subsections] of the link:#file-project_config[
project.config] file to group UUIDs.

In the access subsections access rights are assigned to group names. These
group names are local to the project configuration and do not need to match
with the actual group names. To enable Gerrit to resolve the local group names
they must be mapped to group UUIDs in the `groups` file.

The access sections use local group names, rather than requiring the actual
group names, to allow renaming groups in Gerrit without having to rewrite every
`project.config` file using the group.

The content of the `groups` file is a simple table of group UUID to group name,
separated by a tab.

This is how the default `groups` file for `All-Projects` project looks like:

----
# UUID                                         Group Name
#
3d6da7dc4e99e6f6e5b5196e21b6f504fc530bba       Administrators
global:Anonymous-Users                         Anonymous Users
global:Change-Owner                            Change Owner
global:Project-Owners                          Project Owners
global:Registered-Users                        Registered Users
----

Since the `groups` file has a custom format it can't be edited using the
`git config` command.

Whenever access rights in the `project.config` file are assigned to new groups
mapping entries for the new groups must be added to the `groups` file. The
modifications to the `groups` file must be included in the same commit that
updates the `project.config` file. Pushing updates to `project.config` files
that refer to groups not listed in the `groups` file are rejected by Gerrit.

When link:#update-through-access-screen[editing access rights through the web
UI] the `groups` file is automatically updated by Gerrit.

The UUID of a group can be found on the group screen (`BROWSE` > `Groups` >
`<group-name>` ). Alternatively the group can be looked up via the
link:rest-api-groups.html#get-group[Get Group] REST endpoint (note that the
`group-id` in the URL can be the group name). The group UUID is contained as
`id` field in the return link:rest-api-groups.html#group-info[GroupInfo] JSON.

[[file-rules_pl]]
== The file `rules.pl`

The `rules.pl` file allows to replace or amend the default Prolog rules that
control what conditions need to be fulfilled for a change to be submittable.
This file should be interpretable by the 'Prolog Cafe' interpreter.

You can read more about prolog rules on the link:prolog-cookbook.html[Prolog
cookbook] page.

[NOTE]
Prolog rules are deprecated and have been replaced by
link:config-submit-requirements.html[submit requirements].

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
