How To Install A Public Git Repository On A Debian Server

Well, we’ll focus on how to install git and gitweb on the Debian distribution. gitweb is a git web interface written in Perl, and can be used as a CGI script or as mod_Perl, and it will allow us browsing a git repository. Let’s start.

Getting git and gitweb packages from the Debian repository with aptitude:

 $ sudo aptitude install git-core gitweb

Create some useful directories: /var/cache/git (the git repository), /var/www/git contains the gitweb.cgi:

 $ sudo mkdir /var/www/git
 $ [ -d "/var/cache/git" ] || sudo mkdir /var/cache/git

In our example the directory /var/www is Apache’s DocumentRoot; make a git configuration in the Apache configuration directory:

 $ sudo cat vim /etc/apache2/conf.d/git
<Directory /var/www/git>
   Allow from all
   AllowOverride all
   Order allow,deny
   Options ExecCGI
   <Files gitweb.cgi>
   SetHandler cgi-script
   </Files>
</Directory>
DirectoryIndex gitweb.cgi
SetEnv  GITWEB_CONFIG  /etc/gitweb.conf

Move gitweb.cgi, logo and css files into /var/www/git:

 $ sudo mv /usr/share/gitweb/* /var/www/git
 $ sudo mv /usr/lib/cgi-bin/gitweb.cgi /var/www/git

Make some changes in /etc/gitweb.conf:

 $ sudo vim /etc/gitweb.conf
$projectroot = '/var/cache/git/';
$git_temp = "/tmp";
#$home_link = $my_uri || "/";
$home_text = "indextext.html";
$projects_list = $projectroot;
$stylesheet = "/git/gitweb.css";
$logo = "/git/git-logo.png";
$favicon = "/git/git-favicon.png";

Reload the git config into Apache:

 $ sudo /etc/init.d/apache2 reload

First, initialize git in our project by creating a repository and setting name and email:

 $ cd /var/cache/git/
 $ mkdir project.git
 $ cd project.git
 $ git init
 $ echo "Short project's description" > .git/description
 $ git config --global user.name "Your Name"
 $ git config --global user.email "you@example.com"
 $ git commit -a

Marking a repository as exported is done by using the file git-daemon-export-ok.

 $ cd /var/cache/git/project.git
 $ touch .git/git-daemon-export-ok

Git has a mini-server for git repositories. It is small and cute, and suitable for sharing repositories. Starting git daemon with our repository as base path, base-path should not end in a slash.

 $ git daemon --base-path=/var/cache/git --detach --syslog --export-all

Now the git daemon is running on port 9418 on your computer, we can start to use it with the URL git:///location. You can do a copy to your development environment:

 $ git clone git://server/project.git project

If our clone succeeded, we should now have a local directory called project.