-
1. Erste Schritte
- 1.1 Über Versionskontrolle
- 1.2 Eine kurze Geschichte von Git
- 1.3 Was ist Git?
- 1.4 Die Kommandozeile
- 1.5 Git installieren
- 1.6 Erstmalige Git-Einrichtung
- 1.7 Hilfe bekommen
- 1.8 Zusammenfassung
-
2. Git Grundlagen
-
3. Git Branching
- 3.1 Branches im Überblick
- 3.2 Grundlegendes 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 Generieren Ihres SSH-Public-Keys
- 4.4 Einrichten des Servers
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Drittanbieter-Hosting-Optionen
- 4.10 Zusammenfassung
-
5. Verteiltes Git
-
6. GitHub
-
7. Git-Werkzeuge
- 7.1 Revisionsauswahl
- 7.2 Interaktives Staging
- 7.3 Stashing und Bereinigen
- 7.4 Ihre Arbeit signieren
- 7.5 Suchen
- 7.6 Historie umschreiben
- 7.7 Reset entmystifiziert
- 7.8 Fortgeschrittenes Merging
- 7.9 Rerere
- 7.10 Debugging mit Git
- 7.11 Submodule
- 7.12 Bundling
- 7.13 Ersetzen
- 7.14 Credential-Speicher
- 7.15 Zusammenfassung
-
8. Git anpassen
-
9. Git und andere Systeme
- 9.1 Git als Client
- 9.2 Migration zu Git
- 9.3 Zusammenfassung
-
10. Git-Interna
- 10.1 Plumbing und Porcelain
- 10.2 Git-Objekte
- 10.3 Git-Referenzen
- 10.4 Packfiles
- 10.5 Die Refspec
- 10.6 Übertragungsprotokolle
- 10.7 Wartung und Datenwiederherstellung
- 10.8 Umgebungsvariablen
- 10.9 Zusammenfassung
-
Anhang A: Git in anderen Umgebungen
- A1.1 Grafische Oberflächen
- 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
-
Anhang B: Git in Ihre Anwendungen einbetten
- A2.1 Kommandozeilen-Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
Anhang C: Git-Befehle
- A3.1 Einrichtung und Konfiguration
- A3.2 Projekte abrufen und erstellen
- A3.3 Grundlegendes Snapshotting
- A3.4 Branching und Merging
- A3.5 Projekte teilen und aktualisieren
- A3.6 Inspektion und Vergleich
- A3.7 Debugging
- A3.8 Patching
- A3.9 E-Mail
- A3.10 Externe Systeme
- A3.11 Administration
- A3.12 Plumbing-Befehle
4.4 Git auf dem Server - Einrichten des Servers
Einrichten des Servers
Lassen Sie uns die Einrichtung des SSH-Zugriffs auf der Serverseite durchgehen. In diesem Beispiel verwenden Sie die Methode authorized_keys zur Authentifizierung Ihrer Benutzer. Wir gehen auch davon aus, dass Sie eine Standard-Linux-Distribution wie Ubuntu verwenden.
|
Hinweis
|
Ein Großteil dessen, was hier beschrieben wird, kann durch die Verwendung des Befehls |
Zuerst erstellen Sie ein git-Benutzerkonto und ein .ssh-Verzeichnis für diesen Benutzer.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Als Nächstes müssen Sie einige öffentliche SSH-Schlüssel von Entwicklern zur Datei authorized_keys für den git-Benutzer hinzufügen. Nehmen wir an, Sie haben einige vertrauenswürdige öffentliche Schlüssel und haben sie in temporären Dateien gespeichert. Wieder einmal sehen die öffentlichen Schlüssel ungefähr so aus
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
Sie hängen sie einfach an die Datei authorized_keys des git-Benutzers in seinem .ssh-Verzeichnis an
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
Nun können Sie ein leeres Repository für sie einrichten, indem Sie git init mit der Option --bare ausführen, die das Repository ohne Arbeitsverzeichnis initialisiert
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
Dann können John, Josie oder Jessica die erste Version ihres Projekts in dieses Repository pushen, indem sie es als Remote hinzufügen und einen Branch hochladen. Beachten Sie, dass jemand über die Maschine eine Shell herstellen und jedes Mal ein Bare-Repository erstellen muss, wenn Sie ein Projekt hinzufügen möchten. Verwenden wir gitserver als Hostnamen des Servers, auf dem Sie Ihren git-Benutzer und Ihr Repository eingerichtet haben. Wenn Sie ihn intern ausführen und DNS für gitserver so eingerichtet haben, dass es auf diesen Server zeigt, können Sie die Befehle praktisch unverändert verwenden (vorausgesetzt, myproject ist ein bestehendes Projekt mit Dateien darin)
# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
An diesem Punkt können die anderen es genauso einfach herunterklonen und Änderungen zurückpushen
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master
Mit dieser Methode können Sie schnell einen Lese-/Schreib-Git-Server für eine Handvoll Entwickler einrichten und in Betrieb nehmen.
Sie sollten beachten, dass derzeit alle diese Benutzer sich auch auf dem Server anmelden und eine Shell als git-Benutzer erhalten können. Wenn Sie dies einschränken möchten, müssen Sie die Shell in der Datei /etc/passwd auf etwas anderes ändern.
Sie können das git-Benutzerkonto leicht auf nur Git-bezogene Aktivitäten mit einem begrenzten Shell-Tool namens git-shell beschränken, das mit Git geliefert wird. Wenn Sie dies als Login-Shell des git-Benutzerkontos festlegen, kann dieses Konto keinen normalen Shell-Zugriff auf Ihren Server haben. Um dies zu verwenden, geben Sie git-shell anstelle von bash oder csh für die Login-Shell dieses Kontos an. Dazu müssen Sie zuerst den vollständigen Pfad zum Befehl git-shell zu /etc/shells hinzufügen, falls er dort noch nicht vorhanden ist
$ cat /etc/shells # see if git-shell is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo -e /etc/shells # and add the path to git-shell from last command
Nun können Sie die Shell für einen Benutzer mit chsh <username> -s <shell> bearbeiten
$ sudo chsh git -s $(which git-shell)
Jetzt kann der git-Benutzer immer noch die SSH-Verbindung verwenden, um Git-Repositories zu pushen und zu ziehen, kann sich aber nicht auf die Maschine schalten. Wenn Sie es versuchen, sehen Sie eine Anmeldeablehnung wie diese
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
An diesem Punkt können Benutzer immer noch SSH-Port-Weiterleitung verwenden, um auf jeden Host zuzugreifen, den der Git-Server erreichen kann. Wenn Sie dies verhindern möchten, können Sie die Datei authorized_keys bearbeiten und die folgenden Optionen jedem Schlüssel voranstellen, den Sie einschränken möchten
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
Das Ergebnis sollte wie folgt aussehen
$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...
Jetzt funktionieren Git-Netzwerkbefehle immer noch einwandfrei, aber die Benutzer können keine Shell erhalten. Wie die Ausgabe besagt, können Sie auch ein Verzeichnis im Home-Verzeichnis des git-Benutzers einrichten, das den Befehl git-shell etwas anpasst. Sie können beispielsweise die Git-Befehle einschränken, die der Server akzeptiert, oder die Nachricht anpassen, die Benutzer sehen, wenn sie versuchen, sich so per SSH anzumelden. Führen Sie git help shell aus, um weitere Informationen zur Anpassung der Shell zu erhalten.