
Oh my Git!
23. Aug 2009, 02:04
Bisher habe ich die Übungsaufgaben, die im Semester so anfallen, mit Subversion verwaltet. Ich kann mich eigentlich nicht beklagen, hatte nie Probleme damit, wollte aber nach dem Post von Ronny ein verteiltes System probieren.
Meine Entscheidung viel auf Git, aus dem einfach Grund, dass ich eins wählen musste.
Jetzt stand ich aber vor einem Problem. Ich nutze das SVN nicht allein. Da Git nun aber eine dezentrale Versionsverwaltung ist, verlaufen viele Suchanfragen zur Installation in die verschiedensten Richtungen, nur nicht zur Einrichtung einer zentralen Sammlung (wie man sie dann nutzt ist leicht zu erfahren). Also hab ich mich eben selbst auf den Weg durch die Dokus gemacht, hier meine kleine Anleitung (natürlich für Debian) wie es Funktioniert:
Einrichten des Servers
Wie immer müssen wir ein wenig Software dazu installieren:
gitosis
ist der Schlüssel, es verwaltet die verschiedenen User und Repositories. Es wird auch ein neuer User mit dem Namen gitosis
angelegt, dessen Home-Directory von Haus aus in /srv/gitosis
landet. Da ich aber solche Sachen gern in /home
liegen habe, wurde kurzer Hand die /etc/passwd
angepasst, jetzt bewohnt gitosis
das Verzeichnis /home/git
.
Jetzt können wir auch schon das erste Repository initialisieren. Da Git's Kommunikation auf SSH beruht, managed gitosis
die Connections via SSH-Keys. Wer sich also bis Dato noch keinen erstellt hat, sollte dies jetzt tun und den Key des Clients dann auf den Server schieben (meiner lagert unter /tmp/id_rsa.pub
). Diesen brauchen wir nun zum initialisieren (er authentifiziert uns später als admin):
2
3
4
5
6
7
gitosis@binfalse:~$ pwd
/home/git
gitosis@binfalse:~$ gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
gitosis@binfalse:~$ exit
Als Benutzer gitosis
wurde nun das erste und auch wichtigste Repository /home/git/repositories/gitosis-admin.git/
angelegt. Mit ihm werden alle weiteren Repositories und Benutzer und Zugriffsrechte verwaltet.
Das war es eigentlich schon auf dem Server!
Einrichten des ersten Clients
Hier benötigen wir natürlich auch Git:
Nun checken wir das Konfigurationsrepository aus. Dies geht ohne Passwort, denn gitosis
hat oben unseren SSH-Key bekommen und kann uns damit identifizieren:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
esmz-designz@abakus ~ $ cd git/
esmz-designz@abakus ~/git $ git clone gitosis@binfalse.de:gitosis-admin.git
Initialized empty Git repository in /home/esmz-designz/git/gitosis-admin/.git/
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 1), reused 5 (delta 1)
Receiving objects: 100% (5/5), done.
Resolving deltas: 100% (1/1), done.
esmz-designz@abakus ~/git $ l
total 12K
drwxr-xr-x 3 esmz-designz 4.0K 2009-08-23 01:19 ./
drwxr-xr-x 21 esmz-designz 4.0K 2009-08-23 01:14 ../
drwxr-xr-x 4 esmz-designz 4.0K 2009-08-23 01:19 gitosis-admin/
esmz-designz@abakus ~/git $ cd gitosis-admin/
esmz-designz@abakus ~/git/gitosis-admin $ l
total 20K
drwxr-xr-x 4 esmz-designz 4.0K 2009-08-23 01:19 ./
drwxr-xr-x 3 esmz-designz 4.0K 2009-08-23 01:19 ../
drwxr-xr-x 8 esmz-designz 4.0K 2009-08-23 01:19 .git/
-rw-r--r-- 1 esmz-designz 89 2009-08-23 01:19 gitosis.conf
drwxr-xr-x 2 esmz-designz 4.0K 2009-08-23 01:19 keydir/
Im Ordner keydir
werden alle SSH-Keys der Mitbenutzer gesammelt, aktuell ist nur mein Key Namens esmz-designz@abakus.pub enthalten.
Die Datei gitosis.conf
ist sozusagen das Kontrollzentrum. Hier werden Projekte und Benutzer verwaltet.
Im Auslieferungszustand ist die Datei noch recht leer:
2
3
4
5
[group gitosis-admin]
writable = gitosis-admin
members = esmz-designz@abakus
Die Syntax ist recht intuitiv:
2
3
4
5
6
[group GRUPPENNAME]
members = MEMBER1 MEMBER2 ETC
writable = REPOSTITORY1 REPOSTITORY2
readonly = REPOSTITORY3 ETC
Um eine neue Gruppe zu erstellen wird also einfach eine weitere group
Direktive erstellt. So entsteht zum Beipiel ein neues Repository test:
2
3
writable = test
members = esmz-designz@abakus
Damit bin ich in der Grupper dev, die Schreibrechte auf das Repository test hat. Das ganze wird gespeichert und eingecheckt:
2
3
4
[master 51cdf92] Created repository test.
1 files changed, 4 insertions(+), 0 deletions(-)
esmz-designz@abakus ~/git/gitosis-admin $ git push
Nach dem push
öffnet sich der Editor eures Vertrauens und ihr dürft noch ein Kommentar hinterlassen. Alternativ kann man dies auch mit -m
über die Kommandozeile tun.
Damit hab ich als "esmz-designz@abakus" Zugriff auf das neue Repository "gitosis@binfalse.de:test.git". Das Repository selbst gibt es so aber noch nicht, das können wir nun erstellen:
2
3
4
5
6
esmz-designz@abakus ~/git $ mkdir test
esmz-designz@abakus ~/git $ cd test/
esmz-designz@abakus ~/git/test $ git init
Initialized empty Git repository in /home/esmz-designz/git/test/.git/
esmz-designz@abakus ~/git/test $ git remote add origin gitosis@binfalse.de:test.git
Wenn schon eine solches Arbeitsverzeichnis existieren sollte (eventuell ein altes SVN), braucht, kann man darin auch direkt ein init
absetzen.
Nun probieren wir eine Datei hinzuzufügen:
2
3
4
5
6
7
8
9
10
11
12
13
14
esmz-designz@abakus ~/git/test $ git add WM_BERLIN
esmz-designz@abakus ~/git/test $ git commit -m "Start der ersten Revision"
[master (root-commit) 444915d] Start der ersten Revision
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 WM_BERLIN
esmz-designz@abakus ~/git/test $ git push origin master:refs/heads/master
Initialized empty Git repository in /home/git/repositories/test.git/
Counting objects: 3, done.
Writing objects: 100% (3/3), 245 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitosis@binfalse.de:test.git
* [new branch] master -> master
esmz-designz@abakus ~/git/test $
Mit dem push
-Befehl wurde das Repository nun angelegt.
Benutzer hinzufügen
Um weitere User an den Projekten mitwirken zu lassen, recht es ihre SSH-Keys zu bekommen. Diese müssen dann in [...]/gitosis-admin/keydir/USERNAME@CLIENT.pub gespeichert werden. Um ihnen dann die nötigen Rechte zu erteilen, werden sie einfach in der gitosis.conf korrekt platziert. Bekomm ich also einen Key von rumpel am Rechner rumpelkammer, kopier ich ihn:
und gebe ihm Schreibrechte am Repository test
2
3
writable = test
members = esmz-designz@abakus rumpel@rumpelkammer
Und natürlich nicht vergessen, das Config-Repo wieder einzuchecken!
Repository veröffentlichen
Das Repository können bisher nur Benutzer auschecken, die mir ihren SSH-Key überlassen haben. Möchte man die Arbeit aber veröffentlichen ist diese Prozedur recht aufwendig! Hierfür gibt es einen kleinen Trick bei Git. Man lege einfach die Datei git-daemon-export-ok
auf dem Server in die Repositories, die frei zugänglich sein sollen, also in meinem Fall:
Nun kommen die Leute von aussen immer noch nicht dran. Man muss entweder den Apache konfigurieren, damit er die git-Repos ausliefert oder man benutzt den git-daemon
. Dieser lauscht gewöhnlich am Port 9418 (Firewall beachten) und wartet, dass jemand zum auschecken kommt.
Ich habe ihn unter dem User gitosis
laufen:
2
3
4
5
binfalse /home # ps -ef | grep git
gitosis 3216 1 0 00:57 ? 00:00:00 git-daemon --base-path=/home/git/repositories/ --verbose --detach
root 3242 16141 0 00:58 pts/8 00:00:00 grep --color=auto git
binfalse /home #
Und da ein solcher Daemon im allgemeinen auch mal die Hufe hebt, hab ich gleich einen Cronjob eingerichtet, der überprüft ob noch alles läuft:
Jetzt kann es jedermann auschecken:
Na also, gar kein Problem! Jetzt weiß ich auch warum es dafür kaum Tutorials gibt, die ganze Geschichte ist ja doch recht intuitiv. Unterwegs sind mir noch zwei Seiten untergekommen, die ich euch natürlich auch ans Herz legen muss:
Git-Cheats und Git -vs- SVN
Also viel Git!
Kategorien: Software