Git ist unter Entwicklern eine der am weitesten verbreiteten Software zur verteilten Versionskontrolle unter Linux, um die Koordination für dasselbe Projekt zu erleichtern.
Wenn Sie mit Git nicht vertraut sind, wird empfohlen, diese Einführungsanleitung zur Installation und den ersten Schritten mit Git zu lesen. Bisher wurden nur die Grundfunktionen gezeigt. Dazu gehören die Vorbereitung des Arbeitsbereichs und die Erstellung der verschiedenen Repositories, durch Datei „stage“ und „commit“ der Änderungen, sowie eventuelles Entfernen oder Umbenennen von Dateien.
Der nächste Schritt ist um zu verstehen, wie man sich zwischen den verschiedenen Versionen des Projekts bewegt. Wie die Art der Software nahelegt, schafft die Möglichkeit, ausgehend von einer bereits bestehenden Arbeit neue und unendliche Repositories zu erstellen, unweigerlich eine Kette verschiedener Pfade, die alle aus demselben Projekt stammen.
Der Zweck dieses Leitfadens ist es daher, zu erklären, wie die Versionierung eines Projekts korrekt verwaltet wird, indem zwischen den verschiedenen Zweigen gewechselt wird (Branching), während verschiedene Zweige zusammengeführt und frühere Versionen wiederhergestellt werden. Diese Anleitung gilt für die wichtigsten Linux-Distributionen und wurde auf Ubuntu 18.04 getestet.
Git-Zweige verwenden
Branching ist eine der leistungsstärksten Funktionen von Git. Verzweigungen werden verwendet, um verschiedene und voneinander unabhängige Funktionen ausgehend von derselben Wurzel zu implementieren. Der Hauptzweig eines Projekts wird beim Erstellen eines "Repositorys" generiert und als "Master" bezeichnet.
Das erste, was Sie tun müssen, um zu lernen, wie Sie sich zwischen den verschiedenen Zweigen eines Repositorys bewegen, ist die Verwendung des Befehls "git checkout", gefolgt von dem Zweig, an dem gearbeitet werden soll:
$ git checkout <branch>
Um beispielsweise den Hauptzweig zu verschieben und daran zu arbeiten, verwenden Sie den Befehl gefolgt von "master", wie unten gezeigt:
$ git checkout master
Sobald der Zweig zum Erstellen Ihres Repositorys angegeben ist, werden die Dateien in die letzte Stufe des ausgewählten Zweigs im Arbeitsordner verschoben. Anschließend wird durch alle zukünftigen Änderungen eine neue Projektversion für diesen bestimmten Zweig erstellt.
Einen neuen Branch mit Git erstellen
Um einen neuen Branch mit Git zu erstellen, verwenden Sie einfach den Befehl "git branch", gefolgt von dem Namen, der dem erstellten Branch gegeben werden soll:
$ git branch <nome_ramo>
Der Wechsel zum neu erstellten Zweig erfolgt nicht automatisch. Um also an dem neu erstellten Zweig zu arbeiten, greifen Sie auf den Befehl "git checkout" zurück:
$ git checkout <nome_ramo>
An diesem Punkt verweist jeder Commit auf den neu erstellten Zweig.
In Abbildung 1 werden die folgenden Operationen durchgeführt:
- Zum "Master"-Zweig wechseln;
- Erstellung eines neuen Zweigs (Test0);
- Zum neu erstellten Zweig wechseln;
- Hinzufügen einer Datei (BranchTest);
- Übernahme von Änderungen;
- Kehren Sie zum "Master"-Zweig zurück.
Abb. 1 – Beispiel für Branch- und Commit-Erstellung unter Ubuntu 18.04
Git-Zweige finden und löschen
Der "git branch"-Befehl, dem nichts folgt, gibt einfach eine Liste aller existierenden Branches frei.
$ git branch
Verwenden Sie zum Löschen eines Zweigs den Befehl "git branch", in diesem Fall gefolgt vom Argument "-d" und dem Namen des zu entfernenden Zweigs:
$ git branch -d <nome_ramo>
Abbildung 2 zeigt ein Beispiel einer Liste von Verzweigungen und der Löschung der neu erstellten Verzweigung (Test0).
Abb. 2 – Beispiel einer Liste von Zweigen und Eliminierung unter Ubuntu 18.04
Wie in der Abbildung gezeigt, gibt Git beim Versuch, einen Branch zu löschen, an dem Änderungen vorgenommen wurden, einen Fehler zurück. Da der Zweig noch nicht zusammengeführt wurde (Zweigzusammenführung), wird seine Eliminierung vermieden, um zu vermeiden, dass die gesamte Arbeit versehentlich verloren geht.
Es ist immer noch möglich, den Zweig mit dem Argument „-D“ zu löschen:
$ git branch -D <nome_ramo>
Git-Zweige zusammenführen
Der Zweck der Verzweigungen besteht darin, parallele und unabhängige Arbeitsabläufe zu schaffen, um mit neuen Funktionen zu experimentieren, ohne das Hauptprojekt zu beeinträchtigen (z. B. „Release“, „Beta“ oder „Fix“-Versionen). Niederlassungen sind auf kurze Lebensdauer ausgelegt, was in der Fusion mit einer anderen Niederlassung gipfelt.
Zweige können zusammengeführt werden, indem der Befehl „git merge“ gefolgt vom Namen des zusammenzuführenden Zweigs verwendet wird.
$ git merge <ramo_da_unire>
Offensichtlich muss die Fusion zwischen zwei Zweigen stattfinden. Der Befehl "git merge" führt den in der Syntax angegebenen Zweig mit dem Zweig zusammen, auf dem Sie sich gerade befinden. Um also das „Merge“ durchzuführen, stellen Sie sicher, dass Sie sich über „git checkout“ auf dem Branch befinden, mit dem Sie zusammenführen möchten.
Daher hinterlässt der angegebene „git merge“-Befehl keine Spur des Merge in die "Repository"-Geschichte.
Sehr oft kann es notwendig sein, die Zusammenführung zu verfolgen, damit es einfach ausreicht, das Argument "--no-ff" zu verwenden. Auf diese Weise wird Git in Zukunft automatisch einen neuen Commit durchführen, um die "Merge" zu identifizieren:
$ git merge --no-ff <ramo_da_unire>
Die Zusammenlegung zweier Zweigniederlassungen bedeutet nicht die Eliminierung der Zweigniederlassung, die mit der angegebenen zusammengelegt wurde. Stattdessen wird es weiter existieren. Um es dauerhaft zu entfernen, fahren Sie mit der Entfernung fort, indem Sie den Befehl „git branch -d“ verwenden.
In Abbildung 3 ist ein Beispiel für die Zusammenführung zwischen Zweigen dargestellt. Die durchgeführten Operationen sind insbesondere:
- Zum "Master"-Zweig wechseln;
- Liste der Branchen;
- Zusammenführung des "Br01"-Zweigs;
- Kündigung der Filiale "Br01".
Abb. 3 – Beispiel für Zweige, die unter Ubuntu 18.04 zusammengeführt wurden
Um eine Liste zu erhalten, die nur die Zweige zeigt, die nicht mit dem aktuellen zusammengeführt wurden, verwenden Sie den Befehl "git branch", gefolgt vom Argument "--no-merged".
$ git branch --no-merged
Konfliktlösung
Wenn zwei Zweige zusammengeführt werden, bestimmt Git automatisch, welcher der beiden übergeordneten Commits der beste ist, und führt eine Zusammenführung mit ihm durch.
Git kann möglicherweise nicht automatisch entscheiden, welche Version der Dateien während dieses Vorgangs beibehalten werden soll, und benachrichtigt daher a Konflikt.
Wenn diese Situation eintritt, lösen Sie den Konflikt manuell und übernehmen Sie die vorgenommenen Änderungen. Alternativ wird die Zusammenführung der Filialen nicht stattfinden.
Das folgende Beispiel zeigt dieses Vorkommnis am besten. Da es zwei verschiedene Zweige berücksichtigt, in denen zwei verschiedene Versionen derselben Datei gespeichert sind, zeigt Git nach dem Zusammenführen die folgende Warnung an:
CONFLICT (content): Merge conflict in <filename>
Automatic merge failed; fix conflicts and then commit the result.
Um das Problem zu lösen, wechseln Sie in den Ordner, in dem sich die widersprüchliche Datei befindet, ändern Sie sie und führen Sie ein anschließendes "Hinzufügen" mit "Commit" durch. Im Falle einer Textdatei meldet Git die problematischen Abschnitte in der Datei, indem der Abschnitt eingefügt wird, der nur im ersten Zweig und zwischen "=" zwischen "<<<<<<<" und "=======" vorhanden ist. ======"und">>>>>>> "der nur in der zweiten vorhanden ist.
Durch manuelles Ändern der Datei und Ausführen des Befehls "git add", gefolgt von " git commit", werden die beiden Zweige schließlich zusammengeführt, wie in Abbildung 4 gezeigt.
In dem in Abbildung 4 gezeigten Beispiel wurden auch die nicht verbundenen Zweige kontrolliert, um sicherzustellen, dass die "Zusammenführung" korrekt durchgeführt wurde.
Abb. 4 – Beispiel für Konflikt- und Merge-Auflösung unter Ubuntu 18.04
Tatsächlich erscheint nach dem Commit der "Br03"-Zweig nicht mehr in der Liste der getrennten Zweige, was beweist, dass die Fusion mit dem "Br04"-Zweig erfolgreich war.
Git-Tags-Verwaltung
"Tags" sind nichts anderes als Etiketten, die an die verschiedenen "Commits" angehängt werden, um nützliche Informationen über die Version und das Projekt, an dem Sie arbeiten, zu melden.
Um die Tags in einem „Repository“ anzuzeigen, verwenden Sie den Befehl „git tag“:
$ git tag
Es gibt zwei verschiedene Arten von Tags in Git:„annotated“ und „lightweight“. Die ersten werden verwendet, um die vollständigen Versionsinformationen wie "Prüfsumme", den Entwicklernamen, Datum / Uhrzeit und einen beliebigen Kommentar anzugeben. Die zweiten sind einfache Zeiger auf ein Commit.
Der Befehl „git tag“ gefolgt vom Text zur Identifizierung der Version erstellt ein „leichtes“ Tag. Die Syntax ist unten dargestellt:
$ git tag <Nome_Versione>
Die Verwendung des Arguments "-a" führt stattdessen zu der Version eines "annotierten" Tags:
$ git tag -a <Nome_Versione> -m <Commento>
Um schließlich ein Tag anzuzeigen, verwenden Sie den Befehl „git show“ wie unten gezeigt:
$ git show <Nome_Versione>
Mit den gerade untersuchten Befehlen können Sie "Tags" nur zum letzten Commit hinzufügen. Um einem älteren Commit ein Tag hinzuzufügen, geben Sie nach dem Befehl „git tag“ auch die Kennung (Prüfsumme) des Commits an, auf das verwiesen werden soll. Die vollständige Syntax ist unten dargestellt:
$ git tag -a <Nome_Versione> <Checksum_Commit>
Verwenden Sie den Befehl „git log“, um die „Prüfsumme“ der verschiedenen durchgeführten Commits zu verfolgen.
$ git log --pretty=oneline
Sobald der Befehl gestartet wird, wird eine Liste in chronologischer Reihenfolge der verschiedenen "Prüfsummen" der Commits auf dem Terminal angezeigt, gefolgt von dem Kommentar, der während der "Commit"-Phase der Änderungen eingegeben wurde.