Skip to content

Latest commit

 

History

History
585 lines (337 loc) · 39.2 KB

C-git-commands.asc

File metadata and controls

585 lines (337 loc) · 39.2 KB

Appendix A: Git Kommandos

Im Laufe des Buches haben wir Dutzende von Git-Befehlen vorgestellt und uns bemüht, sie in eine Art Erzählung einzuführen und der Handlung langsam weitere Befehle hinzuzufügen. Das führt jedoch dazu, dass wir Beispiele für die Verwendung der Befehle im ganzen Buch verstreut wiederfinden.

In diesem Anhang werden die im gesamten Buch behandelten Git-Befehle genauer beschreiben, grob gruppiert nach ihren Einsatzgebieten. Wir werden darüber reden, was jeder Befehl ganz allgemein tut, und dann darauf hinweisen, wo wir ihn im Buch benutzt haben.

Tip

Sie können lange Optionen abkürzen. Zum Beispiel können Sie git commit --a eingeben, was sich so verhält, als ob Sie` git commit --amend` eingegeben hätten. Dies funktioniert nur, wenn die Buchstaben nach -- für eine Option eindeutig sind. Verwenden Sie beim Schreiben von Skripten die vollständige Option.

Setup und Konfiguration

Es gibt zwei Befehle, die von den ersten Git-Aufrufen bis hin zum täglichen Optimieren und Referenzieren wirklich oft verwendet werden: die config und help Befehle.

git config

Git hat eine Standard-Methode, um Hunderte von Aufgaben zu erledigen. Für viele dieser Aufgaben können Sie Git anweisen, sie auf eine andere Weise auszuführen oder Ihre persönlichen Einstellungen vorzunehmen. Das reicht von der Angabe Ihres Namens bis hin zu bestimmten Terminal-Farbeinstellungen oder dem von Ihnen verwendeten Editor. Bei diesem Befehl werden mehrere Dateien gelesen und beschrieben, so dass Sie Werte global oder bis zu einem bestimmten Repository festlegen können.

Der git config Befehl wird in fast jedem Kapitel des Buches benutzt.

In ch01-getting-started.asc haben wir ihn verwendet, um unseren Namen, unsere E-Mail-Adresse und unsere Editor-Einstellung zu bestimmen, bevor wir mit Git anfangen konnten.

In Git Aliases haben wir gezeigt, wie man damit Kurzbefehle erstellen kann, die sich zu langen Optionssequenzen ausbauen, damit man sie nicht jedes Mal eingeben muss.

In Rebasing haben wir ihn verwendet, um --rebase zum Standard der Anwendung zu machen, wenn Sie git pull ausführen.

In Anmeldeinformationen speichern haben wir damit einen Standard-Speicherservice für Ihre HTTP-Passwörter eingerichtet.

In Schlüsselwort-Erweiterung haben wir gezeigt, wie Sie Smudge- und Clean-Filter für Inhalte einrichten können, die in Git ein- und ausgelesen werden.

Im Prinzip ist der gesamte Abschnitt Git Konfiguration dem Befehl gewidmet.

git config core.editor commands

Neben den Konfigurationsanweisungen in Ihr Editor können viele Editoren wie folgt eingerichtet werden:

Table 1. Exhaustive list of core.editor configuration commands
Editor Configuration command

Atom

git config --global core.editor "atom --wait"

BBEdit (Mac, mit Befehlszeilen-Tools)

git config --global core.editor "bbedit -w"

Emacs

git config --global core.editor emacs

Gedit (Linux)

git config --global core.editor "gedit --wait --new-window"

Gvim (Windows 64-bit)

git config --global core.editor "'C:\Program Files\Vim\vim72\gvim.exe' --nofork '%*'" (Siehe auch Anmerkung unten)

Kate (Linux)

git config --global core.editor "kate"

nano

git config --global core.editor "nano -w"

Notepad (Windows 64-bit)

git config core.editor notepad

Notepad++ (Windows 64-bit)

git config --global core.editor "'C:\Program Files\Notepad\notepad.exe' -multiInst -notabbar -nosession -noPlugin" (Siehe auch Anmerkung unten)

Scratch (Linux)

git config --global core.editor "scratch-text-editor"

Sublime Text (macOS)

git config --global core.editor "/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl --new-window --wait"

Sublime Text (Windows 64-bit)

git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -w" (Siehe auch Anmerkung unten)

TextEdit (macOS)

git config --global --add core.editor "open --wait-apps --new -e"

Textmate

git config --global core.editor "mate -w"

Textpad (Windows 64-bit)

git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m (Siehe auch Anmerkung unten)

UltraEdit (Windows 64-bit)

git config --global core.editor Uedit32

Vim

git config --global core.editor "vim --nofork"

Visual Studio Code

git config --global core.editor "code --wait"

VSCodium (Free/Libre Open Source Software Binaries of VSCode)

git config --global core.editor "codium --wait"

WordPad

git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"

Xi

git config --global core.editor "xi --wait"

Note

Wenn Sie einen 32-Bit-Editor auf einem Windows 64-Bit-System verwenden, wird das Programm in C:\Program Files (x86)\ und nicht in C:\Program Files\ wie in der vorstehenden Tabelle installiert.

