Serving Git projects via http/https
Um im Team an einem gemeinsamen Git Projekt zu arbeiten ist es sinnvoll ein zentrales Repository auf zu setzen. Für den Zugriff darauf bieten sich unterschiedliche Verfahren an.
- Local Protocol
- SSH
- Git Protocol
- http/https
Ich will hier keine Ausarbeitung über die Vor- und Nachteile der einzelnen Verfahren schreiben und verweise deshalb auf das sehr gute Pro Git von Scott Chacon (http://progit.org/book/ch4-1.html).
Um nun den Zugriff über http/https zu ermöglichen brauchen wir zu aller erst einen geeigneten Webserver, im Prinzip ist wohl jeder Server geeignet sofern er WebDAV unterstützt. Ich habe mich hier für den “guten alten” Apache entschieden. Eine wirklich gute Anleitung für die Apache Konfiguration ist von Matthias Lohr (http://www.matthias-lohr.net/183/eigener-git-repo-server). Für meine Bedürfnisse habe ich die Konfiguration etwas abgewandelt. Hier mal ein Auszug meines virtuellen hosts.
<VirtualHost *:443> ServerAdmin meine@email.adr DocumentRoot /var/www/git ServerName git.hydrauligsepp.dyndns.org ServerAlias git.hydrauligsepp.dyndns.org CustomLog /var/log/apache2/git.hydrauligsepp.dyndns.org.log combined ErrorLog /var/log/apache2/error-git.hydrauligsepp.dyndns.org.log <LocationMatch "/([a-zA-Z0-9\-_]+).git"> Dav on </LocationMatch> SSLEngine on SSLRequireSSL LimitRequestBody 104857600 #100MB <Directory /var/www/git> Options FollowSymLinks SymLinksIfOwnerMatch AllowOverride AuthConfig Order allow,deny Allow from all </Directory> </VirtualHost>
(Falls diese Konfigutation bei dir nicht funktioniert, empfehle ich meinen Artikel zum aufsetzen eines apache https Servers mit eigener pki. http://hydrauligsepp.dyndns.org/blog/2010/10/serving-git-projects-via-httphttps/)
Nun kann jedes Verzeichnis/Repository, welches in /var/www/git/ liegt und auf .git endet (auf .git sollte in aller Regel ein remote Repository enden) gelesen und beschrieben werden. Eine Zugriffskontrolle kann entweder zentral im Virtualhost oder für jedes Verzeichnis einzeln via .htaccess Datei geregelt werden, z.B. so:
AuthType Basic AuthName “My repo with git” AuthUserFile /var/www/git/.htpasswd <Limitexcept GET HEAD PROPFIND OPTIONS REPORT> Require valid-user </Limitexcept>
Mehr zum Thema Authentifizierung unter http://httpd.apache.org/docs/2.2/howto/auth.html
Diese Konfiguration sorgt dafür, dass jeder lesen, aber nur authentifizierte Benutzer in das Repository schreiben können.
Damit währen die Vorarbeiten für unser zentrales Repository geschaffen. Um ein schon bestehendes Projekt nun Verfügbar zu machen muss dieses zu aller erst in ein –bare Repository umgewandelt werden, der post-update hook aktiviert und update-server-info ausgeführt werden, z.B. so.
cd /var/www/git git clone --bare /path/to/git_project git_project.git cd git_project.git mv hooks/post-update.sample hooks/post-update chmod +x hooks/post-update git update-server-info cd .. sudo chown -R www-data:www-data *.git
Das erste Projekt ist jetzt bereit um via https gepullt und gepusht zu werden. Damit dies jedoch wirklich funktioniert muss auf dem Client noch entweder das Web Serverzertifikat installiert werden oder via
git config --global http.sslVerify false
die Verifizierung des selben abgeschaltet werden.