-
1. Erste Schritte
-
2. Git Grundlagen
-
3. Git Branching
- 3.1 Branches auf einen Blick
- 3.2 Einfaches Branching und Merging
- 3.3 Branch-Management
- 3.4 Branching-Workflows
- 3.5 Remote-Branches
- 3.6 Rebasing
- 3.7 Zusammenfassung
-
4. Git auf dem Server
- 4.1 Die Protokolle
- 4.2 Git auf einem Server einrichten
- 4.3 Erstellung eines SSH-Public-Keys
- 4.4 Einrichten des Servers
- 4.5 Git-Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Von Drittanbietern gehostete Optionen
- 4.10 Zusammenfassung
-
5. Verteiltes Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revisions-Auswahl
- 7.2 Interaktives Stagen
- 7.3 Stashen und Bereinigen
- 7.4 Ihre Arbeit signieren
- 7.5 Suchen
- 7.6 Den Verlauf umschreiben
- 7.7 Reset entzaubert
- 7.8 Fortgeschrittenes Merging
- 7.9 Rerere
- 7.10 Debuggen mit Git
- 7.11 Submodule
- 7.12 Bundling
- 7.13 Replace (Ersetzen)
- 7.14 Anmeldeinformationen speichern
- 7.15 Zusammenfassung
-
8. Git einrichten
- 8.1 Git Konfiguration
- 8.2 Git-Attribute
- 8.3 Git Hooks
- 8.4 Beispiel für Git-forcierte Regeln
- 8.5 Zusammenfassung
-
9. Git und andere Systeme
- 9.1 Git als Client
- 9.2 Migration zu Git
- 9.3 Zusammenfassung
-
10. Git Interna
-
A1. Anhang A: Git in anderen Umgebungen
- A1.1 Grafische Schnittstellen
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Zusammenfassung
-
A2. Anhang B: Git in Ihre Anwendungen einbetten
- A2.1 Die Git-Kommandozeile
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Anhang C: Git Kommandos
- A3.1 Setup und Konfiguration
- A3.2 Projekte importieren und erstellen
- A3.3 Einfache Snapshot-Funktionen
- A3.4 Branching und Merging
- A3.5 Projekte gemeinsam nutzen und aktualisieren
- A3.6 Kontrollieren und Vergleichen
- A3.7 Debugging
- A3.8 Patchen bzw. Fehlerkorrektur
- A3.9 E-mails
- A3.10 Externe Systeme
- A3.11 Administration
- A3.12 Basisbefehle
4.6 Git auf dem Server - Smart HTTP
Smart HTTP
Wir haben jetzt authentifizierten Zugriff über SSH und nicht authentifizierten Zugriff über git://
, aber es gibt auch ein Protokoll, das beides gleichzeitig kann.
Die Einrichtung von Smart HTTP ist im Grunde genommen nur die Aktivierung eines CGI-Skripts, das mit Git namens git-http-backend
auf dem Server bereitgestellt wird.
Dieses CGI liest den Pfad und die Header, die von einem git fetch
oder git push
an eine HTTP-URL gesendet werden, und bestimmt, ob der Client über HTTP kommunizieren kann (was für jeden Client seit Version 1.6.6 gilt).
Wenn das CGI sieht, dass der Client intelligent ist, kommuniziert es intelligent mit ihm; andernfalls fällt es auf das dumme Verhalten zurück (also ist es rückwärtskompatibel für Lesezugriffe mit älteren Clients).
Lassen Sie uns durch ein sehr einfaches Setup gehen. Wir werden das mit Apache als CGI-Server einrichten. Wenn Sie kein Apache-Setup haben, können Sie dies auf einem Linux-System, wie nachfolgend beschrieben einrichten:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
Dadurch werden auch die Module mod_cgi
, mod_alias
, und mod_env
aktiviert, die alle benötigt werden, damit das Ganze ordnungsgemäß funktioniert.
Sie sollten auch die Unix-Benutzergruppe im Verzeichnis /srv/git
auf www-data
setzen, damit Ihr Webserver auf die Repositorys lesend und schreibend zugreifen kann, da die Apache-Instanz, auf der das CGI-Skript läuft, (standardmäßig) als dieser Benutzer ausgeführt wird:
$ chgrp -R www-data /srv/git
Als nächstes müssen wir der Apache-Konfiguration einige Dinge hinzufügen, um das git-http-backend
als Handler für alles, was in den /git
Pfad Ihres Webservers kommt, auszuführen.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Wenn Sie die Umgebungsvariable GIT_HTTP_EXPORT_ALL
weglassen, wird Git nur nicht authentifizierten Clients die Repositorys mit der Datei git-daemon-export-ok
zur Verfügung stellen, genau wie der Git-Daemon.
Abschließend möchten Sie dem Apache sagen, dass er Anfragen an das git-http-backend
zulassen soll, damit Schreibvorgänge irgendwie authentifiziert werden, möglicherweise mit einem Auth-Block wie diesem:
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
Dazu müssen Sie eine .htpasswd
Datei erstellen, die die Passwörter aller gültigen Benutzer enthält.
Hier ist ein Beispiel für das Hinzufügen eines „schacon“ Benutzers zur Datei:
$ htpasswd -c /srv/git/.htpasswd schacon
Es gibt unzählige Möglichkeiten, Benutzer mit Apache zu authentifizieren. Sie müssen eine von ihnen auswählen und implementieren. Das ist nur das einfachste Beispiel, das wir uns vorstellen können. Sie werden dies auch mit ziemlicher Sicherheit über SSL konfigurieren wollen, damit alle Daten verschlüsselt werden.
Wir wollen nicht zu weit in das Konzept der Apache-Konfigurationsspezifikationen eindringen, da Sie möglicherweise einen anderen Server verwenden oder unterschiedliche Authentifizierungsanforderungen haben.
Die Idee ist, dass Git mit einem CGI mit dem Namen git-http-backend
daherkommt, das beim Aufruf alle Vorbereitungen zum Senden und Empfangen von Daten über HTTP trifft.
Es implementiert selbst keine Authentifizierung, aber diese kann leicht auf der Ebene des Webservers gesteuert werden, der sie aufruft.
Sie können das mit fast jedem CGI-fähigen Webserver tun, also wählen Sie denjenigen, den Sie am besten kennen.
Anmerkung
|
Weitere Informationen zur Konfiguration der Authentifizierung in Apache finden Sie in den Apache-Dokumenten unter: https://httpd.apache.org/docs/current/howto/auth.html |