English ▾ Themen ▾ Neueste Version ▾ git-daemon zuletzt aktualisiert in 2.50.0

NAME

git-daemon - Ein wirklich einfacher Server für Git-Repositories

SYNOPSIS

git daemon [--verbose] [--syslog] [--export-all]
	   [--timeout=<n>] [--init-timeout=<n>] [--max-connections=<n>]
	   [--strict-paths] [--base-path=<path>] [--base-path-relaxed]
	   [--user-path | --user-path=<path>]
	   [--interpolated-path=<pathtemplate>]
	   [--reuseaddr] [--detach] [--pid-file=<file>]
	   [--enable=<service>] [--disable=<service>]
	   [--allow-override=<service>] [--forbid-override=<service>]
	   [--access-hook=<path>] [--[no-]informative-errors]
	   [--inetd |
	     [--listen=<host-or-ipaddr>] [--port=<n>]
	     [--user=<user> [--group=<group>]]]
	   [--log-destination=(stderr|syslog|none)]
	   [<directory>…​]

BESCHREIBUNG

Ein wirklich einfacher TCP Git-Daemon, der normalerweise auf Port "DEFAULT_GIT_PORT" alias 9418 lauscht. Er wartet auf eine Verbindung, die einen Dienst anfordert, und bedient diesen Dienst, wenn er aktiviert ist.

Er prüft, ob das Verzeichnis die magische Datei "git-daemon-export-ok" besitzt, und weigert sich, jedes Git-Verzeichnis zu exportieren, das nicht explizit auf diese Weise für den Export markiert wurde (es sei denn, der Parameter --export-all wird angegeben). Wenn Sie einige Verzeichnispfade als Argumente für git daemon übergeben, sind die Angebote auf Repositories innerhalb dieser Verzeichnisse beschränkt.

Standardmäßig ist nur der Dienst upload-pack aktiviert, der git fetch-pack und git ls-remote Clients bedient, welche von git fetch, git pull und git clone aufgerufen werden.

Dies ist ideal für schreibgeschützte Updates, d.h. das Holen von Git-Repositories.

Es gibt auch einen upload-archive, um git archive zu bedienen.

OPTIONEN

--strict-paths

Pfade exakt abgleichen (d.h. "/foo/repo" nicht zulassen, wenn der tatsächliche Pfad "/foo/repo.git" oder "/foo/repo/.git" ist) und keine benutzerbezogenen Pfade verwenden. git daemon weigert sich zu starten, wenn diese Option aktiviert ist und keine Verzeichnisargumente angegeben werden.

--base-path=<Pfad>

Alle Pfadanfragen neu zuordnen als relativ zum gegebenen Pfad. Dies ist eine Art "Git-Root" - wenn Sie git daemon mit --base-path=/srv/git auf example.com ausführen, dann wird, wenn Sie später von git://example.com/hello.git pullen, git daemon den Pfad als /srv/git/hello.git interpretieren.

--base-path-relaxed

Wenn --base-path aktiviert ist und die Repository-Suche fehlschlägt, wird git daemon mit dieser Option versuchen, ohne den Basisverzeichnispfad zu präfixieren. Dies ist nützlich, um auf die Verwendung von --base-path umzuschalten und gleichzeitig die alten Pfade zuzulassen.

--interpolated-path=<Pfadvorlage>

Zur Unterstützung von Virtual Hosting kann eine interpolierte Pfadvorlage verwendet werden, um alternative Pfade dynamisch zu konstruieren. Die Vorlage unterstützt %H für den Zielhostnamen, wie er vom Client geliefert wird, aber in Kleinbuchstaben umgewandelt, %CH für den kanonischen Hostnamen, %IP für die IP-Adresse des Servers, %P für die Portnummer und %D für den absoluten Pfad des benannten Repositories. Nach der Interpolation wird der Pfad gegen die Verzeichnislizenz geprüft.

--export-all

Erlaubt das Holen aus allen Verzeichnissen, die wie Git-Repositories aussehen (die Unterverzeichnisse objects und refs haben), auch wenn sie keine git-daemon-export-ok-Datei besitzen.

--inetd

Lässt den Server als Inetd-Dienst laufen. Impliziert --syslog (kann mit --log-destination= überschrieben werden). Inkompatibel mit den Optionen --detach, --port, --listen, --user und --group.

--listen=<Host oder IP-Adresse>

Auf einer bestimmten IP-Adresse oder einem Hostnamen lauschen. IP-Adressen können entweder eine IPv4-Adresse oder eine IPv6-Adresse sein, wenn diese unterstützt werden. Wenn IPv6 nicht unterstützt wird, ist auch --listen=<Hostname> nicht unterstützt und --listen muss eine IPv4-Adresse erhalten. Kann mehrmals angegeben werden. Inkompatibel mit der Option --inetd.

--port=<n>

Auf einem alternativen Port lauschen. Inkompatibel mit der Option --inetd.

--init-timeout=<n>

Timeout (in Sekunden) zwischen dem Moment der Verbindungsherstellung und dem Eintreffen der Client-Anfrage (typischerweise ein eher niedriger Wert, da dies praktisch sofort erfolgen sollte).

