Am bekanntesten ist hier wohl der Dienst GitHub auf dem auch ich viele meiner OpenSource Projekte hoste.

Was aber wenn ich ein privates Git brauche? Also einen “Git-Server” nur für mich und mein Team ganz privat?

*Ich weiß der Begriff “Git-Server” ist nicht ganz korrekt, erfüllt hier aber mal seinen Zweck.

Also eine Servermaschine welche alle meine Repositories verwaltet und als Master für alle an den Projekten beteiligten Mitarbeitern dient? Kein Problem! Wir setzen uns einen auf!

Systemumgebung

Ich verwende hierfür einen Ubuntu 12.04 LTS Server. Diese Anleitung solte aber auch mit nachfolgenden Versionen und auch mit Debian Servern funktionieren.

Installation

Als erstes müssen wir uns einmal git an sich installieren und wo wir schon dabei sind auch die Python Setuptools. Also verbinden wir uns per ssh auf den server unserer Wahl und beginnen wir folgt.

Select Code
sudo apt-get update
sudo apt-get install git-core
sudo apt-get install python-setuptools

Anschließend clonen wir uns die aktuelle Version von gitosis in ein Verzeichnis unserer Wahl und installieren es.

Select Code
git clone https://github.com/tv42/gitosis.git
cd gitosis
sudo python setup.py install

Als letzten Schritt der Installation brauchen wir noch einen git-user. Dieser heißt dann sinnigerweise auch git. Wichtig bei diesem User ist nur, dass er ein Home und eine Shell hat.

Select Code
sudo adduser --system --shell /bin/sh --gecos 'git version control' -group  --home /home/git git

Damit wäre die Basisinstallation dann auch schon erledigt.

Konfiguration

Nun wechseln wir auf unsere lokale Maschine, also weg vom Git-Server um uns einen RSA Key zu generieren sofern wir nicht schon einen haben.

Select Code
ssh-keygen -t rsa

Das RSA Keyfile, welches wir benötigen, befindet sich typischerweise in eurem Home-Verzeichnis unter .ssh und endet auf .pub. Diese Datei kopieren wir nun auf den Git-Server nach /tmp.

Select Code
scp <strong><your-key></strong>.pub <strong><your-user></strong>@<strong><your-server></strong>:/tmp

Nun gehen wir wieder zurück auf den Server und initialisieren Gitosis und fügen dabei gleich unseren Key zu den autorisierten Keys hinzu.

Select Code
sudo -H -u git gitosis-init < /tmp/<strong><your-key></strong>.pub

Bevor es nun endlich richtig losgeht noch eine kleiner Hinweis. Es kommt immer wieder vor, dass der Post-Update Hook nicht ausführbar ist. Um dem zuvorzukommen führen wir schnell noch folgenden Befehl am Server aus.

Select Code
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

Einrichten eines Repositories

Jetzt kommt der richtige coole Teil der ganzen Geschichte, denn wir klonen uns lokal einfach mal das Repository ‘gitosis-admin’ aus. Dazu erstellen wir uns zuerst ein lokales Verzeichnis und klonen es dahinein.

Select Code
mkdir gitosis-admin
cd gitosis-admin/
git clone git@<strong><your-server></strong>:gitosis-admin.git

In diesem Verzeichnis finden wir nun einen Ordner “keydir”, darin befinden sich alle Keyfiles und eine Datei “gitosis.conf”. Jegliche Konfiguration am Server findet nun über dieses Repository statt. Anlegen eines neuen Repositorie Wir öffnen dazu die Datei gitosis.conf. Darin sollte nun in etwa so aussehen.

Select Code
[gitosis]

[group gitosis-admin]
members = <your-key-name-without-pub-at-the-end>
writable = gitosis-admin

Um einen neues Repository zu erzeugen müssen wir nur dieses File um  Zeilen wie folgende erweitern. Dieses Beispiel erzeugt ein neues Repository ?testproject? und ich habe darauf Rechte.

Select Code
[group testproject]
members = <your-key-name-without-pub-at-the-end>
writable = testproject

Nachdme wir diese Änderungen gemacht haben müssen wir noch unsere Änderungen zurück auf den Server spielen.

Select Code
git add .
git commit -m 'added test project'
git push

Das könnt ihr jetzt testen indem ihr das Repository in einen neuen ORdner lokal abruft eine Testdatei anlegt und das ganze dann wieder pusht.

Select Code
mkdir /somedir/testproject
cd /somedir/testproject/
git init
git remote add origin git@<your-server>:testproject.git
echo 'mein test dokument' > test.txt
git add .
git commit -m 'erster Testcommit'
git push origin master

Hinzufügen weiterer Benutzer

Das ist  nun wirklich einfach. Ihr  müsst nur von den anderen Teammitgliedern ihre Public-RSA Keys einsammeln und sie in den Ordner “keydir” des Repositorys gitosis-admin kopieren und danach die Namen der Keyfiles ohne .pub unter Member in der entsprechenden Group in dem File gitosis.conf anhängen um sie auf die einzelnen Repositories zu berechtigen. Danach müsst ihr nur noch das Repository commiten und pushen.

Fertig! Schon habt  ihr euer eigenes Git!