git help

Der git help Befehl zeigt Ihnen zu einem beliebigen Befehl die gesamte Dokumentation, wie sie mit Git ausgeliefert wird. Während wir in diesem Anhang nur einen groben Überblick über die meisten der gängigsten Befehle geben können, erhalten Sie jederzeit, für jeden Befehl eine komplette Aufstellung aller möglichen Optionen und Flags, wenn Sie git help <command> ausführen.

Wir haben den git help Befehl in Hilfe finden vorgestellt und Ihnen gezeigt, wie Sie damit mehr Informationen über git shell in Einrichten des Servers erhalten können.

Projekte importieren und erstellen

Es gibt zwei Möglichkeiten, ein Git-Repository zu erhalten. Der eine ist, es aus einem bestehenden Repository im Netzwerk oder von irgendwo her zu kopieren und der andere ist, ein eigenes in einem existierenden Verzeichnis zu erstellen.

git init

Um ein Verzeichnis zu übernehmen und es in ein neues Git-Repository umzuwandeln, so dass Sie die Versionskontrolle starten können, müssen Sie nur git init ausführen.

Wir haben das erstmals in ch02-git-basics-chapter.asc präsentiert, wo wir zeigen, wie ein neues Repository erstellt wird, mit dem man dann arbeiten kann.

Wir besprechen in ch03-git-branching.asc kurz, wie Sie den Standard-Branch-Namen „master“ ändern können.

Mit diesem Befehl erstellen wir für einen Server ein leeres Bare-Repository in ch04-git-on-the-server.asc.

Zum Schluss werden wir in ch10-git-internals.asc einige Details der Funktionsweise im Hintergrund erläutern.

git clone

Der git clone Befehl ist in Wahrheit ein Art Wrapper für mehrere andere Befehle. Er erstellt ein neues Verzeichnis, wechselt dort hin und führt git init aus. So wird es zu einem leeren Git-Repository umgewandelt. Dann fügt er zu der übergebenen URL einen Remote (git remote add) hinzu (standardmäßig mit dem Namen origin). Er ruft ein git fetch von diesem Remote-Repository auf und holt mit git checkout den letzten Commit in Ihr Arbeitsverzeichnis.

Der git clone Befehl wird an Dutzenden von Stellen im ganzen Buch verwendet, wir werden aber nur ein paar interessante Stellen auflisten.

Er wird im Wesentlichen in ch02-git-basics-chapter.asc eingeführt und beschrieben, wobei wir einige Beispiele durchgehen.

In ch04-git-on-the-server.asc untersuchen wir die Verwendung der Option --bare, um eine Kopie eines Git-Repository ohne Arbeitsverzeichnis zu erstellen.

In ch07-git-tools.asc verwenden wir ihn, um ein gebündeltes Git-Repository zu entpacken.

Schließlich lernen wir in ch07-git-tools.asc die Option --recurse-submodules kennen, die das Klonen eines Repositorys mit Submodulen etwas einfacher macht.

Obwohl der Befehl noch an vielen anderen Stellen im Buch verwendet wird, sind das jene, die etwas eigenständig sind oder bei denen er auf eine etwas andere Weise verwendet wird.

Einfache Snapshot-Funktionen

Für den grundlegenden Workflow der Erstellung von Inhalten und dem Committen in Ihren Verlauf gibt es nur wenige einfache Befehle.

git add

Der git add Befehl fügt, für den nächsten Commit, Inhalte aus dem Arbeitsverzeichnis der Staging-Area (bzw. „Index“) hinzu. Bei der Ausführung des Befehls git commit wird standardmäßig nur diese Staging-Area betrachtet, so dass mit git add festgelegt wird, wie Ihr nächster Commit-Schnappschuss aussehen soll.

Dieser Befehl ist ein unglaublich wichtiges Kommando in Git und wird in diesem Buch mehrfach erwähnt oder verwendet. Wir werden kurz auf einige der einzigartigen Verwendungen eingehen, die es gibt.

Wir stellen git add zunächst in ch02-git-basics-chapter.asc vor und beschreiben ihn ausführlich.

Wir besprechen in ch03-git-branching.asc, wie man damit Konflikte beim Mergen löst.

Wir fahren in ch07-git-tools.asc damit fort, bestimmte Teile einer modifizierten Datei interaktiv zur Staging-Area hinzuzufügen.

Schließlich emulieren wir ihn in ch10-git-internals.asc auf einem unteren Level, so dass Sie sich vorstellen können, was er im Hintergrund bewirkt.

git status

Der git status Befehl wird Ihnen die verschiedenen Dateizustände in Ihrem Arbeitsverzeichnis und der Staging-Area anzeigen. Er zeigt welche Dateien modifiziert und nicht bereitgestellt und welche bereitgestellt (eng. staged), aber noch nicht committet sind. In seiner üblichen Form werden Ihnen auch einige grundlegende Tipps gegeben, wie Sie Dateien zwischen diesen Stufen verschieben können.

Wir behandeln status zunächst in ch02-git-basics-chapter.asc, sowohl in seinen grundlegenden als auch in seinen kompakten Formen. Im Buch wird so ziemlich alles angesprochen, was man mit dem Befehl git status machen kann.

git diff

