First of all, you need to check your openssh setup on Ubuntu server: see this HowTo.
Then you can follow this article, which mainly recommend:
$ sudo apt-get install python-setuptools
$ mkdir ~/src
$ cd ~/src
$ git clone git://eagain.net/gitosis.git
$ cd gitosis
$ sudo python setup.py install
$ sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group
--disabled-password \
--home /home/git \
git
go into your /etc/ssh/ssh_config file and add git to the list of Allowed Users that can login.
copy your id_rsa.pub file over to your server somewhere (in our example we're using /tmp) and then run this command:
$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in ./
$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
From your local machine, test it out with this:
git clone git@YOUR_SERVER:gitosis-admin.git
Configure gitosis for a new project. Use your favorite editor to create a new block under the gitosis one. It should look like this:
[group myrailsapp]
members = myNameAsInTheRsa.pub
writable = myNewApp
A couple of things to watch out in the above block.
First, make sure your name matches what's in your public key (that is, open your id_rsa.pub file and see that what the name says.
Second, make sure you spell writable correctly!
Once you're done, commit and push the changes up to the server.
$ git commit -a -m "created a new repository!"
$ git push