LinuxUser Programmieren (Vorschau)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Grundkurs Git<br />
SCHWERPUNKT<br />
weder fangen Sie also noch einmal<br />
von vorne an – oder nutzen die<br />
Vorteile der Versionsverwaltung<br />
und machen ein Rollback auf die<br />
letzte funktionierende Revision.<br />
Sind Sie absolut sicher, dass die<br />
letzten Stunden für die Katz waren,<br />
stoßen Sie nun mit git reset<br />
--hard CommitID ein „hartes“ Rollback<br />
an. Die Commit-ID bezeichnet<br />
den 40-stelligen Hash-Wert<br />
des gewünschten Schnappschusses.<br />
Die Hashes unterscheiden<br />
sich in der Regel so weit, dass Git<br />
meist die ersten sieben Stellen genügen,<br />
um einen Commit eindeutig<br />
zu identifizieren. Mit einem<br />
harten Reset setzen Sie alle Dateien<br />
im Arbeitsverzeichnis und<br />
in der Staging Area zurück.<br />
Ersetzen Sie --hard durch --soft,<br />
setzt Git den angegebenen Commit<br />
auf die Version „HEAD“, was<br />
bedeutet, dass er als der letzte<br />
Commit gilt. Dabei bleiben alle<br />
Änderungen im Arbeitsverzeichnis<br />
und in der Staging Area erhalten.<br />
Ob ein Soft-Reset bei wirren<br />
Code-Verstrickungen sinnvoll<br />
und hilfreich ist, muss jeder für<br />
sich entscheiden.<br />
Eine andere Möglichkeit eines<br />
Rollbacks bietet git checkout, das<br />
Sie schon vom Wechseln der<br />
Branches kennen. Für einen Rollback<br />
benennen Sie den Master-<br />
Branch um, holen mit git checkout<br />
CommitID den letzten brauchbaren<br />
Schnappschuss und machen diesen<br />
mittels git checkout -b master<br />
zum neuen Master. Bei git checkout<br />
-b Name handelt es sich um<br />
eine Kurzform für git branch Name<br />
und git checkout Name (Abbildung<br />
G). Der Vorteil bei dieser<br />
Variante des Rollbacks: Sämtliche<br />
Änderungen und eventuell verwendbaren<br />
Ideen bleiben zunächst<br />
erhalten – Sie können sie<br />
später immer noch löschen.<br />
Mit git checkout lassen sich<br />
nicht nur komplette Commits zurücksetzen,<br />
sondern auch einzelne<br />
Dateien. Dazu geben Sie lediglich<br />
zusätzlich den Dateinamen<br />
an. So stellt das Kommando git<br />
checkout af4673fa6 main.cpp den<br />
Zustand der Revision af4673fa6<br />
der Datei main.cpp wieder her.<br />
Verteilte Versionen<br />
Git wurde von Beginn an als verteilte<br />
Versionsverwaltung entworfen,<br />
was bedeutet, dass mehrere<br />
Beteiligte gleichzeitig an einem<br />
Projekt arbeiten können. Im<br />
Unterschied zu einer zentralen<br />
Versionsverwaltung, die für Logs<br />
und Commits eine Verbindung<br />
zum Repository auf dem Server<br />
braucht, laufen Git-Repositories<br />
lokal und lassen sich mit einem<br />
Server abgleichen, sobald eine<br />
Netzwerkverbindung besteht.<br />
Da der Server nur die Änderungen<br />
verteilen soll, genügt es, wenn<br />
dort ein sogenanntes Bare-Reposi-<br />
F Das Git-Log zeigt<br />
die Projekthistorie.<br />
G Gits Checkout-Befehl<br />
eignet sich nicht<br />
nur für das Wechseln<br />
von Branches, sondern<br />
auch für Rollbacks.<br />
VERTEILTE VERSIONSVERWALTUNG: ERFAHRUNGSWERTE<br />
Bei Software-Projekten, an denen mehrere Entwickler<br />
über eine Versionsverwaltung arbeiten, haben sich<br />
einige Vorgehensweisen als vorteilhaft erwiesen. Beispielsweise<br />
sollten Sie auch die Änderungen durch<br />
andere Entwickler verfolgen. So sehen Sie schnell,<br />
ob deren Code mit den eigenen Komponenten zusammenspielt,<br />
und finden etwaige Notizen zu noch<br />
bestehenden Fehlern. Repositories sollten immer nur<br />
ein Projekt enthalten, auch wenn Entwickler an mehreren<br />
Projekten gleichzeitig zusammenarbeiten.<br />
Mit einem Commit schließen Sie idealerweise immer<br />
genau eine Aufgabe ab, beispielsweise ein<br />
neues Feature oder einen Bugfix. Die Commit-Nachrichten<br />
sollten aussagekräftig ausfallen und komplizierte<br />
Sachverhalte erklären, sofern das nicht in<br />
Kommentaren im Code erfolgt. Ein Repository enthält<br />
nach Möglichkeit nur Dateien, welche die Entwickler<br />
erstellt haben. Automatisch generierte Files<br />
oder frei zugängliche externe Bibliotheken und<br />
Hilfsprogramme haben darin nichts zu suchen: Sie<br />
blähen das Repository nur unnötig auf.<br />
Der bei einem Commit veröffentlichte Code muss<br />
funktionieren, sodass die Projektmitglieder mit der<br />
Arbeit fortfahren können und nicht anfangen müssen,<br />
überraschend auftauchende Fehler zu beheben.<br />
Entfernen Sie trotzdem niemals ohne Rückfrage<br />
Code aus dem Projekt, nur weil er Ihnen nicht<br />
gefällt oder Sie ihn nicht auf Anhieb verstehen.<br />
www.linux-user.de<br />
11 | 12 35