Git Daemon

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

Der Git Daemon ist ein einfacher Service, der den Zugriff auf Repositories über das Git-Protokoll ermöglicht. Der Daemon wird automatisch mit dem Git-Packet installiert, jedoch noch nicht automatisch gestartet. Standardmäßig ist der Dienst über den Port 9418 erreichbar und bietet darüber die freigegebenen Repos an. Welche Repos freigegeben werden sollen kann einerseits durch eine Datei im Repo-Verzeichnis, als auch über Pfadangaben beim Starten des Daemons erfolgen.

Freigabe eines Repos

Die Freigabe eine Repos erfolgt durch die Erzeugung einer Export-Datei im Repo. Zuerst ein Beispiel der Fehlermeldung, die erscheint, wenn das Repo nicht diese Datei enthält. Der Git daemon wird gestartet und erhält als Parameter ein Wurzelverzeichnis, in dem sich die Repos befinden:[1]

:~/repos$ git daemon --verbose --base-path=/home/tktest/repos

Ein Client versucht nun ein Repo zu klonen (in das Verzeichnis "git-d" (frei wählbar)), die Export-Datei am Server existiert jedoch noch nicht:

:~/Repos$ git clone git://192.168.56.101/dev-1 git-d/Cloning into git-d...
fatal: The remote end hung up unexpectedly

Daher gibt der Server auch folgende Fehlermeldung aus:

:~/repos$ [1421] Connection from 192.168.56.1:56262
[1421] Extended attributes (21 bytes) exist <host=192.168.56.101>
[1421] Request upload-pack for '/dev-1'
[1421] '/home/tktest/repos/dev-1': repository not exported.
[1418] [1421] Disconnected (with error)

Deshalb erhält das Repo "dev-1" die Export-Datei (am Server):

:~/repos$ cd dev-1
:~/repos/dev-1$ touch git-daemon-export-ok

Der Dienst wird nun neu gestartet und daraufhin kann ein Client auch das Repo klonen (am Client):

:~/Repos$ git clone git://192.168.56.101/dev-1 git-d/
Cloning into git-d...
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 18 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (1/1), done.

Standardmäßig werden die Repos nur read-only zum Klonen zur Verfügung gestellt. Soll auch ein push ermöglicht werden, kann dies über folgenden Parameter erfolgen:[2]

:~/repos/dev-1$ git daemon --verbose --base-path=/home/tktest/repos --enable=receive-pack &

Zu bedenken ist dabei, dass das Repo für alle anonym zugänglich wird, da über den Git daemon keine Authentifizierung erfolgt. Jeder, der von diesem Repo geklont hat, kann auch wieder dahin pushen (der selbe Client wie zuvor):

:~/Repos/git-d$ git push origin master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 334 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git://192.168.56.101/dev-1
   511cbea..55e54e4  master -> master

Einzelnachweise

  1. git-daemon manpage (man.he.net)
  2. Git archives (gelato.unsw.edu.au)

Das könnte Sie auch interessieren

Git Branches
Git Workflows
Git-annex Repository auf externer Festplatte