Zum Inhalt springen
Der Guide für ein smartes Leben.
VG Wort Pixel
Programmierung

Git für Einsteiger – Versionsverwaltung im Projekt

Wann immer Sie verschiedene Versionen eines Projekts sichern und festhalten wollen, eignet sich das Open-Source-Tool Git.

Autor: Wolf Hosbach • 26.1.2023 • ca. 6:30 Min

Git
Für das Verwalten von Projektversionen eignet sich Git.
© fatmawati-achmad-zaenuri/Shutterstock
Inhalt
  1. Git für Einsteiger – Versionsverwaltung im Projekt
  2. Anleitung: Arbeiten mit Git im Team

Linus Thorvalds ist nicht nur der Vater des Linux-Kernels, sondern auch der von Git, einer Software zur Versionsverwaltung von Quellcode. Versionieren lassen sich damit aber auch andere Projekte, in denen bestimmte Entwicklungsstufen festgehalten und wiederherstellbar sein sollen: Dokumente, Grafike...

Linus Thorvalds ist nicht nur der Vater des Linux-Kernels, sondern auch der von Git, einer Software zur Versionsverwaltung von Quellcode. Versionieren lassen sich damit aber auch andere Projekte, in denen bestimmte Entwicklungsstufen festgehalten und wiederherstellbar sein sollen: Dokumente, Grafiken oder Projektstände. Das System funktioniert am einfachsten mit Konsolebefehlen, es gibt aber auch grafische Tools dazu.

Die Grundbegriffe von Git erscheinen im ersten Moment etwas wirr, haben aber eine eigene Logik, an die man sich schnell gewöhnt. In dieser Anleitung für Einsteiger gehen wir sie Schritt für Schritt durch.

Grundlagen: So funktioniert Git

Git verfügt über drei Arbeitsebenen: Das Arbeitsverzeichnis, die Stage und das Repository. Manchmal kommt noch ein zentrales Team-Repository hinzu. Im Arbeitsverzeichnis arbeitet der Anwender – wie der Name schon sag, legt dort seine Projektdateien ab, ändert sie oder löscht einzelne wieder.

Will er einen Stand seiner Arbeit speichern, so übergibt er die Änderungen zur Vorgängerversion erstmal der Stage. Das ist eine Art automatisierter Zusammenfassung aller Änderungen zur Kontrolle, bevor alles endgültig in das Repository wandert. Eine Versionierung im Repository heißt bei Git ein Commit. In einer Team-Umgebung gibt es noch ein zentrales Repository, mit dem der Anwender seine Daten synchronisiert.

Die Zustände oder Commits des Projekts reihen sich also hintereinander wie auf einer Perlenschnur auf. Alle haben einen festen siebenstelligen Hash-Wert. Der letzte, aktuelle Commit nennt sich HEAD.

In komplexeren Projekten ist es auch möglich, mehrere Stränge zu betreiben, die irgendwann vom Hauptstrang (Master oder Main) abzweigen, eigene Wege gehen, sich aber auch manchmal wieder mit dem Master verbinden können. Ein solcher Seitenast heißt Branch. Oft gib es zum Beispiel eine stabile Programmversion im Master- und eine Entwicklerversion im Seitenast.

Git Arbeitsablauf
Anfänger haben oft Probleme, die verschiedenen Ebenen von Git zu verstehen.
© Weka Media Publishing

Installation

Git ist ein Linux-Programm, es gib aber Windows-Pakete, die eine spezielle Linux-Kommandozeile, die Bash, emulieren. Laden Sie die Installationsdatei von git-scm.com und starten Sie diese. Für Git sollten Sie unter Windows mit Admin-Rechten arbeiten. Die vorgegebenen Optionen bei der Installation sind meist zutreffend, Sie sollten sich aber ein Desktop-Symbol anlegen lassen und den Standard-Editor wechseln, z.B. auf Visual Studio Code oder den Windows-eigenen Editor Notepad.

Tipp: Visual Studio erkennt ein Git-Verzeichnis, und viele hier beschriebenen Befehle lassen sich im Editor mit Tastenklick erledigen.

Tipp: Git kommt mit dem Vim-Editor, der nicht jedermanns Sache ist. Wenn man in Vim landet, z.B. bei Log-Befehlen, verlassen Sie diesen wieder mit dem Tastendruck q. Hilfreich aber nicht immer zielführend ist auch Esc.

Git Editor
Ändern Sie den Editor von Git. Sehr gut eignet sich z.B. Visual Studio Code oder auch der Windows Editor.
© Weka Media Publishing

Erste Konfiguration

