Git-Tutorial: Die ersten Schritte mit dem Versionskontrollsystem

Die gemeinsame Entwicklung von Software-Projekten findet nicht nur innerhalb von Firmen statt: Auch im Open-Source-Sektor sind – je nach Projektgröße – mehrere hunderte bis tausende Freiwillige und Ehrenamtliche an der Instandhaltung, Optimierung, Weiterentwicklung oder Modifizierung eines Programms beteiligt. Ohne ein passendes System zur Aufzeichnung und Kontrolle der zahlreichen Änderungen durch die verschiedenen Entwickler wären derartige Projekte kaum zu realisieren.

Eine der beliebtesten Lösungen zur Versionsverwaltung ist das lizenzfreie Tool Git, das einfach zu lernen und gänzlich kostenfrei nutzbar ist. In diesem Tutorial vermitteln wir Ihnen alle wichtigen Git-Grundlagen, die Sie für den Einstieg in das Versionsverwaltungsprogramm benötigen.

Was ist Git?

Git ist ein verteiltes Versionsverwaltungssystem, das 2005 von Linux-Schöpfer Linus Thorvalds entwickelt und unter der freien GNU-GPLv2-Lizenz veröffentlicht wurde. Die Besonderheit des Tools besteht darin, dass zwar ein zentrales Repository für jedes Projekt existiert, alle beteiligten Nutzer sich aber eine lokale Arbeitskopie dieses Verzeichnisses auf das eigene Arbeitsgerät herunterladen. Jede dieser Kopien stellt ein vollständiges Back-up des Repositorys dar, weshalb eine durchgehende Netzwerkverbindung für den grundlegenden Arbeitsprozess nicht erforderlich ist. Zudem dienen die Kopien als Absicherung, falls das Haupt-Verzeichnis ausfallen sollte oder beschädigt ist. Vorgenommene Änderungen können jederzeit mit allen anderen Projektteilnehmern ausgetauscht und – sofern relevant – in das Repository aufgenommen werden.

Tipp

Eine der bekanntesten Alternativen zu Git ist das ebenfalls quellfreie Tool Subversion, besser bekannt als SVN, das im Gegensatz zu Git auf ein zentrales Verwaltungssystem setzt. Welche Gemeinsamkeiten diese Tools teilen und worin sie sich unterscheiden, erfahren Sie im Artikel „Git vs. SVN – Versionsverwaltung im Vergleich“.

So installieren Sie Git auf Ihrem Gerät

Wer das Software-Management mit Git lernen möchte, der sollte sich im ersten Schritt mit der Software und ihrer Benutzeroberfläche vertraut machen. Git ist für Windows, Unix/Linux und macOS verfügbar, wobei sich die verschiedenen Versionen hinsichtlich ihrer Bedienung leicht voneinander unterscheiden. Nach der jeweiligen Standardinstallation können Sie das Tool plattformunabhängig entweder über die Kommandozeile oder über ein grafisches Benutzer-Interface steuern.

Hinweis

Um die später in diesem Git-Tutorial aufgeführten Befehle nutzen zu können, sollten Windows-Nutzer das Versionsverwaltungssystem über Git-Bash ausführen, die in der Installation enthaltene Shell im Unix-Stil. Alternativ ist zwar auch die Steuerung der Software mit der Eingabeaufforderung bzw. über das Windows-Terminal möglich – allerdings funktioniert dort der Parameter-Aufbau der Kommandos anders (z. B. mit Gänsefüßchen statt mit einfachen Anführungszeichen).

Mit dem weiteren Klick laden Sie das Video von YouTube. In diesem Fall kann YouTube Cookies setzen, auf welche wir keinen Einfluss haben.

Binäre Installationsdateien, Anleitungen für Paketmanager-Installationen (Unix-Systeme) sowie einsatzfertigeportable Editionen für die einzelnen Systeme finden Sie auf der offiziellen Homepage des Git-Projekts. Laden Sie sich einfach das gewünschte Paket herunter bzw. greifen Sie auf das passende Paket in Ihrer Paket-Verwaltung zurück und folgen Sie anschließend den Anweisungen des Installationsassistenten. Bei einer portablen Edition entfällt der Installationsschritt selbstverständlich.

