There are many options for having a private remote git repository on the internet like for example Github, that is free for public repositories but not for private ones.
We can pay for one of this services or if we already have a server for our web, why not using it also for our repositories? Here is where Gitosis is going to help, we’ll be able to have unlimited private repositories with group access control.
Installing Gitosis on Debian
Although there are multiple tutorials through the internet for doing this, I haven’t been able to find one that covers the whole process. The next steps are the result of testing multiple solutions and applying the best mix.
1. Install python-setuptools and download Gitosis
On the server
aptitude install python-setuptools
And download Gitosis (clone it from its Git repository)
cd /data/temp
git clone git://eagain.net/gitosis
(also available from https://github.com/res0nat0r/gitosis)
2. Install gitosis
Be careful with “–home /data/git” parameter, here you must set git user’s home, that is where repositories will be written.
python setup.py install
adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /data/git git
3. Generate a RSA public key on our local computer
After installing Gitosis on the server, now we need to generate a public key on our local development computer.
On Linux and Mac:
ssh-keygen -t rsa
This will generate public and private keys on our user folder, we need the public one, at “/home/usuario/.ssh/id_rsa.pub” on Linux or at “/Users/usuario/.ssh/id_rsa.pub” on OSX.
4. Install our public key on the server
Back to the server and having uploaded our public key (by ftp for example).
We will need “sudo” that is not installed by default on Debian:
aptitude install sudo
We setup Gitosis with our user as admin (giving it our public key path that in our example is at “/tmp/id_rsa.pub”)
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
And to finish we mark “post-update” as executable for all users.
sudo chmod 755 /data/git/repositories/gitosis-admin.git/hooks/post-update
5. Bonus track: Redmine or any web front for Git on the server.
If we are going to use Redmine or any other web viewer for git repositories we’ll need to include apache’s user “www-data” in git’s group so it’ll be able to access to our repositories.
usermod -a -G git www-data
6. We are ready, our first push
And we only need to clone the Gitosis config repository and we will be able to setup permission groups. (change myserver.com by your own server)
git clone [email protected]:gitosis-admin.git
and now we can open gitosis config file to add some repositories permissions
cd gitosis-admin
vim gitosis.conf
we’ll add “montes” repository as writable
[gitosis]
[group gitosis-admin]
writable = gitosis-admin montes
members = [email protected]
and save and push
git commit -a -m "Giving write permission on montes repository for gitosis-admin group"
git push
With this we have given write permissions on “montes” repository (that still doesn’t exist) to our user [email protected] that is the owner of the public key we generated before.
We only have to create the repository on our local computer
cd ..
mkdir montes
cd montes
git init
Add remote
git remote add origin [email protected]:montes
and our first push!
git add .
git commit -a -m "Primer commit!"
git push miservidor master
and we are finish!