--timeout=<n>

Timeout (in Sekunden) für spezifische Client-Unteranfragen. Dies umfasst die Zeit, die der Server benötigt, um die Unteranfrage zu verarbeiten, und die Zeit, die auf die nächste Client-Anfrage gewartet wird.

--max-connections=<n>

Maximale Anzahl gleichzeitiger Clients, standardmäßig 32. Auf Null setzen für keine Begrenzung.

--syslog

Kurzform für --log-destination=syslog.

--log-destination=<Ziel>

Protokollmeldungen an das angegebene Ziel senden. Beachten Sie, dass diese Option nicht --verbose impliziert, sodass standardmäßig nur Fehlerbedingungen protokolliert werden. Das <Ziel> muss eines der folgenden sein:

stderr

In Standardfehlerausgabe schreiben. Beachten Sie, dass bei Angabe von --detach der Prozess die Verbindung zur echten Standardfehlerausgabe trennt, wodurch dieses Ziel praktisch äquivalent zu none wird.

syslog

An syslog schreiben, unter Verwendung des Bezeichners git-daemon.

none

Protokollierung deaktivieren.

Das Standardziel ist syslog, wenn --inetd oder --detach angegeben ist, andernfalls stderr.

--user-path
--user-path=<Pfad>

Erlaubt die Verwendung der ~user-Notation in Anfragen. Wenn dies ohne Parameter angegeben wird, wird eine Anfrage an git://host/~alice/foo als Anfrage zur Bearbeitung des Repositories foo im Home-Verzeichnis des Benutzers alice interpretiert. Wenn --user-path=<Pfad> angegeben ist, wird dieselbe Anfrage als Anfrage zur Bearbeitung des Repositories <Pfad>/foo im Home-Verzeichnis des Benutzers alice interpretiert.

--verbose

Details über eingehende Verbindungen und angeforderte Dateien protokollieren.

--reuseaddr

Verwendet SO_REUSEADDR beim Binden des Listening-Sockets. Dies erlaubt dem Server, neu zu starten, ohne auf das Timeout alter Verbindungen warten zu müssen.

--detach

Vom Shell trennen. Impliziert --syslog.

--pid-file=<Datei>

Speichert die Prozess-ID in <Datei>. Wird ignoriert, wenn der Daemon unter --inetd läuft.

--user=<Benutzer>
--group=<Gruppe>

Ändert die uid und gid des Daemons, bevor die Service-Schleife betreten wird. Wenn nur --user ohne --group angegeben wird, wird die primäre Gruppen-ID für den Benutzer verwendet. Die Werte der Option werden an getpwnam(3) und getgrnam(3) übergeben, und numerische IDs werden nicht unterstützt.

Die Angabe dieser Optionen ist ein Fehler, wenn sie mit --inetd verwendet werden; verwenden Sie die Funktionalität des Inetd-Daemons, um dasselbe zu erreichen, bevor Sie git daemon starten, falls erforderlich.

Wie viele Programme, die die Benutzer-ID wechseln, setzt der Daemon keine Umgebungsvariablen wie HOME zurück, wenn er Git-Programme ausführt, z.B. upload-pack und receive-pack. Wenn Sie diese Option verwenden, möchten Sie möglicherweise auch HOME auf das Home-Verzeichnis von <Benutzer> setzen und exportieren, bevor Sie den Daemon starten, und sicherstellen, dass alle Git-Konfigurationsdateien in diesem Verzeichnis von <Benutzer> gelesen werden können.

--enable=<Dienst>
--disable=<Dienst>

Aktiviert/deaktiviert den Dienst standardmäßig global. Beachten Sie, dass ein global deaktivierter Dienst immer noch pro Repository aktiviert werden kann, wenn er als überschreibbar markiert ist und das Repository den Dienst mit einem Konfigurationselement aktiviert.

--allow-override=<Dienst>
--forbid-override=<Dienst>

Erlaubt/verbietet die Überschreibung des globalen Standards mit der Repository-Konfiguration. Standardmäßig dürfen alle Dienste überschrieben werden.

--informative-errors
--no-informative-errors

Wenn informative Fehler aktiviert sind, meldet git-daemon dem Client ausführlichere Fehler und unterscheidet Zustände wie "Repository nicht gefunden" von "Repository nicht exportiert". Dies ist für Clients bequemer, kann aber Informationen über die Existenz nicht exportierter Repositories preisgeben. Wenn informative Fehler nicht aktiviert sind, melden alle Fehler dem Client "Zugriff verweigert". Der Standard ist --no-informative-errors.

--access-hook=<Pfad>

Jedes Mal, wenn ein Client eine Verbindung herstellt, wird zuerst ein externes Kommando, das durch den <Pfad> angegeben wird, mit dem Servicenamen (z.B. "upload-pack"), dem Pfad zum Repository, dem Hostnamen (%H), dem kanonischen Hostnamen (%CH), der IP-Adresse (%IP) und dem TCP-Port (%P) als Kommandozeilenargumente ausgeführt. Das externe Kommando kann entscheiden, den Dienst abzulehnen, indem es mit einem von Null verschiedenen Status beendet wird (oder ihn durch Beenden mit einem Null-Status erlaubt). Es kann auch die Umgebungsvariablen $REMOTE_ADDR und $REMOTE_PORT überprüfen, um bei der Entscheidungsfindung etwas über den Anfragenden zu erfahren.

