= gerrit create-project

== NAME
gerrit create-project - Create a new hosted project.

== SYNOPSIS
[verse]
--
_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> }
--

== DESCRIPTION
Creates a new bare Git repository under `gerrit.basePath`, using
the project name supplied.  The newly created repository is empty
(has no commits), and the initial content may either be uploaded for
review, or pushed directly to 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.

--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
	link:project-configuration.html#default-branch[HEAD] of the project.
	If none branches are specified then link:config-gerrit.html#gerrit.defaultBranch[host-level default]
	is used.

--owner::
-o::
	Identifier of the group(s) which will initially own this repository.
+
--
This can be:

* the UUID of the group
* the legacy numeric ID of the group
* the name of the group if it is unique
--
+
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.
* REBASE_ALWAYS: always rebase the commit including dependencies.
* 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:config-project-config.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 that is not in
	the target branch. If the pushed commit is a merge commit, this flag is
	ignored for that push. To avoid accidental creation of a large number
	of open changes, this option also does not accept merge commits in the
	commit chain.
	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
---------