Tipp

In der Download-Sektion von git-scm.com stellt die Git-Community Ihnen diverse alternative grafische Oberflächen für den Versionsmanager zur Verfügung. Unter anderem finden Sie dort auch Git-Clients für Android und iOS, die Ihnen die Nutzung des Open-Source-Tools auf Ihrem Mobilgerät ermöglichen.

Git-Tutorial: Schritt für Schritt das Arbeiten mit Git lernen

Sobald Git auf dem eigenen System installiert ist, können Sie das Versionsverwaltungssystem für das Management Ihrer Projekte verwenden. Wie bei jeglicher Software gilt es aber zunächst, die elementaren Funktionen und Befehle zu verstehen, um den maximalen Nutzen aus der Anwendung ziehen zu können. Im Rahmen unseres großen Git-Tutorials für Einsteiger erläutern wir die wichtigsten Schritte der Git-Einrichtung und -Bedienungüber die Kommandozeile, sodass Sie im Anschluss problemlos Ihr eigenes Repository einrichten und verwalten können.

Hinweis

Fachleute der Deutschen Gesellschaft für Cybersicherheit haben festgestellt, dass eine Fehlkonfiguration von Git bzw. des verwendeten Webservers Repositorys des Versionsverwaltungssystems öffentlich per Browser zugänglich macht. Dies ist immer dann der Fall, wenn ein Git-Verzeichnis im Web-Root des Servers liegt, was daher unbedingt zu vermeiden ist. Speichern Sie Ihre Git-Repositorys niemals im Web-Root oder konfigurieren Sie Ihren Webserver alternativ so, dass Zugriffe auf das .git-Verzeichnis für Außenstehende unmöglich sind. Eine ausführliche Schilderung des Problems sowie Anleitungen zur Behebung der „Git-Lücke“ in gängigen Webserver-Lösungen liefert der Blogbeitrag der Deutschen Gesellschaft für Cybersicherheit zu diesem Thema.

Git-Repository anlegen bzw. klonen

Das Git-Respository ist das zentrale Verzeichnis eines verwalteten Projekts und somit auch die zentrale Anlaufstelle für alle Teilnehmer, über die die komplette Versionskontrolle reguliert wird. Ihr erster Schritt in Git besteht dementsprechend darin, ein solches Hauptverzeichnis zu erstellenoderzu klonen (in Form einer Arbeitskopie), sofern Sie sich einem Projekt anschließen, dessen gemeinsame Entwicklung bereits mithilfe von Git kontrolliert wird.

Wollen Sie die Versionskontrolle neu einrichten oder haben Sie das Tool zunächst einfach nur installiert, um die Arbeitsweise mit Git zu lernen, steht zunächst die Neuerstellung eines Repositorys an. Zu diesem Zweck wechseln Sie per „cd“ (change directory) in das gewünschte lokale Verzeichnis auf Ihrem Gerät:

cd individueller Verzeichnispfad

Dort führen Sie nun den folgenden Befehl aus, um ein .git-Verzeichnis zu erzeugen:

git init

Existiert das Git-Repository für Ihr Projekt bereits, benötigen Sie lediglich die Web- bzw. Netzwerkadresse zu diesem Verzeichnis, um mit dem Kommando „git clone“ eine Arbeitskopie auf Ihrem Rechner zu erzeugen:

git clone https://one-test.website/git-repository
Hinweis

Git unterstützt verschiedene Übertragungsprotokolle. Alternativ zu dem im Beispiel verwendeten HTTPS können Sie unter anderem auch SSH nutzen, um auf ein Repository zugreifen – vorausgesetzt, dass Sie über die entsprechende Berechtigung verfügen.

Repository-Status überprüfen und neue Dateien zur Versionsverwaltung hinzufügen

Zu den wichtigsten Git-Grundlagen zählt eine gute Organisation des eigenen Arbeitsverzeichnisses. Über dieses schlagen Sie nicht nur eigene Änderungen und Neuerungen an einem Projekt vor, die anschließend per Commit („Freischaltung“) übernommen werden, sondern beziehen auch Informationen über die Aktivitäten anderer Nutzer. Die Aktualität Ihrer Arbeitskopie können Sie über folgende Eingabe überprüfen:

git status

