= 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 HEAD
	of the project. If none branches are specified then default value
	('master') 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
---------
