blob: 71af331341ec180d6621fdeddf109c114c02ed9e [file] [log] [blame]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001= Gerrit Code Review - Project Configuration File Format
Fredrik Luthandera3cf3542012-07-04 16:55:35 -07002
3This page explains the storage format of Gerrit's project configuration
4and access control models.
5
6The web UI access control panel is a front end for human-readable
7configuration files under the +refs/meta/config+ namespace in the
8affected project. Direct manipulation of these files is mainly
9relevant in an automation scenario of the access controls.
10
11
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080012== The +refs/meta/config+ namespace
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070013
14The namespace contains three different files that play different
15roles in the permission model. With read permission to that reference,
16it is possible to fetch the +refs/meta/config+ reference to a local
17repository. A nice side effect is that you can also upload changes
18to project permissions and review them just like with regular code
19changes. The preview changes option is also provided on the UI. Please note
20that you will have to configure push rights for the +refs/meta/config+ name
21space if you'd like to use the possibility to automate permission updates.
22
Björn Pedersend169b6d2016-08-31 17:56:45 +020023== Property inheritance
24
25If a property is set to INHERIT, then the value from the parent project is
26used. If the property is not set in any parent project, the default value is
27FALSE.
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070028
29[[file-project_config]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080030== The file +project.config+
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070031
32The +project.config+ file contains the link between groups and their
33permitted actions on reference patterns in this project and any projects
34that inherit its permissions.
35
36The format in this file corresponds to the Git config file format, so
37if you want to automate your permissions it is a good idea to use the
38+git config+ command when writing to the file. This way you know you
39don't accidentally break the format of the file.
40
41Here follows a +git config+ command example:
42
43----
44$ git config -f project.config project.description "Rights inherited by all other projects"
45----
46
47Below you will find an example of the +project.config+ file format:
48
49----
50[project]
51 description = Rights inherited by all other projects
52[access "refs/*"]
53 read = group Administrators
David Myllykangasb3ccec62015-01-21 15:41:13 +010054[access "refs/heads/*"]
55 label-Your-Label-Here = -1..+1 group Administrators
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070056[capability]
57 administrateServer = group Administrators
58[receive]
59 requireContributorAgreement = false
David Myllykangasb3ccec62015-01-21 15:41:13 +010060[label "Your-Label-Here"]
61 function = MaxWithBlock
62 value = -1 Your -1 Description
63 value = 0 Your No score Description
64 value = +1 Your +1 Description
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070065----
66
67As you can see, there are several sections.
68
69The link:#project-section[+project+ section] appears once per project.
70
71The link:#access-section[+access+ section] appears once per reference pattern,
Jonathan Nieder5758f182015-03-30 11:28:55 -070072such as `+refs/*+` or `+refs/heads/*+`. Only one access section per pattern is
David Pursehouseacb5c1d2016-08-29 10:29:57 +090073allowed.
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070074
75The link:#receive-section[+receive+ section] appears once per project.
76
77The link:#submit-section[+submit+ section] appears once per project.
78
79The link:#capability-section[+capability+] section only appears once, and only
80in the +All-Projects+ repository. It controls core features that are configured
David Pursehouseacb5c1d2016-08-29 10:29:57 +090081on a global level.
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070082
David Myllykangasb3ccec62015-01-21 15:41:13 +010083The link:#label-section[+label+] section can appear multiple times. You can
84also redefine the text and behavior of the built in label types `Code-Review`
85and `Verified`.
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070086
Edwin Kempin424f96c62016-10-13 09:00:55 +020087Optionally a +commentlink+ section can be added to define project-specific
88comment links. The +commentlink+ section has the same format as the
89link:config-gerrit.html#commentlink[+commentlink+ section in gerrit.config]
90which is used to define global comment links.
91
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070092[[project-section]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080093=== Project section
Fredrik Luthandera3cf3542012-07-04 16:55:35 -070094
95The project section includes configuration of project settings.
96
97These are the keys:
98
Changcheng Xiao5ecb6422019-01-15 17:17:04 +010099[[description]]description::
100+
101A description for the project.
102
Edwin Kempin1fd08542019-06-26 10:20:29 +0200103[[state]]state::
Changcheng Xiao5ecb6422019-01-15 17:17:04 +0100104+
105This setting defines the state of the project. A project can have the
106following states:
107
108- `Active`:
109+
110The project is active and users can see and modify the project according
111to their access rights on the project.
112
113- `Read Only`:
114+
115The project is read only and all modifying operations on it are
116disabled. E.g. this means that pushing to this project fails for all
117users even if they have push permissions assigned on it.
118+
119Setting a project to this state is an easy way to temporary close a
120project, as you can keep all write access rights in place and they will
121become active again as soon as the project state is set back to
122`Active`.
123+
124This state also makes sense if a project was moved to another location.
125In this case all new development should happen in the new project and
126you want to prevent that somebody accidentally works on the old
127project, while keeping the old project around for old references.
128
129- `Hidden`:
130+
131The project is hidden and only visible to project owners. Other users
132are not able to see the project even if they have read permissions
133granted on the project.
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700134
135
136[[receive-section]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800137=== Receive section
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700138
139The receive section includes configuration of project-specific
140receive settings:
141
142[[receive.requireContributorAgreement]]receive.requireContributorAgreement::
143+
144Controls whether or not a user must complete a contributor agreement before
145they can upload changes. Default is `INHERIT`. If `All-Project` enables this
146option then the dependent project must set it to false if users are not
147required to sign a contributor agreement prior to submitting changes for that
148specific project. To use that feature the global option in `gerrit.config`
149must be enabled:
150link:config-gerrit.html#auth.contributorAgreements[auth.contributorAgreements].
151
152[[receive.requireSignedOffBy]]receive.requireSignedOffBy::
153+
154Sign-off can be a requirement for some projects (for example Linux kernel uses
155it). Sign-off is a line at the end of the commit message which certifies who
156is the author of the commit. Its main purpose is to improve tracking of who
157did what, especially with patches. Default is `INHERIT`, which means that this
158property is inherited from the parent project.
159
Han-Wen Nienhuyscdde7a302019-07-24 12:19:16 +0200160[[receive.requireChangeId]]receive.requireChangeId::
161+
162The `Require Change-Id in commit message` option defines whether a
163link:user-changeid.html[Change-Id] in the commit message is required
164for pushing a commit for review. If this option is set, trying to push
165a commit for review that doesn't contain a Change-Id in the commit
166message fails with link:error-missing-changeid.html[missing Change-Id
167in commit message footer].
168
169It is recommended to set this option and use a
170link:user-changeid.html#create[commit-msg hook] (or other client side
171tooling like EGit) to automatically generate Change-Id's for new
172commits. This way the Change-Id is automatically in place when changes
173are reworked or rebased and uploading new patch sets gets easy.
174
175If this option is not set, commits can be uploaded without a Change-Id,
176but then users have to remember to copy the assigned Change-Id from the
177change screen and insert it manually into the commit message when they
178want to upload a second patch set.
179
180Default is `INHERIT`, which means that this property is inherited from
181the parent project. The global default for new hosts is `true`
182
183This option is deprecated and future releases will behave as if this
184is always `true`.
185
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700186[[receive.maxObjectSizeLimit]]receive.maxObjectSizeLimit::
187+
188Maximum allowed Git object size that receive-pack will accept. If an object
189is larger than the given size the pack-parsing will abort and the push
190operation will fail. If set to zero then there is no limit.
191+
192Project owners can use this setting to prevent developers from pushing
David Pursehouse2e548682018-08-01 15:12:47 +0200193objects which are too large to Gerrit. This setting can also be set in
194`gerrit.config` globally (link:config-gerrit.html#receive.maxObjectSizeLimit[
195receive.maxObjectSizeLimit]).
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700196+
David Pursehoused508ef02018-08-03 15:09:56 +0100197The project specific setting in `project.config` may not set a value higher
198than the global limit (if configured). In other words, it is only honored when
199it further reduces the global limit.
200+
David Pursehouse3f9c7402018-09-05 18:43:03 +0900201When link:config-gerrit.html#receive.inheritProjectMaxObjectSizeLimit[
202`receive.inheritProjectmaxObjectSizeLimit`] is enabled in the global config,
203the value is inherited from the parent project. Otherwise, it is not inherited
204and must be explicitly set per project.
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700205+
206Default is zero.
207+
208Common unit suffixes of k, m, or g are supported.
209
Rob Ward2cf12952014-01-26 20:38:12 +0000210[[receive.checkReceivedObjects]]receive.checkReceivedObjects::
211+
212Controls whether or not the JGit functionality for checking received objects
213is enabled.
214+
215By default Gerrit checks the validity of git objects. Setting this variable to
216false should not be used unless a project with history containing invalid
217objects needs to be pushed into a Gerrit repository.
218+
219This functionality is provided as some other git implementations have allowed
220bad history to be written into git repositories. If these repositories need pushing
221up to Gerrit then the JGit checks need to be disabled.
222+
223The default value for this is true, false disables the checks.
224
Dave Borowitz5170e0f2015-06-18 21:05:29 -0400225[[receive.enableSignedPush]]receive.enableSignedPush::
226+
227Controls whether server-side signed push validation is enabled on the
228project. Only has an effect if signed push validation is enabled on the
229server; see the link:config-gerrit.html#receive.enableSignedPush[global
230configuration] for details.
231+
232Default is `INHERIT`, which means that this property is inherited from
233the parent project.
234
Dave Borowitz0543c732015-10-20 10:35:26 -0400235[[receive.requireSignedPush]]receive.requireSignedPush::
236+
237Controls whether server-side signed push validation is required on the
238project. Only has an effect if signed push validation is enabled on the
David Pursehouseab5383f2018-09-14 08:23:10 +0900239server, and link:#receive.enableSignedPush[`receive.enableSignedPush`] is
240set on the project. See the
241link:config-gerrit.html#receive.enableSignedPush[global configuration]
242for details.
Dave Borowitz0543c732015-10-20 10:35:26 -0400243+
244Default is `INHERIT`, which means that this property is inherited from
245the parent project.
246
Saša Živkov225b7a72015-11-17 17:37:43 +0100247[[receive.rejectImplicitMerges]]receive.rejectImplicitMerges::
248+
249Controls whether a check for implicit merges will be performed when changes are
250pushed for review. An implicit merge is a case where merging an open change
251would implicitly merge another branch into the target branch. Typically, this
252happens when a change is done on master and, by mistake, pushed to a stable branch
253for review. When submitting such change, master would be implicitly merged into
254stable without anyone noticing that. When this option is set to 'true' Gerrit
255will reject the push if an implicit merge is detected.
256+
257This check is only done for non-merge commits, merge commits are not subject of
258the implicit merge check.
259+
260Default is `INHERIT`, which means that this property is inherited from
261the parent project.
262
Changcheng Xiao81a0df92019-01-15 18:27:58 +0100263[[receive.createNewChangeForAllNotInTarget]]receive.createNewChangeForAllNotInTarget::
264+
265The `create-new-change-for-all-not-in-target` option provides a
266convenience for selecting link:user-upload.html#base[the merge base]
267by setting it automatically to the target branch's tip so you can
268create new changes for all commits not in the target branch.
269
270This option is disabled if the tip of the push is a merge commit.
271
272This option also only works if there are no merge commits in the
273commit chain, in such cases it fails warning the user that such
274pushes can only be performed by manually specifying
275link:user-upload.html#base[bases]
276
277This option is useful if you want to push a change to your personal
278branch first and for review to another branch for example. Or in cases
279where a commit is already merged into a branch and you want to create
280a new open change for that commit on another branch.
281
Changcheng Xiaod089b4a2017-08-10 14:05:22 +0200282[[change-section]]
283=== Change section
284
285The change section includes configuration for project-specific change settings:
286
287[[change.privateByDefault]]change.privateByDefault::
288+
289Controls whether all new changes in the project are set as private by default.
290+
291Note that a new change will be public if the `is_private` field in
292link:rest-api-changes.html#change-input[ChangeInput] is set to `false` explicitly
293when calling the link:rest-api-changes.html#create-change[CreateChange] REST API
294or the `remove-private` link:user-upload.html#private[PushOption] is used during
295the Git push.
296+
297Default is `INHERIT`, which means that this property is inherited from
298the parent project.
299
David Ostrovsky96909942018-06-10 08:30:33 +0200300[[change.workInProgressByDefault]]change.workInProgressByDefault::
301+
302Controls whether all new changes in the project are set as WIP by default.
303+
304Note that a new change will be ready if the `workInProgress` field in
305link:rest-api-changes.html#change-input[ChangeInput] is set to `false` explicitly
306when calling the link:rest-api-changes.html#create-change[CreateChange] REST API
307or the `ready` link:user-upload.html#wip[PushOption] is used during
308the Git push.
309+
310Default is `INHERIT`, which means that this property is inherited from
311the parent project.
312
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700313[[submit-section]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800314=== Submit section
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700315
316The submit section includes configuration of project-specific
317submit settings:
318
319- 'mergeContent': Defines whether to automatically merge changes. Valid values
320are 'true', 'false', or 'INHERIT'. Default is 'INHERIT'.
321
Sebastian Schuberth28705d32019-04-25 11:52:49 +0200322- 'action': defines the link:#submit-type[submit type]. Valid
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700323values are 'fast forward only', 'merge if necessary', 'rebase if necessary',
David Pursehouse91203c92019-07-16 08:49:29 +0900324'rebase always', 'merge always' and 'cherry pick'. The default is 'merge if necessary'.
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700325
Patrick Hiesel5a316352017-06-22 15:38:06 +0200326- 'matchAuthorToCommitterDate': Defines whether to the author date will be changed to match the
327submitter date upon submit, so that git log shows when the change was submitted instead of when the
328author last committed. Valid values are 'true', 'false', or 'INHERIT'. The default is 'INHERIT'.
329This option only takes effect in submit strategies which already modify the commit, i.e.
330Cherry Pick, Rebase Always, and (perhaps) Rebase If Necessary.
331
Patrick Hieseldc285c72018-01-08 17:20:15 +0100332- 'rejectEmptyCommit': Defines whether empty commits should be rejected when a change is merged.
333Changes might not seem empty at first but when attempting to merge, rebasing can lead to an empty
Dave Borowitz62661742018-08-15 15:28:51 -0700334commit. If this option is set to 'true' the merge would fail. An empty commit is still allowed as
335the initial commit on a branch.
Patrick Hieseldc285c72018-01-08 17:20:15 +0100336
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700337Merge strategy
338
339
340[[access-section]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800341=== Access section
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700342
343Each +access+ section includes a reference and access rights connected
344to groups. Each group listed must exist in the link:#file-groups[+groups+ file].
345
346Please refer to the
347link:access-control.html#access_categories[Access Categories]
348documentation for a full list of available access rights.
349
350
Shawn Pearce9cfcebd2014-04-25 16:41:12 -0700351[[mimetype-section]]
352=== MIME Types section
353
354The +mimetype+ section may be configured to force the web code
355reviewer to return certain MIME types by file path. MIME types
356may be used to activate syntax highlighting.
357
358----
359[mimetype "text/x-c"]
360 path = *.pkt
361[mimetype "text/x-java"]
362 path = api/current.txt
363----
364
365
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700366[[capability-section]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800367=== Capability section
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700368
369The +capability+ section only appears once, and only in the +All-Projects+
370repository. It controls Gerrit administration capabilities that are configured
371on a global level.
372
373Please refer to the
374link:access-control.html#global_capabilities[Global Capabilities]
375documentation for a full list of available capabilities.
376
David Myllykangasb3ccec62015-01-21 15:41:13 +0100377[[label-section]]
378=== Label section
379
380Please refer to link:config-labels.html#label_custom[Custom Labels] documentation.
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700381
Saša Živkov944b8382014-05-08 14:02:15 +0200382[[branchOrder-section]]
383=== branchOrder section
384
385Defines a branch ordering which is used for backporting of changes.
386Backporting will be offered for a change (in the Gerrit UI) for all
387more stable branches where the change can merge cleanly.
388
389[[branchOrder.branch]]branchOrder.branch::
390+
391A branch name, typically multiple values will be defined. The order of branch
392names in this section defines the branch order. The topmost is considered to be
393the least stable branch (typically the master branch) and the last one the
394most stable (typically the last maintained release branch).
395
396Example:
397
398----
399[branchOrder]
400 branch = master
401 branch = stable-2.9
402 branch = stable-2.8
403 branch = stable-2.7
404----
405
406The `branchOrder` section is inheritable. This is useful when multiple or all
407projects follow the same branch rules. A `branchOrder` section in a child
408project completely overrides any `branchOrder` section from a parent i.e. there
409is no merging of `branchOrder` sections. A present but empty `branchOrder`
410section removes all inherited branch order.
411
412Branches not listed in this section will not be included in the mergeability
413check. If the `branchOrder` section is not defined then the mergeability of a
414change into other branches will not be done.
415
Patrick Hiesel6db5afd2017-03-21 09:40:03 +0100416[[reviewer-section]]
417=== reviewer section
418
419Defines config options to adjust a project's reviewer workflow such as enabling
420reviewers and CCs by email.
421
422[[reviewer.enableByEmail]]reviewer.enableByEmail::
423+
424A boolean indicating if reviewers and CCs that do not currently have a Gerrit
425account can be added to a change by providing their email address.
426
Patrick Hiesel66542932017-09-22 09:01:07 +0200427This setting only takes affect for changes that are readable by anonymous users.
428
Patrick Hiesel502b26c2017-03-29 14:19:23 +0200429Default is `INHERIT`, which means that this property is inherited from
430the parent project. If the property is not set in any parent project, the
431default value is `FALSE`.
Saša Živkov944b8382014-05-08 14:02:15 +0200432
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700433[[file-groups]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800434== The file +groups+
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700435
436Each group in this list is linked with its UUID so that renaming of
437groups is possible without having to rewrite every +groups+ file
438in every repository where it's used.
439
440This is what the default groups file for +All-Projects.git+ looks like:
441
442----
443# UUID Group Name
444#
4453d6da7dc4e99e6f6e5b5196e21b6f504fc530bba Administrators
446global:Anonymous-Users Anonymous Users
Khai Do5aaeee32014-09-05 10:14:32 -0700447global:Change-Owner Change Owner
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700448global:Project-Owners Project Owners
449global:Registered-Users Registered Users
450----
451
452This file can't be written to by the +git config+ command.
453
454In order to reference a group in +project.config+, it must be listed in
455the +groups+ file. When editing permissions through the web UI this
456file is maintained automatically, but when pushing updates to
457+refs/meta/config+ this must be dealt with by hand. Gerrit will refuse
458+project.config+ files that refer to groups not listed in +groups+.
459
460The UUID of a group can be found on the General tab of the group's page
461in the web UI or via the +-v+ option to
462link:cmd-ls-groups.html[the +ls-groups+ SSH command].
463
464
465[[file-rules_pl]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800466== The file +rules.pl+
Fredrik Luthandera3cf3542012-07-04 16:55:35 -0700467
468The +rules.pl+ files allows you to replace or amend the default Prolog
469rules that control e.g. what conditions need to be fulfilled for a
470change to be submittable. This file content should be
471interpretable by the 'Prolog Cafe' interpreter.
472
473You can read more about the +rules.pl+ file and the prolog rules on
474link:prolog-cookbook.html[the Prolog cookbook page].
475
Changcheng Xiao21885982019-01-15 18:16:51 +0100476[[submit-type]]
477=== Submit Type
478
479The method Gerrit uses to submit a change to a project can be
480modified by any project owner through the project console, `Projects` >
481`List` > my/project. In general, a submitted change is only merged if all
482its dependencies are also submitted, with exceptions documented below.
483The following submit types are supported:
484
485[[submit_type_inherit]]
486* Inherit
487+
488This is the default for new projects, unless overridden by a global
489link:config-gerrit.html#repository.name.defaultSubmitType[`defaultSubmitType` option].
490+
491Inherit the submit type from the parent project. In `All-Projects`, this
492is equivalent to link:#merge_if_necessary[Merge If Necessary].
493
494[[fast_forward_only]]
495* Fast Forward Only
496+
David Pursehouse8e2d81b2019-07-16 17:04:10 +0900497With this method Gerrit does not create merge commits on submitting a
498change. Merge commits may still be submitted, but they must be created
499on the client prior to uploading to Gerrit for review.
Changcheng Xiao21885982019-01-15 18:16:51 +0100500+
501To submit a change, the change must be a strict superset of the
502destination branch. That is, the change must already contain the
503tip of the destination branch at submit time.
504
505[[merge_if_necessary]]
506* Merge If Necessary
507+
508If the change being submitted is a strict superset of the destination
509branch, then the branch is fast-forwarded to the change. If not,
510then a merge commit is automatically created. This is identical
511to the classical `git merge` behavior, or `git merge --ff`.
512
513[[always_merge]]
514* Always Merge
515+
516Always produce a merge commit, even if the change is a strict
517superset of the destination branch. This is identical to the
518behavior of `git merge --no-ff`, and may be useful if the
519project needs to follow submits with `git log --first-parent`.
520
521[[cherry_pick]]
522* Cherry Pick
523+
524Always cherry pick the patch set, ignoring the parent lineage
525and instead creating a brand new commit on top of the current
526branch head.
527+
528When cherry picking a change, Gerrit automatically appends onto the
529end of the commit message a short summary of the change's approvals,
530and a URL link back to the change on the web. The committer header
531is also set to the submitter, while the author header retains the
532original patch set author.
533+
534Note that Gerrit ignores dependencies between changes when using this
535submit type unless
536link:config-gerrit.html#change.submitWholeTopic[`change.submitWholeTopic`]
537is enabled and depending changes share the same topic. So generally
538submitters must remember to submit changes in the right order when using this
539submit type. If all you want is extra information in the commit message,
540consider using the Rebase Always submit strategy.
541
542[[rebase_if_necessary]]
543* Rebase If Necessary
544+
545If the change being submitted is a strict superset of the destination
546branch, then the branch is fast-forwarded to the change. If not,
547then the change is automatically rebased and then the branch is
548fast-forwarded to the change.
David Pursehouse8e2d81b2019-07-16 17:04:10 +0900549+
Changcheng Xiao21885982019-01-15 18:16:51 +0100550When Gerrit tries to do a merge, by default the merge will only
551succeed if there is no path conflict. A path conflict occurs when
552the same file has also been changed on the other side of the merge.
553
554[[rebase_always]]
555* Rebase Always
556+
557Basically, the same as Rebase If Necessary, but it creates a new patchset even
558if fast forward is possible AND like Cherry Pick it ensures footers such as
559Change-Id, Reviewed-On, and others are present in resulting commit that is
560merged.
David Pursehouse8e2d81b2019-07-16 17:04:10 +0900561+
Changcheng Xiao21885982019-01-15 18:16:51 +0100562Thus, Rebase Always can be considered similar to Cherry Pick, but with
563the important distinction that Rebase Always does not ignore dependencies.
564
565[[content_merge]]
David Pursehousecf5e35b2019-06-05 12:09:05 +0900566=== Allow content merges
Changcheng Xiao21885982019-01-15 18:16:51 +0100567If `Allow content merges` is enabled, Gerrit will try
568to do a content merge when a path conflict occurs.
David Pursehousee200d0d2019-06-05 12:08:19 +0900569
570GERRIT
571------
572Part of link:index.html[Gerrit Code Review]
573
574SEARCHBOX
575---------