Das externe Kommando kann optional eine einzelne Zeile an seine Standardausgabe schreiben, die dem Anfragenden als Fehlermeldung gesendet wird, wenn es den Dienst ablehnt.

<Verzeichnis>

Die restlichen Argumente stellen eine Liste von Verzeichnissen dar. Wenn Verzeichnisse angegeben werden, bedient der git-daemon-Prozess ein angefordertes Verzeichnis nur, wenn es sich in einem dieser Verzeichnisse befindet. Wenn --strict-paths angegeben ist, muss das angeforderte Verzeichnis exakt einem dieser Verzeichnisse entsprechen.

SERVICES

Diese Dienste können global mit den Kommandozeilenoptionen dieses Befehls aktiviert/deaktiviert werden. Wenn eine feinere Steuerung gewünscht wird (z.B. um git archive nur in wenigen ausgewählten Repositories, die der Daemon bedient, auszuführen), kann die Repository-Konfigurationsdatei verwendet werden, um sie zu aktivieren oder zu deaktivieren.

upload-pack

Dies bedient git fetch-pack und git ls-remote Clients. Es ist standardmäßig aktiviert, aber ein Repository kann es deaktivieren, indem es das Konfigurationselement daemon.uploadpack auf false setzt.

upload-archive

Dies bedient git archive --remote. Es ist standardmäßig deaktiviert, aber ein Repository kann es aktivieren, indem es das Konfigurationselement daemon.uploadarch auf true setzt.

receive-pack

Dies bedient git send-pack Clients und erlaubt anonymes Pushen. Es ist standardmäßig deaktiviert, da es *keine* Authentifizierung im Protokoll gibt (mit anderen Worten, jeder kann alles in das Repository pushen, einschließlich des Entfernens von Refs). Dies ist ausschließlich für geschlossene LAN-Umgebungen gedacht, in denen alle freundlich sind. Dieser Dienst kann aktiviert werden, indem das Konfigurationselement daemon.receivepack auf true gesetzt wird.

BEISPIELE

Wir gehen von folgenden Einträgen in /etc/services aus
$ grep 9418 /etc/services
git		9418/tcp		# Git Version Control System
git daemon als inetd-Server

Um git daemon als Inetd-Dienst einzurichten, der beliebige Repositories in /pub/foo oder /pub/bar bedient, fügen Sie einen Eintrag wie den folgenden in /etc/inetd ein, alles in einer Zeile

	git stream tcp nowait nobody  /usr/bin/git
		git daemon --inetd --verbose --export-all
		/pub/foo /pub/bar
git daemon als inetd-Server für virtuelle Hosts

Um git daemon als Inetd-Dienst einzurichten, der Repositories für verschiedene virtuelle Hosts, www.example.com und www.example.org, bedient, fügen Sie einen Eintrag wie den folgenden in /etc/inetd ein, alles in einer Zeile

	git stream tcp nowait nobody /usr/bin/git
		git daemon --inetd --verbose --export-all
		--interpolated-path=/pub/%H%D
		/pub/www.example.org/software
		/pub/www.example.com/software
		/software

In diesem Beispiel enthält das Stammverzeichnis /pub ein Unterverzeichnis für jeden unterstützten virtuellen Hostnamen. Darüber hinaus werben beide Hosts Repositories einfach als git://www.example.com/software/repo.git. Für Clients vor 1.4.0 könnte auch ein Symlink von /software in das entsprechende Standard-Repository erstellt werden.

git daemon als regulärer Daemon für virtuelle Hosts

Um git daemon als regulären, Nicht-Inetd-Dienst einzurichten, der Repositories für mehrere virtuelle Hosts basierend auf deren IP-Adressen bedient, starten Sie den Daemon wie folgt:

	git daemon --verbose --export-all
		--interpolated-path=/pub/%IP/%D
		/pub/192.168.1.200/software
		/pub/10.10.220.23/software

In diesem Beispiel enthält das Stammverzeichnis /pub ein Unterverzeichnis für jede unterstützte virtuelle Host-IP-Adresse. Repositories können aber immer noch per Hostnamen zugegriffen werden, vorausgesetzt, sie entsprechen diesen IP-Adressen.

Dienste pro Repository selektiv aktivieren/deaktivieren

Um git archive --remote zu aktivieren und git fetch gegen ein Repository zu deaktivieren, fügen Sie Folgendes in die Konfigurationsdatei im Repository ein (d.h. die Datei config neben HEAD, refs und objects).

	[daemon]
		uploadpack = false
		uploadarch = true

UMGEBUNG

git daemon setzt REMOTE_ADDR auf die IP-Adresse des Clients, der sich damit verbunden hat, wenn die IP-Adresse verfügbar ist. REMOTE_ADDR ist in der Umgebung von Hooks verfügbar, die aufgerufen werden, wenn Dienste ausgeführt werden.

GIT

Teil der git[1] Suite