There’s a simple way to create a central git repository:
git init --bare --shared
This will create a repository that you cannot commit data to if your commit will cause any merge conflicts (it forces you to make only additions) and it has permissions set up to allow multiple users to access the repo. The config, as of git 1.7, looks like this:
[core] repositoryformatversion = 0 filemode = true bare = true ignorecase = true sharedrepository = 1 [receive] denyNonFastforwards = true
Now you can clone this repository easily!
If you want to take a current local repository and create a remote central repository:
First, we clone the local repository into a new, bare repository:
cd tempdir git clone --bare /path/to/original/repo
Then we add the denyFastForwards option and add the shared option:
git config recieve.denyNonFastforwards true git config core.sharedrepository 1
We can now copy this new repository to whatever server we want and set all that up. Lastly, we want our original repository to point to this new repository as its primary remote repository. For this we have to set up some remotes and the like:
cd /path/to/original/repository git remote add origin git+ssh://server/path/to/remote/repo git config branch.master.remote origin
git config branch.master.mergerefs/heads/master
The last two commands sets up the local repository to track the remote repository by default, so that it will be the repo that responds to get push and git pull.