Sobald mehrere Leute an einem Dokument arbeiten wollen oder man eine Dokumentenhistory braucht, ist eine Versionsverwaltung Gold wert. In der Vergangenheit war ich immer auf das Wohlwollen eines Freundes angewiesen um Zugriff auf einen SVN-Server zu bekommen. Da ich mittlerweile einen eigenen vServer habe, will ich die Gelegenheit nutzen und auf git umsteigen. Da git eigentlich auf eine verteilte Struktur aufsetzt, ist ein eigenständiger Server nicht unbedingt nötig, erleichtert aber den Datenaustausch bei mehreren Nutzern. Um nicht für jeden Git-Nutzer einen vollwertigen Systemaccount anlegen zu müssen, kommt zusätzlich gitosis zum Einsatz.
Server konfigurieren
Auf Serverseite benötigen wir zu git-core
noch gitosis
. Was wir durch
sudo aptitude install git-core gitosis
schnell erledigt haben. Dabei werden zusätzlich noch folgende Pakete mitinstalliert
libcurl3-gnutls libdigest-sha1-perl liberror-perl patch python-central
python-pkg-resources python-setuptools python-support rsync
Da eine Anmeldung mittels Passwort unerwünscht ist, brauchen wir zur Anmeldung ein öffentliches Zertifikat. Je nachdem unter welchem Account (Rechner) man später gitosis
administrieren will, wählt man die id_rsa.pub
aus. Diese findet man in ~/.ssh
. Sollte dies nicht der Fall sein, kann einfach mittels
ssh-keygen -t rsa
ein Schlüsselpaar erzeugt werden. Die Initialisierung des Administrationsrepository erfolgt dann mittels
sudo -H -u gitosis gitosis-init < id_rsa.pub, was uns auch bestätigt wird
Initialized empty Git repository in /srv/gitosis/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /srv/gitosis/repositories/gitosis-admin.git/
Das Administrationsrepository gitosis-admin
lässt sich nun einfach klonen mittels
git clone gitosis@example.com:gitosis-admin.git
Sollte der Zugriff per ssh nur bestimmten Nutzern erlaubt sein (was sich z.B. durch eine Passwortabfrage bemerkbar macht), muss die /etc/ssh/sshd_config
entsprechend um den Nutzer gitosis
erweitert werden, also bspw.
AllowUsers user gitosis
Nach einem Neustart des SSH-Servers durch sudo invoke-rc.d ssh restart
sollte der Zugriff auf gitosis-admin
gelingen.
Repository anlegen
Um ein neues Repository anzulegen, editiert man die gitsois.conf
im Administrationsrepository und erweitert sie um folgenden Block.
[group project-team]
members = user1 user2
writable = project
Damit hat man das Repository project
für die Nutzer user1
und user2
angelegt. Damit diese auch tatsächlich Zugriff erhalten, müssen deren öffentliche Schlüssel im Ordner keydir
liegen. In unserem Fall sind dies die Dateien user1.pub
und user2.pub
. Anschließend die Änderungen mittels
git commit -a -m "Repo project fuer user1 und user2 erstellt"
git push
auf den Server übertragen und der administrative Teil ist erledigt.
user1
oder user2
hat nun die Möglichkeit das Repository zu initialisieren und hochzuladen, was wie folgt aussehen kann:
mkdir project
cd project
git init
git remote add origin gitosis@example:project.git
git config branch.master.remote 'origin'
git config branch.master.merge 'refs/heads/master'
echo "Kurze Projektbeschreibung" > .git/description
# Dateien editieren, committen ...
git push origin master:refs/heads/master
Nutzer hinzufügen
Um einen Nutzer hinzuzufügen wird dessen öffentlicher Schlüssel benötigt. Für Benutzer hans
auf Maschine host
wird bspw. die id_rsa.pub
in hans@host.pub umbenannt, nach <code>gitosis-admin/keydir
kopiert und dem Repository hinzugefügt. In Kurzform
mv id_rsa.pub gitosis-admin/keydir/hans@host.pub
git add gitosis-admin/keydir/hans@host.pub
Nun muss noch die gitosis.conf
entsprechend angepasst werden. Angenommen hans
möchte am Projekt project
mitarbeiten, sieht das dann in etwa so aus
[group project-team]
members = user hans@host
writable = project
Nach einer Übertragung mittels
git commit -a -m "Nutzer hans hinzugefuegt"
git push
kann hans
das Repository mittels
git clone gitosis@example.com:project.git
auschecken.
Client konfigurieren
Auf Clientseite bleibt eigentlich nur die Installation von git-core
. Damit beim Commit der korrekte Name und die Mailadresse angezeigt wird, sollt man
git config --global user.name 'Hans Mustermann'
git config --global user.email 'hans@example.com'
ausführen. Weiterhin empfiehlt sich noch das Ändern weiterer Variablen um sich die Arbeit etwas schöner zu machen:
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto
git config --global color.status auto
git config --global core.editor vim
git config --global merge.tool vimdiff