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.