Der git diff Befehl wird verwendet, wenn Sie Unterschiede zwischen zwei beliebigen Bäumen feststellen möchten. Das könnte der Unterschied zwischen Ihrer Arbeitsumgebung und Ihrer Staging-Area (git diff an sich), zwischen Ihrer Staging-Area und Ihrem letzten Commit (git diff --staged) oder zwischen zwei Commits (git diff master branchB) sein.

In ch02-git-basics-chapter.asc betrachten wir zunächst die grundsätzliche Anwendung von git diff und zeigen dort, wie man feststellen kann, welche Änderungen bereits der Staging-Area hinzugefügt wurden und welche noch nicht.

Wir verwenden ihn mit der Option --check in ch05-distributed-git.asc, um nach möglichen Leerzeichen-Problemen zu suchen, bevor wir committen.

Wir sehen, wie man die Unterschiede zwischen Branches mit der Syntax git diff A…​B in ch05-distributed-git.asc effektiver überprüfen kann.

Wir verwenden ihn, um Leerzeichen-Differenzen mit -b herauszufiltern und wie man verschiedene Stufen von Konfliktdateien mit --theirs, --ours und --base in ch07-git-tools.asc vergleicht.

Zuletzt verwenden wir ihn, um Submodul-Änderungen effektiv mit --submodule in ch07-git-tools.asc zu vergleichen.

git difftool

Der Befehl git difftool startet ein externes Tool, um Ihnen den Unterschied zwischen zwei Bäumen zu zeigen, falls Sie einen anderen Befehl als das eingebaute git diff bevorzugen.

Das erwähnen wir nur kurz in ch02-git-basics-chapter.asc.

git commit

Der git commit Befehl erfasst alle Dateiinhalte, die mit git add zur Staging-Area hinzugefügt wurden und speichert einen neuen permanenten Schnappschuss in der Datenbank. Anschließend bewegt er den Branch-Pointer der aktuellen Branch zu diesem hinauf.

Wir erklären zunächst die Grundlagen des Commitings in ch02-git-basics-chapter.asc. Dort zeigen wir auch, wie man mit dem -a Flag den Schritt git add im täglichen Arbeitsablauf überspringt und wie man mit dem -m Flag eine Commit-Meldung in der Kommandozeile übergibt, anstatt einen Editor zu starten.

In ch02-git-basics-chapter.asc befassen wir uns mit der Verwendung der Option --amend, um den letzten Commit wieder herzustellen.

In ch03-git-branching.asc gehen wir sehr viel detaillierter darauf ein, was git commit bewirkt und warum es das so macht.

In ch07-git-tools.asc haben wir uns angesehen, wie man Commits kryptographisch mit dem -S Flag signiert.

Schließlich werfen wir einen Blick darauf, was der Befehl git commit im Hintergrund macht und wie er tatsächlich eingebunden ist in ch10-git-internals.asc.

git reset

Der git reset Befehl wird in erster Linie verwendet, um Aktionen rückgängig zu machen, wie man am Kommando erkennen kann. Er verschiebt den HEAD Pointer und ändert optional den index oder die Staging-Area und kann optional auch das Arbeitsverzeichnis ändern, wenn Sie --hard verwenden. Bei falscher Verwendung der letzten Option kann mit diesem Befehl auch Arbeit verloren gehen, vergewissern Sie sich daher, dass Sie ihn verstehen, bevor Sie ihn verwenden.

Wir befassen uns zunächst mit der einfachsten Anwendung von git reset in ch02-git-basics-chapter.asc. Dort benutzen wir es, um eine Datei, die wir mit git add hinzu gefügt haben, wieder aus der Staging-Area zu entfernen.

Wir gehen dann in ch07-git-tools.asc detailliert auf diesen Befehl ein, der sich ganz der Beschreibung dieses Befehls widmet.

Wir verwenden git reset --hard, um einen Merge in ch07-git-tools.asc abzubrechen, wo wir auch git merge --abort verwenden, das eine Art Wrapper für den git reset Befehl ist.

git rm

Der git rm Befehl wird verwendet, um Dateien aus dem Staging-Bereich und dem Arbeitsverzeichnis von Git zu entfernen. Er ähnelt git add dahingehend, dass er das Entfernen einer Datei für den nächsten Commit vorbereitet.

Wir behandeln den Befehl git rm in ch02-git-basics-chapter.asc ausführlich, einschließlich des rekursiven Entfernens von Dateien und des Entfernens von Dateien aus der Staging-Area, wobei sie jedoch, mit --cached, im Arbeitsverzeichnis belassen werden.

Die einzige andere abweichende Verwendung von git rm im Buch ist in ch10-git-internals.asc beschrieben, wo wir kurz die --ignore-unmatch beim Ausführen von git filter-branch verwenden und erklären, was es einfach nicht fehlerfrei macht, wenn die Datei, die wir zu entfernen versuchen, nicht existiert. Das kann bei der Erstellung von Skripten nützlich sein.

git mv

Der git mv Befehl ist ein schlanker komfortabler 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 beschreiben diesen Befehl nur kurz in ch02-git-basics-chapter.asc.

git clean

