One not-so-well-known feature of gerrit is that, you can set a %base for the RevWalk in ReceiveCommits when pushing changes to Gerrit. This makes it possible to push a commit for review and override Gerrits default algorithm for creating new changes on push to refs/for/*. For instance, one could submit a commit in a private branch and, afterward, push the same commit to a release branch. Specifying the tip of the destination branch as the %base would have an effect of creating a new change for every commit reachable from the pushed commit and not reachable from the target branch. This behavior seems to be wanted by some Gerrit users and is implemented as a project config option by this change (although it contradicts the Gerrit's philosophy of reviewing one commit once). If a %base is explicitly set on during uploading changes, new-change-for-all-not-in-target is ignored. To avoid incidental pushes with merges, new-change-for-all-not-in-target rejects uploads if changes contain merge commits. In such cases to push a merge commit, you need to explicitly set the %base parameter as described in Uploading Changes / Selecting Merge Base documentation. Bug: issue 1195 Change-Id: Ifa90184352c912885e52d2060356fcc039d0ef03
220 lines
7.0 KiB
Plaintext
220 lines
7.0 KiB
Plaintext
= gerrit create-project
|
|
|
|
== NAME
|
|
gerrit create-project - Create a new hosted project
|
|
|
|
== SYNOPSIS
|
|
--
|
|
'ssh' -p <port> <host> 'gerrit create-project'
|
|
[--owner <GROUP> ... | -o <GROUP> ...]
|
|
[--parent <NAME> | -p <NAME> ]
|
|
[--suggest-parents | -S ]
|
|
[--permissions-only]
|
|
[--description <DESC> | -d <DESC>]
|
|
[--submit-type <TYPE> | -t <TYPE>]
|
|
[--use-contributor-agreements | --ca]
|
|
[--use-signed-off-by | --so]
|
|
[--use-content-merge]
|
|
[--create-new-change-for-all-not-in-target]
|
|
[--require-change-id | --id]
|
|
[[--branch <REF> | -b <REF>] ...]
|
|
[--empty-commit]
|
|
[--max-object-size-limit <N>]
|
|
[--plugin-config <PARAM> ...]
|
|
{ <NAME> | --name <NAME> }
|
|
--
|
|
|
|
== DESCRIPTION
|
|
Creates a new bare Git repository under `gerrit.basePath`, using
|
|
the project name supplied. The newly created repository is empty
|
|
(has no commits), but is registered in the Gerrit database so that
|
|
the initial commit may be uploaded for review, or initial content
|
|
can be pushed directly into a branch.
|
|
|
|
If replication is enabled, this command also connects to each of
|
|
the configured remote systems over SSH and uses command line git
|
|
on the remote system to create the empty repository.
|
|
|
|
|
|
== ACCESS
|
|
Caller must be a member of the privileged 'Administrators' group,
|
|
or have been granted
|
|
link:access-control.html#capability_createProject[the 'Create Project' global capability].
|
|
|
|
== SCRIPTING
|
|
This command is intended to be used in scripts.
|
|
|
|
== OPTIONS
|
|
<NAME>::
|
|
Required; name of the new project to create. If name ends
|
|
with `.git` the suffix will be automatically removed.
|
|
|
|
--name::
|
|
-n::
|
|
Deprecated alias for the <NAME> argument. This option may
|
|
be removed in a future release.
|
|
|
|
--branch::
|
|
-b::
|
|
Name of the initial branch(es) in the newly created project.
|
|
Several branches can be specified on the command line.
|
|
If several branches are specified then the first one becomes HEAD
|
|
of the project. If none branches are specified then default value
|
|
('master') is used.
|
|
|
|
--owner::
|
|
-o::
|
|
Name of the group(s) which will initially own this repository.
|
|
The specified group(s) must already be defined within Gerrit.
|
|
Several groups can be specified on the command line.
|
|
+
|
|
Defaults to what is specified by `repository.*.ownerGroup`
|
|
in gerrit.config.
|
|
|
|
--parent::
|
|
-p::
|
|
Name of the parent project to inherit access rights
|
|
through. If not specified, the parent is set to the default
|
|
project `All-Projects`.
|
|
|
|
--suggest-parents::
|
|
-S::
|
|
Suggest parent candidates. This option cannot be used with
|
|
other arguments. Print out a list of projects that are
|
|
already parents to other projects, thus it can help the user
|
|
find a suitable parent for the new project.
|
|
|
|
--permissions-only::
|
|
Create the project only to serve as a parent for other
|
|
projects. The new project's Git repository will be
|
|
initialized to have 'HEAD' point to 'refs/meta/config'.
|
|
|
|
--description::
|
|
-d::
|
|
Initial description of the project. If not specified,
|
|
no description is stored.
|
|
+
|
|
Description values containing spaces should be quoted in single quotes
|
|
('). This most likely requires double quoting the value, for example
|
|
`--description "'A description string'"`.
|
|
|
|
--submit-type::
|
|
-t::
|
|
Action used by Gerrit to submit an approved change to its
|
|
destination branch. Supported options are:
|
|
+
|
|
* FAST_FORWARD_ONLY: produces a strictly linear history.
|
|
* MERGE_IF_NECESSARY: create a merge commit when required.
|
|
* REBASE_IF_NECESSARY: rebase the commit when required.
|
|
* MERGE_ALWAYS: always create a merge commit.
|
|
* CHERRY_PICK: always cherry-pick the commit.
|
|
|
|
+
|
|
Defaults to MERGE_IF_NECESSARY unless
|
|
link:config-gerrit.html#repository.name.defaultSubmitType[
|
|
repository.<name>.defaultSubmitType] is set to a different value.
|
|
For more details see link:project-configuration.html#submit_type[
|
|
Submit Types].
|
|
|
|
--use-content-merge::
|
|
If enabled, Gerrit will try to perform a 3-way merge of text
|
|
file content when a file has been modified by both the
|
|
destination branch and the change being submitted. This
|
|
option only takes effect if submit type is not
|
|
FAST_FORWARD_ONLY. Disabled by default.
|
|
|
|
--use-contributor-agreements::
|
|
--ca::
|
|
If enabled, authors must complete a contributor agreement
|
|
on the site before pushing any commits or changes to this
|
|
project. Disabled by default.
|
|
|
|
--use-signed-off-by::
|
|
--so:
|
|
If enabled, each change must contain a Signed-off-by line
|
|
from either the author or the uploader in the commit message.
|
|
Disabled by default.
|
|
|
|
--create-new-change-for-all-not-in-target::
|
|
--ncfa:
|
|
If enabled, a new change is created for every commit not in
|
|
target branch. If the pushed commit is merge commit, this flag is
|
|
ignored for that push. This option also does not accept merge
|
|
commits in commit chain to avoid accidental creation of a large
|
|
number of open changes.
|
|
Disabled by default.
|
|
|
|
--require-change-id::
|
|
--id::
|
|
Require a valid link:user-changeid.html[Change-Id] footer
|
|
in any commit uploaded for review. This does not apply to
|
|
commits pushed directly to a branch or tag.
|
|
|
|
--empty-commit::
|
|
Creates an initial empty commit for the Git repository of the
|
|
project that is newly created.
|
|
|
|
--max-object-size-limit::
|
|
Define maximum Git object size for this project. Pushes containing an
|
|
object larger than this limit will be rejected. This can be used to
|
|
further limit the global
|
|
link:config-gerrit.html#receive.maxObjectSizeLimit[receive.maxObjectSizeLimit]
|
|
and cannot be used to increase that globally set limit.
|
|
+
|
|
Common unit suffixes of 'k', 'm', or 'g' are supported.
|
|
|
|
--plugin-config::
|
|
A plugin configuration parameter that should be set for this
|
|
project. The plugin configuration parameter must be specified in
|
|
the format '<plugin-name>.<parameter-name>=<value>'. Only
|
|
parameters that are explicitly declared by a plugin can be set.
|
|
Multiple `--plugin-config` options can be specified to set multiple
|
|
plugin parameters.
|
|
|
|
|
|
== EXAMPLES
|
|
Create a new project called `tools/gerrit`:
|
|
|
|
====
|
|
$ ssh -p 29418 review.example.com gerrit create-project tools/gerrit.git
|
|
====
|
|
|
|
Create a new project with a description:
|
|
|
|
====
|
|
$ ssh -p 29418 review.example.com gerrit create-project tool.git --description "'Tools used by build system'"
|
|
====
|
|
|
|
Note that it is necessary to quote the description twice. The local
|
|
shell needs double quotes around the value to ensure the single quotes
|
|
are passed through SSH as-is to the remote Gerrit server, which uses
|
|
the single quotes to delimit the value.
|
|
|
|
== REPLICATION
|
|
If the replication plugin is installed, the plugin will attempt to
|
|
perform remote repository creation by a Bourne shell script:
|
|
|
|
====
|
|
mkdir -p '/base/project.git' && cd '/base/project.git' && git init --bare && git update-ref HEAD refs/heads/master
|
|
====
|
|
|
|
For this to work successfully the remote system must be able to run
|
|
arbitrary shell scripts, and must have `git` in the user's PATH
|
|
environment variable. Administrators could also run this command line
|
|
by hand to establish a new empty repository.
|
|
|
|
A custom extension or plugin may also be developed to implement the
|
|
NewProjectCreatedListener extension point and handle custom logic
|
|
for remote repository creation.
|
|
|
|
== SEE ALSO
|
|
|
|
* link:project-configuration.html[Project Configuration]
|
|
|
|
GERRIT
|
|
------
|
|
Part of link:index.html[Gerrit Code Review]
|
|
|
|
SEARCHBOX
|
|
---------
|