We've started to prototype some of our ideas those last weeks. Currently, we're working on 3 projects. For one, we have 2 branches. Today, it exists wonderful tools to manage collaboration and revision of source code. Even when I'm alone in a software development project, I use one. It is about time to set up one for enkio.

The purpose of the current post is not to deal with the trollable question "which RCS is the best". Maybe I'll share later about that, but not now. We have chosen Git because it is used by the RoR and Django communities and dedicated hosting solutions, and we want make our opinion by ourselves.

This howto concerns the installation of Git and Gitosis. The last one is a simple manager of repository access using SSH key and not needing shell accounts. Before starting,  here are some conventions I'll use for prompt symbols:

# = remote
$ = local


As usual, update your package db:

# aptitude update

Install git and gitosis

# aptitude install git-core gitosis

The Debian package has created a gitosis sys user and its home directory is at /srv/gitosis.

Init Gitosis

Now, you need to setup gitosis and the administration access. To do that you need a SSH public key that I simply name here. First of all, copy this key on the server in the /tmp directory:

$ scp

You can now setup gitosis:

# su gitosis
# cd
# gitosis-init < /tmp/
Initialized empty Git repository in /srv/gitosis/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /srv/gitosis/repositories/gitosis-admin.git

This creates the repository gitosis-admin, setting up gitosis. But to effectively set up gitosis you have to clone it locally, in order to work on its setup file gitosis.conf and add new SSH public keys for other users.

Retrieve gitosis-admin locally

But before don't forget to correctly setup your SSH by adding at least the following in your ~/.ssh/config file:

$ cat << EOF > ~/.ssh/config
	IdentityFile ~/.ssh/id

Now you can clone the gitosis-admin repository:

$ git clone
Cloning into gitosis-admin...
Enter passphrase for key '/home/you/.ssh/id':
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.

In the directory gitosis-admin, you'll find the gitosis.conf file and the directory keydir where you have to put git user SSH public keys.

$ ls gitosis-admin
gitosis.conf  keydir
$ ls gitosis-admin/keydir

Let's take a look into gitosis.conf file:

$ cd gitosis-admin
$ cat gitosis.conf

[group gitosis-admin]
writable = gitosis-admin
members = id

A group gitosis-admin is already set up. It gives write access to the gitosis-admin repository and there is a member: id. id is the user name associated to the SSH public key defined inside the file

Setup access to the new repository

To illustrate how to use and setup gitosis, I'll create a repository and give write access to another user. First of all, I have to set up the access:

$ cat << EOF >> gitosis.conf
[group myteam]
writable = myproject
members = id another

By adding those lines, all members of group myteam have been given write access to myproject. And members of this group are id and another. I do not forget to add a SSH public key for another user:

$ cp ~/ keydir/
$ git add gitosis.conf keydir/
$ git commit -m "give write access to group myteam on project myproject"
$ git push

And it's done.

Create the new repository

Then, I can create a blank repository myproject:

$ cd ..
$ git clone
Cloning into myproject...
Enter passphrase for key '/home/id/.ssh/id':
Initialized empty Git repository in /srv/gitosis/repositories/myproject.git/
warning: You appear to have cloned an empty repository.