Der Befehl git clean wird verwendet, um unerwünschte Dateien aus Ihrem Arbeitsverzeichnis zu entfernen. Dazu kann das Entfernen von temporären Build-Artefakten oder das Mergen von Konfliktdateien gehören.

Wir behandeln viele der Optionen und Szenarien, in denen Sie den clean-Befehl verwenden könnten in ch07-git-tools.asc.

Branching und Merging

Es gibt nur eine Handvoll Befehle, die die meisten Branching- und Merging-Funktionen in Git bereitstellen.

git branch

Der git branch Befehl ist eigentlich so etwas wie ein Branch-Management-Tool. Er kann die von Ihnen vorhandenen Branches auflisten, einen neuen Branch erstellen, Branches löschen und umbenennen.

Der größte Teil von ch03-git-branching.asc ist dem Befehl branch gewidmet und wird im gesamten Kapitel verwendet. Wir stellen ihn zuerst in ch03-git-branching.asc vor und betrachten die meisten seiner anderen Funktionen (das Auflisten und Löschen) in ch03-git-branching.asc.

In ch03-git-branching.asc verwenden wir die Option git branch -u, um einen Tracking-Branch einzurichten.

Schließlich werden wir einige der Funktionen, die im Hintergrund ausgeführt werden, in ch10-git-internals.asc durchgehen.

git checkout

Der git checkout Befehl wird benutzt, um Branches zu wechseln und Inhalte in Ihr Arbeitsverzeichnis auszuchecken.

Wir sind in ch03-git-branching.asc zum ersten Mal dem git branch Befehl begegnet.

Wir zeigen in ch03-git-branching.asc, wie man das Tracking von Branches mit dem --track Flag startet.

Wir verwenden ihn in ch07-git-tools.asc, um Dateikonflikte mit --conflict=diff3 wieder zu integrieren.

Wir gehen auf die Beziehung zu git reset in ch07-git-tools.asc näher ein.

Abschließend gehen wir auf einige Details der Umsetzung in ch10-git-internals.asc ein.

git merge

Das git merge Tool wird benutzt, um einen oder mehrere Branches in den von in den ausgecheckten Branch zusammenzuführen. Es wird dann der aktuelle Branch zum Ergebnis des Merge-Vorgangs weitergeführt.

Der Befehl git merge wurde zunächst in ch03-git-branching.asc vorgestellt. Obwohl er an verschiedenen Stellen im Buch verwendet wird, gibt es nur sehr wenige Variationen des Befehls merge. In der Regel nur git merge <branch> mit dem Namen des einzelnen Branches, in dem Sie zusammenführen möchten.

Wir haben am Ende von ch05-distributed-git.asc beschrieben, wie man ein Squashed Merge macht (bei dem Git die Arbeit zusammenführt, sich aber so verhält, als wäre es nur ein neuer Commit, ohne die Historie des Branches, in dem man zusammenführt, aufzuzeichnen).

Wir haben in ch07-git-tools.asc viel über den Merge-Prozess und -Befehl berichtet, einschließlich des Befehls -Xignore-space-change und des Flags --abort, um ein Merge-Problem abzubrechen.

Wir haben in ch07-git-tools.asc gelernt, wie man Signaturen vor dem Zusammenführen überprüft, wenn Ihr Projekt GPG-Signaturen verwendet.

Schließlich haben wir in ch07-git-tools.asc das Mergen von Sub-Trees kennengelernt.

git mergetool

Der git mergetool Befehl startet lediglich einen externen Merge-Helfer, falls Sie Probleme mit einer Zusammenführung in Git haben.

Wir erwähnen ihn kurz in ch03-git-branching.asc und gehen ausführlich in ch08-customizing-git.asc darauf ein, wie Sie Ihr eigenes externes Merge-Tool integrieren können.

git log

Der git log Befehl wird verwendet, um den verfügbaren, aufgezeichneten Verlauf eines Projekts, ab des letzten Commit-Snapshots, rückwärts anzuzeigen. Standardmäßig wird nur die Historie des Branchs angezeigt, in dem Sie sich gerade befinden, kann aber mit verschiedenen oder sogar mehreren Heads oder Branches belegt werden, mit denen Sie Schnittmengen haben können. Er wird häufig verwendet, um Unterschiede zwischen zwei oder mehr Branches auf der Commit-Ebene anzuzeigen.

Dieses Kommando wird in fast jedem Kapitel des Buches verwendet, um die Verlaufshistorie eines Projekts zu demonstrieren.

Wir stellen den Befehl in ch02-git-basics-chapter.asc vor und gehen dort etwas ausführlicher darauf ein. Wir betrachten die Option -p und --stat, um eine Übersicht darüber zu erhalten, was in jedem Commit enthalten ist, und die Optionen --pretty und --oneline, um die Historie, zusammen mit einigen einfachen Datums- und Autoren-Filteroptionen, übersichtlicher wiederzugeben.

In ch03-git-branching.asc verwenden wir ihn mit der Option --decorate, um leichter zu verdeutlichen, wo unser Branch-Pointer sich gerade befindet und wir benutzen auch die --graph Option, um zu sehen, wie die unterschiedlichen Verläufe aussehen.