Starten Sie nun Git Bash vom Desktop. Es erscheint eine Kommandozeile ähnlich der Windows-Eingabeaufforderung. Führen Sie nun erste Konfigurationsschritte aus, die für alle Projekte, die Sie später anlegen wollen, gelten:

git config --global user.name “Max Meier“

git config -- global user.email “max@meier.de“

Mit

git help config

erhalten Sie weitere Informationen.

Tipp: Alle Hilfsseiten finden sie als HTML im Git-Programmverzeichnis …\mingw64\share\docs\git-doc.

Wechseln Sie nun in das Verzeichnis, in dem sich an Ihrem Projekt arbeiten (Ihr Arbeitsverzeichnis). Standardmäßig startet die Bash-Konsole im Verzeichnis des angemeldeten Users (c:/Users/<Sie>/). Unser Beispiel liegt in einem Ordner auf dem Desktop:

cd ./Desktop/projekt

Nun starten Sie die Versionskontrolle für diesen Ordner. Dabei spielt es keine Rolle, ob sich schon Arbeitsdateien und -ordner darin befinden oder nicht:

git init

Es kommt die Meldung „Inizialized … Git repository in C:/users/<Sie>/Desktop/projekt/.git

Wie in der Meldung schon ersichtlich, findet sich im Projektordner ein neuer Systemordner .git. Hier liegen alle relevanten Informationen für Git. Sie können diesen Ordner auch von einem anderen Rechner aus ansprechen, der Git installiert hat, und Git holt sich alle relevanten Daten.

Git Branches
Größere Git-Projekte lassen sich in verschiedenen Ästen gliedern.
© Weka Media Publishing

Daten mit Git versionieren

Fügen Sie nun Dateien und Ordner in Ihr Arbeitsverzeichnis. Mit

add --all

laden Sie nun alle Dateien in die Stage – die Zwischenebene von Git. Sie können auch nur einzelne Dateien versionieren mit

add eine_datei.txt

Git verwaltet aber immer nur die Dateien, die Sie irgendwann mit Add zugefügt haben. Im zu prüfen, was sich in der Stage befindet, verwenden Sie:

git status

Es erscheint die Meldung „on branch master“, was auf den Zweig Master hinweist. Dann „no commits yet“. Alle Änderungen befinden sich als noch in der Stage. Dann folgt eine Liste der Dateien, die Sie mit Add der Bühne hinzugefügt und seit dem letzten Mal geändert haben. In unserem Fall also alle Daten.

Wenn Sie zufrieden mit der Auswahl in der Stage sind, überführen Sie den Zustand in der Stage als Snapshot in das eigentliche Repository:

git commit

Nun öffnet sich der bei der Installation angegebene Editor und Sie geben dort eine Beschreibung Ihres Snapshots ein, die üblicherweise folgende Form hat: Eine Zeile von bis zu 50 Zeichen mit einer Zusammenfassung (z.B. „Version 1.1.9. Kleine Änderungen“), dann eine Leerzeile, dann eine ausführliche Beschreibung der Änderungen im Projekt. Speichern Sie die Datei und schließen Sie sie. Dann übernimmt Git den Commit.

Die Antwort lautet: „master (root-commit) xyzxyzx Version 1.1.9 Kleine Änderungen“ Dann eine Liste der geänderten Dateien. xyzxyzx ist dabei eine eindeutige Hash-Kennung des Systems, über die Sie genau auf diesen Status/Commit zugreifen können. git status wird Ihnen nun sagen: „Nothing to commit“.

Wenn Ihnen statt viel Text ein kurzes Stichwort reicht, sind Sie schneller mit

git commit -m „Version 1.1.9. Kleine Änderungen“

Sie können nun im Arbeitsverzeichnis Dateien ändern oder neue hinzufügen, mit add --all und commit werden diese sicher als Snapshots im Repository hinterleget. git status zeigt ihnen genau an, welche Dateien im Arbeitsverzeichnis geändert oder der Stage zugefügt wurden.

Eine Abkürzung an der Stage vorbei gibt es mit dem Befehl

commit -am „Kommentar“

Er überführt alle geänderten Dateien Ihres Arbeitsverzeichnisses sofort ins Repository, aber Achtung, neue Dateien werden ignoriert. Diese müssen Sie immer über Add der Stage zufügen, um sie dann erst mit Commit ins Repository zu übertragen.

Suchen im Repository

Bislang kennen Sie nur den Befehl Status, der allerdings nur die Stage mit dem Arbeitsverzeichnis vergleicht. Suchen Sie Versionen und Daten im Repository verwenden Sie den Befehl Log. Er ist sehr mächtig, und wenn Sie ihn im vollen Umfang nutzen wollen, helfen Ihnen o.g. Hilfeseiten weiter.

