Einrichtung und Konfiguration
Projekte holen und erstellen
Grundlegende Snapshots
Branching und Merging
Projekte teilen und aktualisieren
Inspektion und Vergleich
Patching
Debugging
Externe Systeme
Server-Administration
Anleitungen
- gitattributes
- Konventionen der Kommandozeile
- Tägliches Git
- Häufig gestellte Fragen (FAQ)
- Glossar
- Hooks
- gitignore
- gitmodules
- Revisionen
- Submodule
- Tutorial
- Workflows
- Alle Anleitungen...
Administration
Plumbing-Befehle
- 2.50.1 → 2.52.0 keine Änderungen
-
2.50.0
2025-06-16
- 2.44.1 → 2.49.1 keine Änderungen
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 keine Änderungen
-
2.43.0
2023-11-20
- 2.37.3 → 2.42.4 keine Änderungen
-
2.37.2
2022-08-11
- 2.22.1 → 2.37.1 keine Änderungen
-
2.22.0
2019-06-07
- 2.17.1 → 2.21.4 keine Änderungen
-
2.17.0
2018-04-02
- 2.10.5 → 2.16.6 keine Änderungen
-
2.9.5
2017-07-30
- 2.2.3 → 2.8.6 keine Änderungen
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
SYNOPSIS
gitdaemon[--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.
gitdaemonweigert 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
gitdaemonmit--base-path=/srv/gitaufexample.comausführen, dann wird, wenn Sie später vongit://example.com/hello.gitpullen,gitdaemonden Pfad als/srv/git/hello.gitinterpretieren. --base-path-relaxed-
Wenn
--base-pathaktiviert ist und die Repository-Suche fehlschlägt, wirdgitdaemonmit dieser Option versuchen, ohne den Basisverzeichnispfad zu präfixieren. Dies ist nützlich, um auf die Verwendung von--base-pathumzuschalten 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
%Hfür den Zielhostnamen, wie er vom Client geliefert wird, aber in Kleinbuchstaben umgewandelt,%CHfür den kanonischen Hostnamen,%IPfür die IP-Adresse des Servers,%Pfür die Portnummer und%Dfü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,--userund--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--listenmuss 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
--verboseimpliziert, sodass standardmäßig nur Fehlerbedingungen protokolliert werden. Das <Ziel> muss eines der folgenden sein:stderr-
In Standardfehlerausgabe schreiben. Beachten Sie, dass bei Angabe von
--detachder Prozess die Verbindung zur echten Standardfehlerausgabe trennt, wodurch dieses Ziel praktisch äquivalent zunonewird. syslog-
An syslog schreiben, unter Verwendung des Bezeichners
git-daemon. none-
Protokollierung deaktivieren.
Das Standardziel ist
syslog, wenn--inetdoder--detachangegeben ist, andernfallsstderr. --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
aliceinterpretiert. Wenn--user-path=<Pfad> angegeben ist, wird dieselbe Anfrage als Anfrage zur Bearbeitung des Repositories <Pfad>/fooim Home-Verzeichnis des Benutzersaliceinterpretiert. --verbose-
Details über eingehende Verbindungen und angeforderte Dateien protokollieren.
--reuseaddr-
Verwendet
SO_REUSEADDRbeim 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
--inetdläuft. --user=<Benutzer>--group=<Gruppe>-
Ändert die uid und gid des Daemons, bevor die Service-Schleife betreten wird. Wenn nur
--userohne--groupangegeben wird, wird die primäre Gruppen-ID für den Benutzer verwendet. Die Werte der Option werden angetpwnam(3) undgetgrnam(3) übergeben, und numerische IDs werden nicht unterstützt.Die Angabe dieser Optionen ist ein Fehler, wenn sie mit
--inetdverwendet werden; verwenden Sie die Funktionalität des Inetd-Daemons, um dasselbe zu erreichen, bevor Siegitdaemonstarten, falls erforderlich.Wie viele Programme, die die Benutzer-ID wechseln, setzt der Daemon keine Umgebungsvariablen wie
HOMEzurück, wenn er Git-Programme ausführt, z.B.upload-packundreceive-pack. Wenn Sie diese Option verwenden, möchten Sie möglicherweise auchHOMEauf 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-pathsangegeben 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
gitfetch-packundgitls-remoteClients. Es ist standardmäßig aktiviert, aber ein Repository kann es deaktivieren, indem es das Konfigurationselementdaemon.uploadpackauffalsesetzt. - upload-archive
-
Dies bedient
gitarchive--remote. Es ist standardmäßig deaktiviert, aber ein Repository kann es aktivieren, indem es das Konfigurationselementdaemon.uploadarchauftruesetzt. - receive-pack
-
Dies bedient
gitsend-packClients 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 Konfigurationselementdaemon.receivepackauftruegesetzt 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/foooder/pub/barbedient, fügen Sie einen Eintrag wie den folgenden in/etc/inetdein, alles in einer Zeilegit 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.comundwww.example.org, bedient, fügen Sie einen Eintrag wie den folgenden in/etc/inetdein, alles in einer Zeilegit 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
/pubein Unterverzeichnis für jeden unterstützten virtuellen Hostnamen. Darüber hinaus werben beide Hosts Repositories einfach alsgit://www.example.com/software/repo.git. Für Clients vor 1.4.0 könnte auch ein Symlink von/softwarein das entsprechende Standard-Repository erstellt werden. - git daemon als regulärer Daemon für virtuelle Hosts
-
Um
gitdaemonals 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
/pubein 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
gitarchive--remotezu aktivieren undgitfetchgegen 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