In ch05-distributed-git.asc und ch07-git-tools.asc behandeln wir die Syntax branchA..branchB, um mit dem git log Befehl zu überprüfen, welche Commits, relativ zu einem anderen Branch, eindeutig sind. In ch07-git-tools.asc gehen wir ausführlicher darauf ein.

In ch07-git-tools.asc und ch07-git-tools.asc wird das Format branchA…​branchB und die Syntax --left-right verwendet, um zu sehen, was in dem einen oder anderen Branch vorhanden ist, aber nicht in beiden. In ch07-git-tools.asc untersuchen wir auch, wie Sie die Option --merge verwenden können, um beim Debugging von Merge-Konflikten zu helfen, sowie die Option --cc, um Merge-Commit-Konflikte in Ihrem Verlauf zu betrachten.

In ch07-git-tools.asc benutzen wir die Option -g, um den Git-RefLog über dieses Tool anzuzeigen, anstatt eine Branch-Überquerung durchzuführen.

In ch07-git-tools.asc schauen wir uns die Verwendung der -S und -L Optionen an, um eine relativ komplexe Suche nach etwas durchzuführen, was während der Entwicklung des Codes passiert ist, wie z.B. den Fortschritt in einer Funktion wahrzunehmen.

In Commits signieren sehen wir, wie man mit Hilfe der Option --show-signature jedem Commit in der git log Ausgabe eine Validierungs-Zeichenkette hinzufügt, abhängig von der Gültigkeit der Signatur.

git stash

Der Befehl git stash wird verwendet, um nicht fertiggestellte Arbeit vorübergehend zu speichern, um Ihr Arbeitsverzeichnis aufzuräumen, ohne unfertige Arbeit auf einem Branch committen zu müssen.

Im Wesentlichen wird dieses Thema in ch07-git-tools.asc vollständig behandelt.

git tag

Der Befehl git-tag wird verwendet, um ein permanentes Lesezeichen an einen bestimmten Punkt in der Code-Historie zu setzen. Im Allgemeinen wird das für die Erstellung von Releases verwendet.

Dieser Befehl wird in ch02-git-basics-chapter.asc eingeführt und ausführlich behandelt; wir benutzen ihn in der Praxis in ch05-distributed-git.asc.

Wir behandeln in ch07-git-tools.asc auch, wie man einen GPG-signierten Tag mit dem -s Flag erstellt und einen mit dem -v Flag verifiziert.

Projekte gemeinsam nutzen und aktualisieren

Es gibt nicht besonders viele Befehle in Git, die auf das Netzwerk zugreifen, fast alle Befehle arbeiten mit der lokalen Datenbank. Wenn Sie Ihre Arbeit freigeben oder Änderungen von anderswo beziehen wollen, gibt es eine kleine Anzahl von Befehlen, die sich mit Remote-Repositorys beschäftigen.

git fetch

Der Befehl git fetch kommuniziert mit einem entfernten Repository und holt alle Informationen, die sich in diesem Repository befinden, aber nicht in Ihrem aktuellen Repository und speichert sie in Ihrer lokalen Datenbank.

Wir sehen uns diesen Befehl zunächst in ch02-git-basics-chapter.asc an und betrachten anschließend weitere Beispiele für seine Verwendung in ch03-git-branching.asc.

Wir benutzen ihn auch bei einigen Beispielen in ch05-distributed-git.asc.

Wir verwenden ihn in ch06-github.asc, um eine einzelne konkrete Referenz zu beziehen, die außerhalb des standardmäßigen Bereichs liegt und wir sehen, in ch07-git-tools.asc, wie man sie aus einem Packet herausholen kann.

Wir richten in ch10-git-internals.asc eigene Referenzspezifikationen ein, damit git fetch etwas anderes als die Standardeinstellung macht.

git pull

Der git pull Befehl ist im Grunde eine Kombination aus den git fetch und git merge Befehlen, wobei Git von dem angegebenen Remote holt und dann sofort versucht, es in den Branch, auf dem Sie gerade sind, zu integrieren.

Wir führen ihn in ch02-git-basics-chapter.asc ein und zeigen in ch02-git-basics-chapter.asc auf, was alles gemerged wird, wenn Sie ihn benutzen.

Wir erfahren in ch03-git-branching.asc auch, wie Sie damit bei Schwierigkeiten während des Rebasings umgehen können.

Wir zeigen in ch05-distributed-git.asc, wie man ihn mit einer URL verwendet, um Änderungen einmalig einzupflegen.

Schließlich erwähnen wir in ch07-git-tools.asc noch kurz, wie Sie die Option --verify-signatures verwenden können, um beim Abrufen/Pullen von Commits überprüfen können, ob diese mit GPG signiert wurden.

git push

Der git push Befehl wird benutzt, um mit einem anderen Repository zu kommunizieren, zu ermitteln, was die lokale Datenbank enthält, die die entfernte nicht hat und dann die Differenz in das entfernte Repository zu pushen. Es erfordert Schreibzugriff auf das entfernte Repository und wird daher in der Regel auf irgend eine Weise authentifiziert.

