-
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 Deine 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 VCS-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 deine 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 zusammen 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 ab 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).
Lass uns durch ein sehr einfaches Setup gehen. Wir werden Apache als CGI-Server verwenden. Wenn du kein Apache-Setup hast, kannst du 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.
Du solltest auch die Unix-Benutzergruppe im Verzeichnis /srv/git
auf www-data
setzen, damit dein Webserver auf die Repositorys lesend und schreibend zugreifen kann. Die Apache-Instanz, auf der das CGI-Skript läuft, wird standardmäßig unter dieser Benutzer laufen:
$ 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 im`/git` Pfad dein Webservers liegt, auszuführen.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Wenn du die Umgebungsvariable GIT_HTTP_EXPORT_ALL
nicht setzt, wird Git unauthentifizierten Clients nur die Repositorys, die die Datei git-daemon-export-ok
enthalten, zur Verfügung stellen. Das Verhalten ist dann wie beim Git-Daemon.
Abschließend konfigurierst du Apache so, dass er Anfragen an das git-http-backend
zulassen soll, um Schreibvorgänge zu authentifiziert. Dazu kannst du folgenden Code nutzen:
<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 musst du eine .htpasswd
Datei erstellen, die die Passwörter aller gültigen Benutzer enthält.
Hier ein Beispiel für das Hinzufügen eines Benutzers „schacon“:
$ htpasswd -c /srv/git/.htpasswd schacon
Es gibt unzählige Möglichkeiten, Benutzer mit Apache zu authentifizieren. Du musst eine von ihnen auswählen und implementieren. Dies ist ein einfaches Beispiel. Du wirst dies wahrscheinlich über SSL konfigurieren wollen, damit auch alle Daten verschlüsselt werden.
Wir wollen nicht zu weit in das Konzept der Apache-Konfigurationsspezifikationen eindringen, da du möglicherweise einen anderen Server verwendst oder andere Authentifizierungsanforderungen hast.
Die Idee ist, dass Git mit einem CGI mit dem Namen git-http-backend
daherkommt, das beim Senden und Empfangen von Daten die Kommunikation über HTTP aushandelt.
Es implementiert selbst keine Authentifizierung, aber diese kann über den Webservers gesteuert werden.
Du kannst das mit fast jedem CGI-fähigen Webserver tun. Am besten wählst du denjenigen, den du am besten kennst.
Anmerkung
|
Weitere Informationen zur Konfiguration der Authentifizierung in Apache findest du in den Apache-Dokumenten unter: https://httpd.apache.org/docs/current/howto/auth.html |