Dies ist der Befehl git-http-backend, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
git-http-backend – Serverseitige Implementierung von Git über HTTP
ZUSAMMENFASSUNG
git http-backend
BESCHREIBUNG
Ein einfaches CGI-Programm, um Git-Clients, die darauf zugreifen, den Inhalt eines Git-Repositorys bereitzustellen
das Repository über die Protokolle http:// und https://. Das Programm unterstützt das Abrufen von Clients
Verwendung sowohl des Smart-HTTP-Protokolls als auch des abwärtskompatiblen Dumb-HTTP-Protokolls
sowie Clients, die über das intelligente HTTP-Protokoll pushen.
Es überprüft, ob das Verzeichnis die magische Datei „git-daemon-export-ok“ enthält, und das wird auch der Fall sein
Weigern Sie sich, Git-Verzeichnisse zu exportieren, die nicht ausdrücklich auf diese Weise für den Export markiert wurden
(es sei denn, die Umgebungsvariable GIT_HTTP_EXPORT_ALL ist festgelegt).
Standardmäßig ist nur der Upload-Pack-Dienst aktiviert, der dient git holen-pack und git
ls-remote Clients, von denen aus aufgerufen wird git holen, git ziehen und git klonen. Wenn der
Der Client ist authentifiziert, der Empfangspaketdienst ist aktiviert, der dient git Paket senden
client, der aufgerufen wird von git drücken.
SERVICES
Diese Dienste können mithilfe der Konfigurationsdatei pro Repository aktiviert/deaktiviert werden:
http.getanyfile
Dies dient Git-Clients, die älter als Version 1.6.6 sind und den Upload nicht nutzen können
Packservice. Wenn diese Option aktiviert ist, können Clients jede Datei im Repository lesen.
einschließlich Objekte, die von einem Zweig aus nicht mehr erreichbar sind, aber noch vorhanden sind. Es
ist standardmäßig aktiviert, ein Repository kann es jedoch durch Festlegen dieser Konfiguration deaktivieren
Element auf „false“ setzen.
http.uploadpack
Das dient git holen-pack und git ls-remote Kunden. Es ist standardmäßig aktiviert, aber a
Das Repository kann es deaktivieren, indem dieses Konfigurationselement auf „false“ gesetzt wird.
http.receivepack
Das dient git Paket senden Kunden, die Push ermöglichen. Es ist standardmäßig deaktiviert für
Anonyme Benutzer und standardmäßig für vom Webserver authentifizierte Benutzer aktiviert. Es
kann deaktiviert werden, indem dieses Element auf „false“ gesetzt wird, oder für alle Benutzer aktiviert werden, einschließlich
anonyme Benutzer, indem Sie es auf true setzen.
URL ÜBERSETZUNG
Um den Speicherort des Repositorys auf der Festplatte zu ermitteln, git http-backend verkettet die
Umgebungsvariablen PATH_INFO, die automatisch vom Webserver gesetzt werden, und
GIT_PROJECT_ROOT, das manuell in der Webserverkonfiguration festgelegt werden muss. Wenn
GIT_PROJECT_ROOT ist nicht gesetzt, git http-backend liest PATH_TRANSLATED, was ebenfalls gesetzt ist
automatisch durch den Webserver.
Beispiele:
Alle folgenden Beispiele ordnen http://$hostname/git/foo/bar.git zu
/var/www/git/foo/bar.git.
Apache 2.x.
Stellen Sie sicher, dass mod_cgi, mod_alias und mod_env aktiviert sind, legen Sie GIT_PROJECT_ROOT fest (oder
DocumentRoot) entsprechend und erstellen Sie einen ScriptAlias für das CGI:
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
Um anonymen Lesezugriff, aber authentifizierten Schreibzugriff zu ermöglichen, ist eine Autorisierung erforderlich
sowohl für die anfängliche Ref-Werbung (die wir über den Dienst als Push erkennen).
Parameter in der Abfragezeichenfolge) und der Empfangspaketaufruf selbst:
RewriteCond %{QUERY_STRING} service=git-receive-pack [ODER]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]
Bestellung ablehnen, zulassen
Ablehnen von env=AUTHREQUIRED
AuthType Basic
AuthName „Git Access“
Gruppencommitter sind erforderlich
Befriedigen Sie jeden
...
Wenn mod_rewrite nicht für den Abgleich mit der Abfragezeichenfolge verfügbar ist, ist dies der Fall
ausreichend, um nur git-receive-pack selbst zu schützen, wie zum Beispiel:
AuthType Basic
AuthName „Git Access“
Gruppencommitter sind erforderlich
...
In diesem Modus fordert der Server erst dann eine Authentifizierung an, wenn der Client dies tatsächlich tut
startet die Objektverhandlungsphase des Pushs und nicht während der Initialphase
Kontakt. Aus diesem Grund müssen Sie auch die Konfigurationsoption http.receivepack aktivieren
alle Repositorys, die einen Push akzeptieren sollen. Das Standardverhalten, wenn http.receivepack
nicht gesetzt ist, dient dazu, alle Pushs von nicht authentifizierten Benutzern abzulehnen; Die ursprüngliche Anfrage wird
Melden Sie daher dem Kunden 403 Verboten, ohne überhaupt eine Gelegenheit dazu zu geben
Authentifizierung.
Um eine Authentifizierung sowohl für Lese- als auch für Schreibvorgänge zu erfordern, verwenden Sie eine Location-Direktive
das Repository oder eines seiner übergeordneten Verzeichnisse:
AuthType Basic
AuthName „Privater Git-Zugriff“
Gruppencommitter sind erforderlich
...
Um Gitweb unter derselben URL bereitzustellen, verwenden Sie ein ScriptAliasMatch nur für die URLs, die dies tun git
http-backend kann damit umgehen und den Rest an gitweb weiterleiten:
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
Objekte/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/usr/libexec/git-core/git-http-backend/$1
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
Um mehrere Repositorys aus unterschiedlichen Quellen bereitzustellen gitnamespaces(7) in einem einzigen Repository:
SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1
ScriptAliasMatch ^/git/[^/]*(.*) /usr/libexec/git-core/git-http-backend/storage.git$1
Beschleunigtes statisches Apache 2.x
Ähnlich wie oben, aber Apache kann verwendet werden, um statische Dateien zurückzugeben, die darauf gespeichert sind
Scheibe. Auf vielen Systemen ist dies möglicherweise effizienter, da Apache den Kernel zum Kopieren auffordern kann
den Dateiinhalt vom Dateisystem direkt ins Netzwerk:
SetEnv GIT_PROJECT_ROOT /var/www/git
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
Dies kann mit der Gitweb-Konfiguration kombiniert werden:
SetEnv GIT_PROJECT_ROOT /var/www/git
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
Objekte/Info/[^/]+ | \
git-(upload|receive)-pack))$" \
/usr/libexec/git-core/git-http-backend/$1
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
Lichttpd
Stellen Sie sicher, dass mod_cgi, mod_alias, mod_auth und mod_setenv geladen und dann festgelegt sind
GIT_PROJECT_ROOT entsprechend und leiten Sie alle Anfragen an das CGI weiter:
alias.url += ( "/git" => "/usr/lib/git-core/git-http-backend")
$HTTP["url"] =~ "^/git" {
cgi.assign = ("" => "")
setenv.add-environment = (
"GIT_PROJECT_ROOT" => "/var/www/git",
"GIT_HTTP_EXPORT_ALL" => ""
)
}
So aktivieren Sie anonymen Lesezugriff, aber authentifizierten Schreibzugriff:
$HTTP["querystring"] =~ "service=git-receive-pack" {
„git-auth.conf“ einschließen
}
$HTTP["url"] =~ "^/git/.*/git-receive-pack$" {
„git-auth.conf“ einschließen
}
Dabei sieht git-auth.conf etwa so aus:
auth.require = (
"/" => (
„Methode“ => „Grundlegend“,
"realm" => "Git Access",
„require“ => „valid-user“
)
)
# ...und hier auth.backend einrichten
So fordern Sie eine Authentifizierung sowohl für Lese- als auch für Schreibvorgänge an:
$HTTP["url"] =~ "^/git/private" {
„git-auth.conf“ einschließen
}
git http-backend basiert auf den CGI-Umgebungsvariablen, die vom aufrufenden Webserver festgelegt werden.
einschließlich:
· PATH_INFO (wenn GIT_PROJECT_ROOT gesetzt ist, andernfalls PATH_TRANSLATED)
· REMOTE_USER
· REMOTE_ADDR
· INHALTSTYP
· QUERY_STRING
· REQUEST_METHOD
Die Umgebungsvariable GIT_HTTP_EXPORT_ALL kann an übergeben werden git-http-backend umgehen
die Prüfung auf die Datei „git-daemon-export-ok“ in jedem Repository, bevor der Export zugelassen wird
dieses Repository.
Die Umgebungsvariable GIT_HTTP_MAX_REQUEST_BUFFER (oder die http.maxRequestBuffer-Konfiguration
Variable) kann so eingestellt werden, dass die größte Ref-Aushandlungsanforderung geändert wird, die Git verarbeiten kann
während eines Abrufs; Jeder Abruf, der einen größeren Puffer erfordert, wird nicht erfolgreich sein. Dieser Wert sollte
Normalerweise muss nicht geändert werden, kann aber hilfreich sein, wenn Sie aus einem Repository abrufen
mit einer extrem großen Anzahl von Schiedsrichtern. Der Wert kann mit einer Einheit angegeben werden (z. B. 100M).
für 100 Megabyte). Der Standardwert ist 10 Megabyte.
Der Backend-Prozess setzt GIT_COMMITTER_NAME auf $REMOTE_USER und GIT_COMMITTER_EMAIL an
${REMOTE_USER}@http.${REMOTE_ADDR}, um sicherzustellen, dass alle von erstellten Reflogs Git-Receive-Pack
enthalten einige identifizierende Informationen des Remote-Benutzers, der den Push durchgeführt hat.
Alle CGI-Umgebungsvariablen stehen jedem der von aufgerufenen Hooks zur Verfügung
Git-Receive-Pack.
GIT
Ein Teil des git(1) Suite
Verwenden Sie git-http-backend online über die Dienste von onworks.net