Basis für folgende (noch nicht fertiggestellte) Kurzanleitung ist Debian. Bei anderen Distributionen sind speziell für die Paketinstallation andere Befehle anzuwenden. Ich gehe aber davon aus, dass die Benutzer dieser Distributionen diese kennen.
Zunächst die Installation von git auf dem Server und Vorbereiten der Speicherverzeichnisse
apt-get install git gitweb
mkdir /var/cache/git
cd /var/cache/git
mkdir test.git
cd test.git
git init --bare
chown -R www-data.www-data /var/cache/git/test.git
Erstellen von /etc/xinetd.d/git-daemon (nur notwendig, wenn git-Protokoll benötigt wird) mit diesem Inhalt:
service git
{
disable = no
type = UNLISTED
port = 9418
socket_type = stream
wait = no
user = nobody
server = /usr/lib/git-core/git-daemon
server_args = --inetd --export-all --base-path=/var/cache --syslog
log_on_failure += USERID
}
Auf einem öffentlichen Server sollte man darauf verzichten, da das git-Protokoll keine Sicherheitsmechanismen wie Benutzername/Kennwort oder dergleichen kennt. Stattdessen sollte man die Kommunikation über das http-Protokoll wählen, das nachfolgend beschrieben wird.
Voraussetzung für die Kommunikation per http ist natürlich ein Webserver, hier setze ich voraus, dass sich auf dem Server bereits ein lauffähiger Apache befindet.
Erstellen der Datei /etc/apache2/conf.d/git mit diesem Inhalt:
SetEnv GIT_PROJECT_ROOT /var/cache/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<Location /git>
AuthType Basic
AuthName "Git Access"
Require group committers
AuthUserFile /var/www/git/.htusers
AuthGroupFile /var/www/git/.htgroups
</Location>
Ausführen von diesen Schritten, um die Zugriffe auf git per http-Protokoll zu ermöglichen
mkdir /var/www/git
cd /var/www/git
vi .htgroups
Die .htgroups Datei bekommt z.B. diesen Inhalt:
commiters: <yourusername>
Die .htpasswd-Datei erstellen wir mit dem Befehl htpasswd im Verzeichnis /var/www/git, dabei werden wir zweimal nach dem Passwort gefragt.
htpasswd -c .htusers <yourusername>
New password: <yourpassword>
Re-type new password: <yourpassword>
Adding password for user <yourusername>
Dann noch den Apache neu laden (/etc/init.d/apache2 restart) und wir sollten per http auf git zugreifen können.
Auf dem Client können wir das jetzt testen. In einem passenden Verzeichnis führen wir aus:
git clone <host>/git/test.git
Cloning into 'test'...
Username for 'http://<host>': <yourusername>
Password for 'http://<yourusername>@<host>': <yourpassword>
warning: You appear to have cloned an empty repository.
Wenn wir so weit gekommen sind, sieht es schon sehr gut aus. Jetzt noch die umgekehrte Richtung testen.
Dazu kopieren wir ein paar Dateien in das neu generierte git-Verzeichnis und führen dann in dem Verzeichnis dieses aus:
git add .
git commit
Beim "commit" etwas Text eingeben oder einfach die Default-Zeile mit dem "Initial commit" von ihrem "#" am Anfang befreien. Es muss mindestens eine nicht auskommentierte Zeile im Commit-Text existieren, sonst wird das Commit nicht ausgeführt!
Wenn es keine Fehler gegeben hat, dann sollten wir im Verzeichnis ./.git/objects neben den vorher vorhandenen "info" und "pack" auch noch weitere Unterverzeichnisse mit zweistelligen Hexadezimal-Namen sehen.
Auf unseren Server können wir diese neuen Dateien jetzt hiermit hochladen:
git push --all
Im Resultat sollten wir nun auch auf dem Server im "objects"-Verzeichnis die neuen Unterverzeichnisse sehen.
Übernahme von Subversion (svn)
apt-get install git-svn
git svn clone svn://<svn-url> <destinationdir>