Bei einem gerade neu angelegten Repository bzw. einer absoluten Übereinstimmung von Hauptverzeichnis und Arbeitskopie erhalten Sie in der Regel die Information, dass es keinerlei neue Anpassungen an dem Projekt gab („No commits yet“). Zudem teilt Git mit, dass Sie aktuell keine eigenen Änderungen für den nächsten Commit geteilt haben („nothing to commit“).

Um eine eigene, neue Datei zur Versionsverwaltung hinzuzufügen oder eine überarbeitete Datei für den nächsten Commit anzumelden, wenden Sie den Befehl „git add“ auf diese Datei an (diese muss sich hierfür im Arbeitsverzeichnis befinden). In unserem Git-Tutorial fügen wir exemplarisch ein Textdokument mit dem Namen „Test“ hinzu:

git add Test.txt

Überprüft man nun anschließend den Repository-Status erneut, wird das Beispiel-Dokument als potenzieller Anwärter für den nächsten offiziellen Änderungsschritt des Projekts („Changes to be commited“) präsentiert:

Änderungen via Commit bestätigen und in den HEAD aufnehmen

Sämtliche Änderungen, die Sie (wie im vorherigen Abschnitt beschrieben) für die Versionsverwaltung angemeldet haben, müssen immer per Commit bestätigt werden, damit sie in den HEAD aufgenommen werden. Beim HEAD handelt es sich um eine Art Index, der auf den letzten wirksam gewordenen Commit in Ihrer aktuellen Git-Arbeitsumgebung (auch als „Branch“ bezeichnet) verweist. Das Kommando für diesen Schritt lautet:

git commit
Hinweis

Überprüfen Sie vor der Eingabe des Befehls immer, ob sämtliche für den Commit gewünschten Neuerungen als solche markiert sind (also per „git add“). Andernfalls werden diese ignoriert, auch wenn sie sich im Verzeichnis der Arbeitskopie befinden.

Nach der Ausführung des Befehls startet Git automatisch den Editor, den Sie bei der Installation als Standardwahl eingetragen haben bzw. den das Versionsverwaltungstool als Standardwahl vorsieht. In dem Dokument können Sie nun einen individuellen Kommentar zu dem geplanten Commit eintragen, wobei die bereits enthaltenen Zeilen per Semikolon auskommentiert sind und daher später nicht angezeigt werden. Sobald Sie den Editor schließen, erstellt Git den Commit:

Wie der Screenshot zeigt, erhalten Sie nach der Ausführung von „git commit“ eine zusammenfassende Meldung zu dem Commit: In den voranstehenden eckigen Klammern steht zum einen der Name der Branch (Projektzweig; hier „master“, da unser Arbeitsverzeichnis gleichzeitig auch das Hauptverzeichnis ist), in den die Änderungen übertragen wurden, zum anderen die SHA-1-Prüfsumme des Commits (hier „c0fdc90“). Es folgen der frei gewählte Kommentar (hier „Test“) und konkrete Informationen über die vorgenommenen Anpassungen.

Generierte Commits überarbeiten oder rückgängig machen

Wenn Sie Änderungen in Form eines Commits übernommen haben, können Sie den Inhalt nachträglich jederzeit überarbeiten oder ihn gänzlich zurücknehmen. Ein typischer Fall, bei dem Anpassungen notwendig sind, ist beispielsweise der, dass Sie den Commit zu früh generiert und einige wichtige Dateien bzw. Anpassungen vergessen haben. In diesem Fall gilt es, die neuen bzw. angepassten Dateien nachträglich per „git add“ bereitzustellen und die Eintragung ins Haupt-Repository wiederholen. Hierfür hängen Sie dem Standardbefehl die Option --amend an:

git commit --amend

Wollen Sie den zuletzt generierten Commit hingegen wieder zurücknehmen, gelingt dies mit folgendem Git-Kommando:

git reset --soft HEAD~1

Durch dieses Kommando wird der zuletzt in den HEAD aufgenommene Commit zurückgenommen. Die darin enthaltenen Dateien werden dabei wieder in den Status als „geplante Änderungen für den nächsten Commit“ zurückgesetzt. Sollen die Arbeitsdaten hingegen gänzlich gelöscht werden, verwenden Sie anstelle des voranstehenden Kommandos folgenden Befehl:

git reset --hard HEAD~1

Commit-Historie anzeigen lassen

Das Projektmanagement mit Git zu lernen, lohnt sich insbesondere aufgrund der elementaren Versionierungs-Features. Ein großes Plus des Open-Source-Systems besteht darin, dass Sie sich jederzeit anzeigen lassen können, welche Änderungen zuletzt am Repository vorgenommen worden sind. Der hierfür benötigte Git-Befehl lautet:

git log

Der Befehl „git log“ listet die erzeugten Commits in umgekehrter, chronologischer Reihenfolge auf, wobei standardmäßig die SHA-1-Prüfsumme, der Autor (Name und Mailadresse) sowie das Datum des jeweiligen Commits angezeigt werden. Zudem ist natürlich auch die individuelle Meldung zu sehen, die Ihnen bzw. anderen Nutzern als entscheidender Hinweis dient, die einzelnen Änderungen schnell einordnen zu können. In unserem Git-Tutorial haben wir zuvor einen einzelnen Commit mit der Nachricht „Test“ generiert, den uns das Kommando bei der Ausführung auch wie gewünscht anzeigt:

Das log-Kommando lässt sich außerdem mithilfe verschiedener Parameter modifizieren. Einige nützliche Optionen sind in der nachfolgenden Tabelle aufgeführt:

Option für den Befehl „git log“ Beschreibung
-p zeigt zusätzlich auch die Änderungen an, die in einem Commit enthalten sind
-2 listet nur die letzten beiden ausgeführten Commits auf
--stat fügt jedem Eintrag eine kleine Statistik hinzu, die zeigt, welche Dateien geändert und wie viele Zeilen hinzugefügt oder entfernt wurden
--pretty ändert das Format der Ausgabe, wobei verschiedene Formate zur Verfügung stehen; --pretty=oneline ist z. B. ein mögliches Format, das alle Commits in einer einzelnen Zeile auflistet
--abbrev-commit zeigt nur die ersten Zeichen einer SHA-1-Prüfsumme an
--relative-date zeigt das Datum einer Änderung in relativem Format an (z. B. „vor zwei Wochen“)

Commits in das Haupt-Repository aufnehmen

Bis hierhin haben wir in diesem Git-Tutorial aufgezeigt, wie Sie Änderungen als Commit im HEAD des lokalen Verzeichnisses speichern. Damit diese aber auch in das Haupt-Repository aufgenommen werden, ist die Eingabe folgenden Befehls erforderlich:

git push origin master

Durch ihn überträgt Git automatisch alle erstellten Commits, die bisher nur in der Arbeitskopie vorhanden waren, in das Hauptverzeichnis, das auch die Bezeichnung „master“ hat. Ersetzen Sie diesen Namen in dem aufgeführten Code durch den eines anderen Branches (Projektzweigs), werden die Dateien stattdessen direkt dorthin gesendet.

Tagging: Tags in Git erstellen, löschen und auflisten

Wie viele andere Versionskontrollsysteme verfügt auch Git über eine Tagging-Funktion, mit der sich ausgewählte Punkte in der Historie eines Repositorys als wichtig markieren lassen. Typischerweise werden solche Tags dazu verwendet, Releases einer Software wie Version 1.0, 2.0 usw. zu kennzeichnen, damit diese auch bei großen Projekten jederzeit leicht abrufbar bleiben. Git unterstützt dabei zwei Arten von Tags:

  • Annotierte Tags („annotated“) werden als eigenständige Objekte in der Datenbank gespeichert, inklusive eigener Prüfsumme, Tagging-Meldung, Datum, Name und Mail-Adresse des Tag-Erstellers sowie optionaler GNU-Privacy-Guard-Signatur (GPG-Signatur).
  • Nicht-annotierte Tags („lightweight“) fungieren – ähnlich wie Branches – ausschließlich als Verweis auf einen Commit. Dieser Typ bietet sich dann an, wenn Sie lediglich temporäre Tags benötigen oder die erweiterten Informationen nicht speichern wollen.