Wir sehen uns zuerst den git push Befehl in ch02-git-basics-chapter.asc an. Hier beschreiben wir die grundlegenden Aspekte des Pushens einer Branch zu einem Remote-Repository. In ch03-git-branching.asc gehen wir ein wenig detaillierter auf das Pushen bestimmter Branches ein und in ch03-git-branching.asc sehen wir, wie man Tracking-Branches einrichtet, um dorthin automatisch zu pushen. In ch03-git-branching.asc benutzen wir die Option --delete, um einen Branch auf dem Server mit git push zu löschen.

Im Kapitel 5 ch05-distributed-git.asc können Sie einige Beispiele für die Verwendung von git push finden,wie Sie Ihre Arbeit an Branches mit mehreren Remotes teilen können.

Wir sehen in ch02-git-basics-chapter.asc, wie Sie diesen Befehl benutzen können, um Tags, die Sie mit der --tags Option erstellt haben, gemeinsam zu nutzen.

In ch07-git-tools.asc verwenden wir die Option --recurse-submodules, um zu überprüfen, ob alle unsere Submodule funktionieren, bevor wir zum Hauptprojekt pushen, was bei der Verwendung von Submodulen sehr hilfreich sein kann.

In ch08-customizing-git.asc sprechen wir kurz über den pre-push Hook, ein Skript, das wir so einrichten können, dass es vor dem Abschluss eines Pushs ausgeführt wird, um zu prüfen, ob es zulässig sein sollte, zu pushen.

Schließlich betrachten wir in ch10-git-internals.asc das Pushen mit einer vollständigen Referenzspezifikation (engl. refspec) anstelle der allgemeinen Abkürzungen, die normalerweise verwendet werden. Das kann Ihnen helfen, sehr spezifisch zu entscheiden, welche Arbeit Sie teilen möchten.

git remote

Der Befehl git remote ist ein Management-Tool für die Verwaltung Ihrer Datensätze in Remote-Repositorys. Er erlaubt Ihnen, lange URLs als kurze Handles zu speichern, wie z.B. „origin“, damit Sie diese nicht ständig abtippen müssen. Sie können auch mehrere solcher Adressen einrichten und der Befehl git remote wird verwendet, um sie hinzuzufügen, zu ändern oder zu löschen.

Dieser Befehl wird ausführlich in ch02-git-basics-chapter.asc behandelt, einschließlich des Auflistens, Hinzufügens, Entfernens und Umbenennens.

Er wird auch in fast jedem der nachfolgenden Kapitel des Buchs verwendet, aber immer im Standardformat git remote add <name> <url>.

git archive

Der Befehl git archive wird verwendet, um eine Archivdatei von einem bestimmten Snapshot des Projekts zu erstellen.

Wir benutzen git archive in ch05-distributed-git.asc, um einen Tarball eines Projektes für die gemeinsame Nutzung zu erstellen.

git submodule

Der Befehl git submodule dient dazu, externe Repositorys innerhalb eines normalen Repositorys zu verwalten. Das kann für Bibliotheken oder andere Arten von gemeinsam genutzten Ressourcen nötig sein. Das submodule Kommando hat mehrere Unterbefehle (add, update, sync, usw.) für die Verwaltung dieser Ressourcen.

Dieser Befehl wird nur in ch07-git-tools.asc erwähnt und dort ausführlich beschrieben.

Kontrollieren und Vergleichen

git show

Der Befehl git show kann ein Git-Objekt auf eine einfache und für den Benutzer lesbare Weise darstellen. Normalerweise würden Sie diesen Befehl verwenden, um die Informationen über ein Tag oder einen Commit anzuzeigen.

Wir verwenden ihn erstmals in ch02-git-basics-chapter.asc, um annotierte Tag-Informationen anzuzeigen.

Danach, in ch07-git-tools.asc, verwenden wir ihn mehrfach, um die Commits zu dokumentieren, die unsere verschiedenen Revisionsauswahlen betreffen.

Eines der interessanteren Dinge, die wir in ch07-git-tools.asc mit git show machen, ist das Extrahieren bestimmter Dateiinhalte in verschiedenen Abschnitten bei einem Merge-Konflikt.

git shortlog

Der Befehl git shortlog wird verwendet, um die Ausgabe von git log zu verdichten. Dieses Kommando kennt ähnliche Optionen wie git log, aber anstatt alle Commits aufzulisten, wird eine Zusammenfassung der Commits, gruppiert nach Autor angezeigt.

Wir haben in ch05-distributed-git.asc gezeigt, wie man damit ein schönes Changelog erstellt.

git describe

Der Befehl git describe wird verwendet, um alles zu übernehmen, das zu einem Commit führt und er erzeugt eine Zeichenkette, die einigermaßen menschenlesbar ist und sich nicht ändern wird. Es ist eine Möglichkeit, eine Beschreibung eines Commits zu erhalten, die so eindeutig wie ein Commit SHA-1 ist, dafür aber auch verständlicher.

Wir verwenden git describe in ch05-distributed-git.asc und ch05-distributed-git.asc, um einen String zu erzeugen, der unsere Release-Datei benennt.

Debugging

Git hat ein paar Befehle, die Ihnen helfen, ein Problem im Code zu debuggen. Das geht vom Feststellen, wann etwas eingefügt wurde, bis zum Erkennen, wer es eingereicht hat.

git bisect

