-
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 Einfaches 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
A3.3 Anhang C: Git-Befehle - Einfaches Snapshotting
Grundlegende Snapshots
Für den grundlegenden Workflow des Staging von Inhalten und deren Committen in Ihre Historie gibt es nur wenige grundlegende Befehle.
git add
Der Befehl git add fügt Inhalte aus dem Arbeitsverzeichnis in den Staging-Bereich (oder "Index") für den nächsten Commit hinzu. Wenn der Befehl git commit ausgeführt wird, betrachtet er standardmäßig nur diesen Staging-Bereich. Daher wird git add verwendet, um genau zu gestalten, wie Ihr nächster Commit-Snapshot aussehen soll.
Dieser Befehl ist ein unglaublich wichtiger Befehl in Git und wird in diesem Buch Dutzende Male erwähnt oder verwendet. Wir werden einige seiner einzigartigen Verwendungszwecke kurz behandeln.
Wir stellen git add zum ersten Mal im Detail vor und erklären es in Nachverfolgen neuer Dateien.
Wir erwähnen, wie man ihn zur Lösung von Merge-Konflikten in Grundlegende Merge-Konflikte verwendet.
Wir behandeln die Verwendung, um interaktiv nur bestimmte Teile einer geänderten Datei zu stagena in Interaktives Staging.
Schließlich emulieren wir ihn auf niedriger Ebene in Tree-Objekte, damit Sie eine Vorstellung davon bekommen, was er im Hintergrund tut.
git status
Der Befehl git status zeigt Ihnen die verschiedenen Zustände von Dateien in Ihrem Arbeitsverzeichnis und Staging-Bereich an. Welche Dateien modifiziert und nicht gestaged sind und welche gestaged, aber noch nicht committet sind. In seiner normalen Form zeigt er auch einige grundlegende Hinweise, wie Dateien zwischen diesen Zuständen verschoben werden können.
Wir behandeln status zum ersten Mal in Überprüfen des Status Ihrer Dateien, sowohl in seinen grundlegenden als auch in seinen vereinfachten Formen. Obwohl wir ihn im gesamten Buch verwenden, ist praktisch alles, was Sie mit dem Befehl git status tun können, dort abgedeckt.
git diff
Der Befehl git diff wird verwendet, wenn Sie Unterschiede zwischen zwei beliebigen Trees sehen möchten. Dies könnte der Unterschied zwischen Ihrer Arbeitsumgebung und Ihrem Staging-Bereich sein (git diff allein), zwischen Ihrem Staging-Bereich und Ihrem letzten Commit (git diff --staged) oder zwischen zwei Commits (git diff master branchB).
Wir betrachten zunächst die grundlegenden Verwendungszwecke von git diff in Anzeigen Ihrer gestageten und nicht gestagten Änderungen, wo wir zeigen, wie man sieht, welche Änderungen gestaged sind und welche noch nicht.
Wir verwenden ihn, um mögliche Leerzeichenprobleme vor dem Committen mit der Option --check in Commit-Richtlinien zu finden.
Wir sehen, wie man die Unterschiede zwischen Branches effektiver mit der Syntax git diff A…B in Feststellen, was eingeführt wird vergleicht.
Wir verwenden ihn, um Leerzeichenunterschiede mit -b herauszufiltern und um verschiedene Zustände von konfligierenden Dateien mit --theirs, --ours und --base in Erweiterte Zusammenführungen zu vergleichen.
Schließlich verwenden wir ihn, um Submoduländerungen effektiv mit --submodule in Erste Schritte mit Submodulen zu vergleichen.
git difftool
Der Befehl git difftool startet einfach ein externes Tool, um Ihnen den Unterschied zwischen zwei Trees anzuzeigen, falls Sie etwas anderes als den integrierten Befehl git diff verwenden möchten.
Wir erwähnen dies nur kurz in Anzeigen Ihrer gestageten und nicht gestagten Änderungen.
git commit
Der Befehl git commit nimmt alle Dateiinhalte, die mit git add gestaged wurden, und speichert einen neuen permanenten Snapshot in der Datenbank und verschiebt dann den Branch-Pointer auf dem aktuellen Branch darauf.
Wir behandeln zunächst die Grundlagen des Committens in Ihre Änderungen committen. Dort zeigen wir auch, wie man das Flag -a verwendet, um den git add-Schritt in täglichen Workflows zu überspringen, und wie man das Flag -m verwendet, um eine Commit-Nachricht auf der Kommandozeile zu übergeben, anstatt einen Editor zu öffnen.
In Dinge rückgängig machen behandeln wir die Verwendung der Option --amend, um den letzten Commit zu wiederholen.
In Branches im Überblick gehen wir viel detaillierter darauf ein, was git commit tut und warum es das tut.
Wir haben in Commits signieren behandelt, wie man Commits kryptografisch mit dem Flag -S signiert.
Schließlich werfen wir einen Blick darauf, was der Befehl git commit im Hintergrund tut und wie er tatsächlich in Commit-Objekte implementiert ist.
git reset
Der Befehl git reset wird hauptsächlich zum Rückgängigmachen von Dingen verwendet, wie Sie vielleicht am Verb erkennen können. Er verschiebt den HEAD-Zeiger und ändert optional den index oder Staging-Bereich und kann auch optional das Arbeitsverzeichnis ändern, wenn Sie --hard verwenden. Diese letzte Option macht es möglich, dass dieser Befehl Ihre Arbeit verliert, wenn er falsch verwendet wird. Stellen Sie also sicher, dass Sie ihn verstehen, bevor Sie ihn verwenden.
Wir behandeln zunächst die einfachste Verwendung von git reset in Einen gestageten Datei ent-stagen, wo wir ihn verwenden, um eine Datei zu ent-stagen, auf die wir git add angewendet hatten.
Dann behandeln wir ihn ziemlich detailliert in Reset entmystifiziert, der vollständig der Erklärung dieses Befehls gewidmet ist.
Wir verwenden git reset --hard, um einen Merge in Merge abbrechen abzubrechen, wo wir auch git merge --abort verwenden, was eine Art Wrapper für den Befehl git reset ist.
git rm
Der Befehl git rm wird verwendet, um Dateien aus dem Staging-Bereich und dem Arbeitsverzeichnis für Git zu entfernen. Er ähnelt git add insofern, als er das Entfernen einer Datei für den nächsten Commit stagena.
Wir behandeln den Befehl git rm im Detail in Dateien entfernen, einschließlich des rekursiven Entfernens von Dateien und des Entfernens von Dateien nur aus dem Staging-Bereich, aber deren Beibehaltung im Arbeitsverzeichnis mit --cached.
Der einzige andere abweichende Verwendungszweck von git rm im Buch ist in Objekte entfernen, wo wir --ignore-unmatch kurz verwenden und erklären, wenn git filter-branch ausgeführt wird, was einfach dazu führt, dass kein Fehler ausgelöst wird, wenn die zu entfernende Datei nicht existiert. Dies kann für Skripting-Zwecke nützlich sein.
git mv
Der Befehl git mv ist ein einfacher, praktischer Befehl, um eine Datei zu verschieben und dann git add für die neue Datei und git rm für die alte Datei auszuführen.
Wir erwähnen diesen Befehl nur kurz in Dateien verschieben.
git clean
Der Befehl git clean wird verwendet, um unerwünschte Dateien aus Ihrem Arbeitsverzeichnis zu entfernen. Dies kann das Entfernen von temporären Build-Artefakten oder Merge-Konfliktdateien beinhalten.
Wir behandeln viele der Optionen und Szenarien, in denen Sie den clean-Befehl verwenden könnten, in Arbeitsverzeichnis bereinigen.