Annotierte Tags erstellen Sie in Git, indem Sie den Befehl „git tag -a“ auf den gewünschten Commit anwenden. Hängen Sie außerdem den Parameter „-m“ an, können Sie – in gerade Anführungszeichen gesetzt – auch direkt in der Kommandozeile die gewünschte Tagging-Meldung formulieren. In diesem Git-Tutorial haben wir den Commit „Test“ generiert, den wir zu diesem Zweck auch mit einem Tag inklusive der Meldung „example tag“ verknüpfen:

git tag -a Test -m "example tag"
Hinweis

Wenn Sie bei der Tag-Erstellung auf den Parameter „-m“ verzichten, öffnet Git automatisch den Editor, sodass Sie dort die gewünschte Tagging-Meldung eingeben können.

Für nicht-annotierte Tags gehen Sie ähnlich vor: Allerdings wenden Sie ausschließlich den Grundbefehl „git tag“ auf den gewünschten Commit an und verzichten auf weitere Parameter. Für unser Git-Tutorial-Beispiel würde dies folgendes Kommando bedeuten:

git tag Test

Sobald Tags für Ihr Repository existieren, können Sie sich diese mit dem bereits bekannten „git tag“ und den optionalen Parametern „-l“ bzw. „--list“ anzeigen lassen:

git tag
git tag -l
git tag --list

Um einen Tag aus dem lokalen Arbeitsverzeichnis zu löschen, wenden Sie die Befehlskette „git tag -d“ auf diesen an. Unseren Verweis auf „Test“ entfernt man also folgendermaßen:

git tag -d Test

Auch Tags müssen Sie im Übrigen wie Commits manuell in das Hauptverzeichnis übertragen. Dafür werden der Tag-Name sowie das Kommando „git push origin“ benötigt. Statt des Tag-Namens können Sie aber auch den Parameter „--tags“ anhängen, wodurch alle generierten Tags im Repository aufgenommen werden:

git push origin --tags

Branches erstellen, verwalten und löschen

Die in diesem Git-Tutorial bereits erwähnten Branches stellen im Prinzip nichts Anderes als einzelne Arbeitsversionen des Haupt-Respositorys dar, das selbst als Branch – mit dem Namen „master“ – eingestuft wird. Mit diesen Arbeitszweigen bietet Git die perfekte Grundlage dafür, Features und Funktionen isoliert voneinander zu entwickeln und erst zu einem späteren Zeitpunkt zusammenzuführen. Letzteres bezeichnet man auch als „mergen“ (von engl. merge „verschmelzen“).

Einen neuen Branch zu erstellen, ist nicht schwer: Sie benötigen lediglich die Anweisung „git branch“ und hängen dieser die gewünschte Bezeichnung für den Zweig an. Einen Beispiel-Branch mit dem Namen „test_branch“ erstellen Sie beispielsweise auf folgende Weise:

git branch test_branch

Anschließend können Sie jederzeit mit der Anweisung „git checkout“ in diesen Branch wechseln:

git checkout test_branch

Wollen Sie Branches zusammenführen, gelingt dies mit dem Kommando „git merge“. Wechseln Sie zunächst via „checkout“ in das Verzeichnis, das einen anderen Zweig aufnehmen soll und führen Sie dort dann den genannten Befehl inklusive des Namens des aufzunehmenden Branchs aus. Unsere Arbeitsversion „test_branch“ lässt sich beispielsweise folgendermaßen in das Haupt-Repository mergen:

git checkout master
git merge test_branch

Haben Sie Arbeitszweige zusammengeführt und benötigen daher einen bestimmten Branch nicht mehr, können Sie diesen ganz einfach löschen. Zu diesem Zweck wenden Sie die Befehlsfolge „git branch -d“ auf den nicht mehr benötigten Versionszweig an. Unser Git-Tutorial-Beispiel „test_branch“ lässt sich durch folgende Eingabe entfernen:

git branch -d test_branch

Die einzige Voraussetzung für den Löschprozess: Sie müssen sich in einem anderen Branch befinden. Wir sind daher vor der Ausführung des Befehls in das Haupt-Repository gewechselt, wie auf dem folgenden Screenshot zu sehen ist:


Auf dem Laufenden bleiben?

Jetzt für unseren Newsletter anmelden und gratis Online-Marketing Whitepaper für lokale Anbieter sichern!