26.02.2014 Aufrufe

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!