git log --oneline

zeigt Ihnen eine kurze Übersicht über alle Snapshots mit Hash-Wert und Kurzkommentar.

git log --name-only

listet für jede Version nur die geänderten Dateien.

git log -- name-only --oneline --graph

kombiniert beides und stellt es etwas hübscher dar.

git log -p xyzxyzy

schließlich zeigt alle Änderungen eines Commits im Detail, das heißt auch Änderungen innerhalb von nichtbinären Daten (txt, html, js, c etc.). Die Änderungen sind augenfällig Rot markiert. Denken Sie daran: Mit q verlassen Sie den Vim-Editor wieder.

Git Änderungen
Der Befehl git log -p zeigt detailiert alle Änderungen zwischen Versionen und zwar auch innerhalb von nichtbinären Dateien.
© Weka Media Publishing

Ansehen und Wiederherstellen einer älteren Version

Um eine vorherige Version (auch nur temporär) wiederherzustellen, gibt es verschiedene Strategien. Die einfachste, effektivste und uneleganteste geht mit Checkout. Hier wird die gewünschte Version der Daten in das Arbeitsverzeichnis kopiert – aber komplett abgetrennt von der Versionsverwaltung (Head detached). Das heißt, Änderungen im Arbeitsverzeichnis lassen sich nicht mehr mit Add und Commit in System zurückspielen.

Als Workaround lassen sich die Dateien aber einfach in einen temporären Ordner kopieren und dann geändert ins System zurückholen. Ein Beispiel. Sie haben vier Versionen im Repository und git log --oneline zeig:

4xxxyyy Kommentar 4 (HEAD -> master)

3xxxyyy Kommentar 3

2xxxyyy Kommentar 2

1xxxyyy Kommentar 1

Der aktuelle Zustand (HEAD vom Master-Zweig) ist Nr. 4. Nun wollen Sie Nr. 2 ansehen oder sogar wiederherstellen. Geben sie ein (Achtung: Alle jetzt vorhanden Dateien im Arbeitsverzeichnis werden gelöscht!):

git checkout 2xxxyyy

Ihr Arbeitsverzeichnis enthält nun die Dateien dieses Snapshots. Kopieren Sie sie z.B. nach C:/temp.

In Git kehren Sie nun in Ihren altes Versionssystem zurück mit

checkout master

Sofort findet sich in Ihrem Arbeitsverzeichnis nun wieder Zustand 4. Nun können Sie den Inhalt ersetzen durch die Dateien im Temp-Ordner. Mit Add und Commit erstellen Sie einen neuen Zustand 5, der dem von 2 entspricht:

5xxxyyy Kommentar 5 (HEAD -> master)

4xxxyyy Kommentar 4

3xxxyyy Kommentar 3

2xxxyyy Kommentar 2

1xxxyyy Kommentar 1

Eine weitere Methode, ältere Zustände wiederzuholen ist Reset. Dieser Befehl ist sehr mächtig und nicht ungefährlich, denn er löscht alle Zwischenstände. Wenn Sie Zustand 2 in unserem Beispiel mit Reset wiederherstellen, sind 3 und 4 unwiederbringlich verloren.

git reset --hard 2xxxyyy

führt mit Log zu

2xxxyyy Kommentar 2 (HEAD -> master)

1xxxyyy Kommentar 1

Dann gibt es noch den Befehl Revert, der gezielt Änderungen eines bestimmten Commits zurücknimmt, aber nur genau diese:

git revert 2xxxyyy

macht genau die Änderungen rückgängig, die Sie in Schritt 2 gemacht haben. Alle anderen, auch spätere Aktionen werden belassen. Haben Sie in Schritt 2 eine Datei hinzugefügt fehlt diese nun. Haben Sie hingegen in Schritt 3 eine Datei zugefügt, die in 2 noch nicht drin war, verbleibt diese. Schwierig wird es, wenn Sie die Datei, die Sie in 2 zugefügt haben, in 3 noch geändert haben. Dann bringt Revert eine Merge-Fehlermeldung.

Wie das Arbeiten mit Git online im Team funktioniert, lesen Sie auf der nächsten Seite.

Mehr zum Thema
Benachrichtigung über den E-Mail-Posteingang auf dem Laptop-Bildschirm.
N8N-programmieren-shutterstock
Automatisierte Programme, Heimnetz & Internetdienste Programmieren ohne Code: N8N
lexbizz_bildschirm
Kaufmännische Cloud-Lösung Haufe-Lexware lexbizz Cloud-ERP im Test
94,0%
Hacker Cyberangriff Malware - Sicherheit (Symbolbild)