Build your private git infrastructure

Build your private git infrastructure

gitlogoI’ve got for several years a virtual server to put my own projects under version control. I started with CVS, then migrated to SVN and now I’m start thinking to migrate all the old projects to git. This because I like git very much and I use it personally for several years now.
The first question but was: “Not invented here”-syndrom? Why not using github or codeplex or any other public platform which offers git support. Well, some of my own little projects are just not worth it to publish or some of them are not meant to be published. So still existing the question why not buy a private account at github or somewhere else. At this point I was much more interested to see how hard it is to build your own little github environment. So, the requirements are:

  • remote repository for git vcs
  • simple user management
  • website to browse the repositories

Fortunately the documentation for git is currently very good, specially this site helps a lot.

Setup a new repository on the server

First you need of course git installed on your server. The second important thing is to add a new user “git”. You can add the user by command line or through your preferred tool, like webmin. The user git is just a service account and it should not be allowed to log in with this account. So therefore just change the shell to “/usr/bin/git-shell”.

To push some changes to my git-server, I need to initialize the repository on the server. It is a convention that the directory name of a bare-repository has the suffix “.git”. So the command looks like this:

git init --bare Project.git

After that I updated the rights for the created directory:

chown -R git.users Project.git

Authentication

I decided to use the simplest way to communicate with the remote repositories which is by ssh. To add a new user, you must have his public key (here a short documentation how to generate a new public key). When you received the public key of a new user, it is easy to add it to the allowed users:

cat publickey_id_rsa.pub >> home/git/.ssh/autorized_keys

Browse the git repositories

The next step was to fulfil the website requirement. I chose gitweb, which is just good enough to start and it fulfils my current needs. On my linux (debian) machine, it was an easy task:

apt-get install gitweb

Also the configuration of gitweb was really easy. First I defined a root directory, where I plan to store all my git repositories. This directory I had to specify in the configuration file /etc/gitweb.conf:

$projectroot = "/vcs/git";

The last step was to protect the gitweb site with basic authentication (I use an apache web server, so the following lines are in the configuration file of the gitweb site):

AuthType Basic
AuthName "gitweb"
AuthUserFile /www/gitweb.example.com/auth.db
require valid-user

Finally I added the allowed users in the auth.db file.

Using the remote repository

The easiest case is to clone the remote repository:

git clone git@example.com:/vcs/git/Project.git Project

Another way is to add the remote repository to an existing git repository:

git remote add origin git@example.com:/vcs/git/Project.git

To get the latest changes from the remote repository you’ll use the command

git pull origin master

To save the local changes in the remote repository you’ll use the command

git push origin master

4 thoughts on “Build your private git infrastructure

  1. It looks very interesting. Saw a similar comment on reddit to my post. I think I’ll try this even if a bit more work has to be done.

  2. I setup GitLab a year ago for our division and everybody is happy with it. It supports LDAP to authenticate against the Active Directory.

Leave a Reply