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