gitweb mit Gruppierung der Repositories

gitweb mit Gruppierung der Repositories

normalerweise ist vorgesehen, dass es nur ein Verzeichnis gibt, in denen alle git-repositories liegen, welche von gitweb verwendet werden können.

In der Nachfolgenden Anleitung war das Ziel, Gruppen von repositories zusammenzufassen und für jede dieser Gruppen eine eigene gitweb-Instanz zu verwenden. So sieht ein Benutzer nicht mehr alle repositories, sondern nur eine Gruppe von repositories.

Weitere Anforderungen:

  • Verwenden von SSL
  • Passwortschutz

Die Anleitung ist getestet für debian wheezy (7.0)

gitweb installieren und konfigurieren

gitweb installieren:

apt-get install gitweb

Um mehrere git-root-Verzeichnisse zu verwenden, muss man das project-root dynamisch machen.

Hierzu folgende Zeile in der Datei /etc/gitweb.conf verwenden:

$projectroot = $ENV{'GITWEB_PROJECTROOT'};

apache VirtualHost einrichten

Wenn man pro Projektgruppe einen VirtualHost verwenden möchte, kann man schon im Virtualhost das gitweb.cgi verwenden und die Variable für das project-root setzen: SetEnv GITWEB_PROJECTROOT      /var/www/gitweb.example.com/git

In dieser Anleitung wollen wir jedoch den VirtualHost für mehrere Projektgruppen verwenden. In diesem Fall darf man in der VirtualHost-Konfiguration KEIN GITWEB_PROJECTROOT setzen.

Wir richten nun einen apache VirtualHost für https ein, der für mehrere Gruppen von Repositories zuständig sein soll. Hierfür neue Datei etc/apache2/sites-available/gitweb.example.com befüllen mit:

<VirtualHost *:443>
        ServerAdmin webmaster@example.com
        ServerName gitweb.example.com
        DocumentRoot /var/www/gitweb.example.com/git
        <Directory "/var/www/gitweb.example.com/git">
                 AllowOverride All
        </Directory>
        SetEnv GITWEB_CONFIG    /etc/gitweb.conf
        ErrorLog /var/log/apache2/error-gitweb.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog /var/log/apache2/access-gitweb.log combined
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/example_com.crt
        SSLCertificateKeyFile /etc/ssl/private/example_com.key
        SSLCertificateChainFile /etc/ssl/certs/Root_CA.pem
</VirtualHost>

Dann symlink anlegen:

cd /etc/apache2/sites-enabled
ln -s ./../sites-available/gitweb.example.com

Verzeichnisse anlegen:

mkdir -p /var/www/gitweb.example.com/git
mkdir -p /var/www/gitweb.example.com/password

Projektgruppe anlegen

repo-Gruppe einrichten:

mkdir -p /var/www/gitweb.example.com/git/myprojectgroupcd /var/www/gitweb.example.com/git/myprojectgroupln -s /path/to/git/root/myprojectaln -s /path/to/git/root/myprojectbln -s /usr/share/gitweb/gitweb.cgiln -s /usr/share/gitweb/static

.htaccess befüllen mit:

AuthType Digest
AuthName git
AuthDigestDomain /
AuthDigestProvider file
AuthUserFile ../../password/myprojectgroup.digest
require valid-user
AddHandler cgi-script .cgi
SetEnv GITWEB_PROJECTROOT      /var/www/gitweb.example.com/git/myprojectgroup/
Options +ExecCGI
RewriteEngine on
RewriteRule ^(/|/gitweb.cgi)?$              ./gitweb.cgi [QSA,L,PT]

Passwörter für die Gruppe setzen:

cd /var/www/gitweb.example.com/passwordhtdigest -c myprojectgroup.digest git newuser

Apache neu starten:

service apache2 restart

Schöneres Theme verwenden

cd /var/www/gitweb.example.com
mkdir -p assets/static
cd assets
git clone https://github.com/kogakure/gitweb-theme.git gitweb-theme
cd static
ln -s ./../gitweb-theme/git-favicon.png
ln -s ./../gitweb-theme/git-logo.png
ln -s ./../gitweb-theme/gitweb.css
ln -s ./../gitweb-theme/gitweb.js
cd ../../git/myprojectgrouprm static
ln -s ./../../assets/static