Das Tool git bisect ist ein unglaublich hilfreiches Debugging-Tool, das eingesetzt wird, um mit Hilfe einer automatischen Binärsuche herauszufinden, welcher bestimmte Commit als erster einen Fehler oder ein Problem verursacht hat.

Es wird in ch07-git-tools.asc vollständig dokumentiert und nur in diesem Abschnitt behandelt.

git blame

Der Befehl git blame kommentiert die Zeilen einer Datei, bei denen ein Commit zuletzt eine Änderung vorgenommen hat. Zudem wird vermerkt, wer der Autor des Commits ist. Das hilft Ihnen, denjenigen zu ermitteln, der weitere Angaben zu einem bestimmten Abschnitt Ihres Codes machen kann.

Er wird in ch07-git-tools.asc behandelt und nur in diesem Kapitel beschrieben.

git grep

Der Befehl git grep kann Ihnen bei der Suche nach einer beliebigen Zeichenfolge oder einem regulären Ausdruck in irgendeiner der Dateien Ihres Quellcodes behilflich sein, selbst in älteren Fassungen Ihres Projekts.

Er wird in ch07-git-tools.asc behandelt und nur dort beschrieben.

Patchen bzw. Fehlerkorrektur

Ein paar Befehle in Git fokussieren sich um die konzeptionelle Überlegung, wie Commits sich in Bezug auf die Änderungen verhalten, die sie einführen, wenn die Commit-Serie eine Reihe von Patches wäre. Diese Befehle helfen Ihnen, Ihre Branches auf dieser Grundlage zu organisieren.

git cherry-pick

Die git cherry-pick Anweisung wird benutzt, um die Änderung, die in einem einzelnen Git-Commit vorgenommen wurde, als neuen Commit auf dem Branch, auf dem Sie sich gerade befinden, erneut vorzunehmen. Das kann sinnvoll sein, um nur ein oder zwei Commits aus einem Branch individuell zu übernehmen, anstatt sie in den Branch einzubringen, der sämtliche geänderten Daten enthält.

Das „Kirschenpflücken“ (engl. cherry picking) wird in ch05-distributed-git.asc beschrieben und demonstriert.

git rebase

Der Befehl git rebase ist im Grunde genommen ein automatisches cherry-pick. Er ermittelt eine Reihe von Commits und nimmt sie dann nacheinander, in der gleichen Reihenfolge, an anderer Stelle wieder auf.

Rebasing wird ausführlich in ch03-git-branching.asc behandelt, einschließlich der Problematik bei der Zusammenarbeit im Zusammenhang mit Rebasing von bereits veröffentlichten Branches.

Wir verwenden ihn bei einem praktischen Beispiel in ch07-git-tools.asc für die Aufteilung Ihres Verlaufs in zwei getrennte Repositorys, wobei auch das Flag --onto benutzt wird.

In ch07-git-tools.asc kommt es bei einem Rebase zu einem Merge-Konflikt.

In ch07-git-tools.asc verwenden wir ihn auch in einem interaktiven Skripting-Modus mit der Option -i.

git revert

Der git revert Befehl ist im Prinzip ein umgekehrter git cherry-pick. Er erzeugt einen neuen Commit, der das genaue Gegenteil der Änderung bewirkt, die in dem Commit, auf den Sie gerade zugreifen, eingeführt wurde, d.h. er macht ihn rückgängig.

In ch07-git-tools.asc verwenden wir diesen Befehl, um einen Merge-Commit rückgängig zu machen.

E-mails

Viele Git-Projekte, einschließlich Git selbst, werden vollständig über Mailinglisten verwaltet. Git hat eine Reihe von integrierten Tools, die diesen Prozess erleichtern. Angefangen bei der Erstellung von Patches, die Sie einfach per E-Mail versenden können, bis hin zur Anwendung dieser Patches aus einem E-Mail-Postfach heraus.

git apply

Der Befehl git apply wendet einen Patch an, der mit dem Befehl git diff oder auch mit GNU diff erstellt wurde. Das ist vergleichbar mit dem, was der Befehl patch macht, mit ein paar kleinen Unterschieden.

In ch05-distributed-git.asc zeigen wir Ihnen die Handhabung und die Bedingungen, unter denen Sie das tun sollten.

git am

Der Befehl git am wird für die Übernahme von Patches aus einem Email-Postfach verwendet, konkret aus einem mbox-formatierten Email-Postfach. Dadurch können Sie Patches per E-Mail erhalten und sie einfach in Ihrem Projekt einsetzen.

In ch05-distributed-git.asc haben wir die Bedienung und den Umgang mit git am behandelt, einschließlich der Optionen --resolved, -i und -3.

Es gibt auch eine Reihe von Hooks, die Sie zur Vereinfachung des Workflows rund um git am verwenden können, die alle in ch08-customizing-git.asc behandelt werden.

Wir verwenden ihn in ch06-github.asc ebenfalls, um patch-formatierte Anpassungen in GitHub Pull-Request anzuwenden.

git format-patch

Der Befehl git format-patch wird verwendet, um eine Reihe von Patches im mbox-Format zu erzeugen, die Sie an eine Mailingliste, korrekt formatiert, senden können.

Wir zeigen anhand eines Beispiels in ch05-distributed-git.asc wie Sie mit dem Tool git format-patch zu einem Projekt beitragen können .

