Building Your Own Git Server

Many of the projects I work on are not appropriate for public version control systems like Github or Sourceforge. They might be client projects or code I am tinkering with but am not sure what I’ll eventually do with. In these cases it’s good to have a private version control site. Since I am now a Git user that server needs to be Git based. Luckily there are a couple great choices.

The two prime candidates for personal Git servers are gitosis and gitolite. Where they differ is in the launguage they are written in and how they handle repo permissions.

Gitosis

Gitosis has been around longer than Gitolite but has fewer access controls.

Permissions are handled on a per repo basis. Each user has their public ssh key stored in gitosis config. Then each repo has a list of users associated with it. These users can read and write to the repo. It’s that simple.

Additionally, individual repos can be set to allow anonymous user checkouts.

If you don’t have complex access rules Gitosis may be great for you.

Gitolite

Gitolite started out as a souped up version of Gitosis. The original goal was to add per branch permissions. From there it changed languages and grew into something with more features with more fine grained permissions.

If you have complex access rules Gitolite might be more up your alley.

Gitweb

Gitweb is the de-facto standard web GUI for git. So much so that it is now included in the Git source code. Gitweb is a perl script enabling you to view the repos on a server.

Both Gitosis and Gitolite integrate with Gitweb. For example, you can tell Gitweb to only display the public repos and the ones that anonymous users can’t access are not displayed.