Git/Creating new repositories/en

This is designed to be a quick and dirty tutorial about how to create a new Git repository hosted by the Wikimedia Foundation. The tool being used as of June 2012 is Gerrit and you will need to be one of the people who are allowed to create new repositories.

Step 0: Read and understand Gerrit docs
Before attempting to create repositories, there are two sections of the Gerrit documentation that you definitely need to read and be familiar with :


 * Gerrit access controls
 * You almost always will be setting permissions after creating a new repository, so it's important to understand what each of the permissions means and how to use them


 * create-project command
 * You will be creating the repository via the command line, so make sure you've read and understand the various options available via the command line (especially the  and   switches!).

Step 1: Pick your repository name
Before you begin, make sure you have decided on a repository name that you do not want to change. Renaming repositories is near impossible (as of Gerrit v2.4) so you need to make sure you are happy with your repository name before you create it. Try to keep the name short, yet meaningful. Please note name must be made of either latin letters (a-z), roman numbers (0-9) or dashes ( - ).

Step 2: Pick your repository's home
For organisation (and permission) purposes, we use top-level project names (like mediawiki/* or operations/*) to put repositories in. It's best to not create new top-level repositories without discussing it first, so the top-levels can be named and setup in a way that is useful and descriptive.

As an example,  where   is the prefix used for any MediaWiki extension. If you are unsure, ask around, for example on wikitech-l.

Step 3: Create the repository
Even though there's a way to create new repositories via the Gerrit web interface, please don't use that GUI. There's a couple of shortcomings, so please create the new repository via the command line. Let's say we were making a new repository called, so the command would be as follows:

ssh -p 29418 gerrit.wikimedia.org gerrit create-project --require-change-id --owner=MyGroup --parent=test --description='"My super awesome repository"' test/my-new-repo

Important Caveats
Setting the  switch is very important so you inherit the permissions from the containing repository. If you do not specify the parent, the parent defaults to, which is nearly useless for most repositories. The parent can be adjusted via a Gerrit admin if you get it wrong, however.

Setting the  switch is even more important because if you do not set the owner of a repository to a group you are a member of (or that the intended user is a member of), you (or they) will be unable to adjust the permissions on your newly created repository (and you'll have to ask a Gerrit admin to fix that).

Step 4: Set permissions
In some cases, you may want to adjust permissions beyond what is inherited from the parent repository. Once the repo is created (and you are an Owner), you can then adjust the permissions via the Gerrit web UI. You will want to use the Gerrit documentation about access rights.

When done changing initial permissions, be sure to remove the "Project and Group Creators" group from the Owner permission, as they do not need it after rights are initially configured.

Step 5: Create file
Once you've made your new repo, please be sure to add a  file in the root of the new repository. This is especially important for extensions, as failure to do so will break Translatewiki. A  file should look like:

The host and port should never need to be changed. "project" should be changed to match the repository you've just created. "defaultbranch" is the primary branch that you'll be submitting code to - usually this is master. "defaultrebase" disables the implicit rebasing `git review` does before submitting a change. Lots of repos find this behavior annoying, so you'll generally want to include this. It can be safely omitted, though.

Step 6: Register the extension submodule on mediawiki/{extensions,skins}.git
For repositories under  or   only, please register the repository submodule in the mediawiki/extension.git or mediawiki/skins.git superproject respectively. This is used by various tools and bots for a number of actions such as deploying code to the Beta Cluster, synchronize extension.json/composer.json data or updating library dependencies via LibUp, among others.

Importing from an existing repository
In case you need to import an existing repository, you will need to add the following permissions on :



Then clone a mirror of the existing repository, and send all the references to gerrit:

$ git clone --mirror &lt;path to existing repository> mirroring $ cd mirroring $ git remote add gerrit ssh://gerrit.wikimedia.org:29418/ &lt;gerrit repository name> $ git push --mirror gerrit

There will be an error about  which holds the Gerrit repository configuration and can not be overwritten.