git imap-send

Der Befehl git imap-send lädt eine mit git format-patch erzeugte Mailbox in einen IMAP-Entwurfsordner hoch.

Wir betrachten in ch05-distributed-git.asc ein Beispiel, wie Sie durch Senden von Patches mit dem Tool git imap-send zu einem Projekt beitragen können.

git send-email

Mit dem Befehl git send-email werden Korrekturen, die mit git format-patch erzeugt wurden, über E-Mail verschickt.

Wir sehen in ch05-distributed-git.asc ein Beispiel für einen Projektbeitrag durch das Versenden von Patches mit dem Tool git send-email.

git request-pull

Der Befehl git request-pull wird lediglich dazu verwendet, einen exemplarischen Nachrichtentext zu generieren, der an eine Person per E-Mail gesendet werden kann. Wenn Sie einen Branch auf einem öffentlichen Server haben und jemanden wissen lassen wollen, wie man diese Änderungen integriert, ohne dass die Patches per E-Mail verschickt werden, können Sie diesen Befehl ausführen und die Ausgabe an die Person senden, die die Änderungen einspielen soll.

Wir zeigen in ch05-distributed-git.asc, wie man git request-pull verwendet, um eine Pull-Nachricht zu erzeugen.

Externe Systeme

Git enthält einige Kommandos mit denen eine Integration mit anderen Versionskontrollsystemen möglich ist.

git svn

Mit Hilfe der Funktion git svn kann man als Client mit dem Versionskontrollsystem Subversion kommunizieren. Das bedeutet, dass Sie Git zum Auschecken von und zum Committen an einen Subversion-Server verwenden können.

Dieser Befehl wird in ch09-git-and-other-systems.asc ausführlich erläutert.

git fast-import

Für andere Versionskontrollsysteme oder den Import aus beinahe jedem Format können Sie git fast-import verwenden. So können Sie das andere Format einfach auf etwas umwandeln, das Git problemlos verarbeiten kann.

In ch09-git-and-other-systems.asc wird diese Funktion eingehend untersucht.

Administration

Wenn Sie ein Git-Repository verwalten oder etwas in größerem Umfang reparieren müssen, bietet Git eine Reihe von Verwaltungsbefehlen, die Sie dabei unterstützen.

git gc

Der Befehl git gc führt „garbage collection“ (dt. Speicherbereinigung) auf Ihrem Repository aus. Er entfernt unnötige Dateien aus Ihrer Datenbank und packt die verbleibenden Dateien in ein effizientes Format.

Dieser Befehl läuft normalerweise im Hintergrund ab. Wenn Sie wollen, können Sie ihn aber auch manuell ausführen. Wir werden einige Beispiele dafür in ch10-git-internals.asc näher betrachten.

git fsck

Der Befehl git fsck wird zur Überprüfung der internen Datenbank auf Probleme oder Inkonsistenzen verwendet.

Wir beschreiben ihn nur kurz in ch10-git-internals.asc, um nach verwaisten Objekten zu suchen.

git reflog

Der Befehl git reflog untersucht ein Log-Protokoll, in dem alle Heads Ihrer Branches aufgezeichnet sind, während Sie daran gearbeitet haben. So können Sie Commits finden, die Sie durch das Umschreiben der Historie verloren haben könnten.

Wir beschäftigen uns mit diesem Befehl hauptsächlich in ch07-git-tools.asc. Dort zeigen wir die normale Benutzung und die Verwendung von git log -g, um die gleichen Informationen so zu formatieren damit sie wie mit der git log Ausgabe aussehen.

Wir stellen in ch10-git-internals.asc ein praktisches Beispiel für die Wiederherstellung einer derart verloren gegangener Branch vor.

git filter-branch

Der Befehl git filter-branch dient dazu, eine Vielzahl von Commits nach bestimmten Kriterien umzuschreiben. Sie können beispielsweise eine Datei überall entfernen oder das gesamte Repository in ein einziges Unterverzeichnis filtern, zum Extrahieren eines Projekts.

In ch07-git-tools.asc erklären wir den Befehl und untersuchen verschiedene Optionen wie --commit-filter, --subdirectory-filter und --tree-filter.

In ch09-git-and-other-systems.asc verwenden wir ihn, um importierte externe Repositorys zu berichtigen.

Basisbefehle

Es gibt zudem eine ganze Reihe von Basisbefehlen, auf die wir in diesem Buch gestoßen sind.

Zuerst begegnen wir ls-remote in ch06-github.asc, das wir zum Betrachten der Rohdaten auf dem Server verwenden.

Wir verwenden ls-files in ch07-git-tools.asc, ch07-git-tools.asc und ch07-git-tools.asc, um einen groben Einblick in Ihre Staging-Area zu erhalten.

Wir beziehen uns in ch07-git-tools.asc auch auf rev-parse, um so gut wie jede beliebige Zeichenkette zu verwenden und sie in ein SHA-1 Objekt zu konvertieren.

Die meisten der von uns beschriebenen Low-Level Basisbefehle sind in ch10-git-internals.asc enthalten, worauf sich das Kapitel mehr oder weniger konzentriert. Wir haben versucht, sie im restlichen Teil des Buches nicht zu verwenden.