Dieser Blogeintrag gibt einen schnellen Einblick in die Git basics, richtet sich an Einsteiger und soll das Arbeiten und den Start erleichtern. Es werden die allerersten Schritte gezeigt, die wichtigsten Funktionen vorgestellt, sowie die Vor- und Nachteile betrachtet und ein Vergleich zu SVN gemacht. Für fortgeschrittene User sollen weitere Einträge folgen, die diverse Schwerpunkte, erweiterte Funktionen und grafische GUI Clients aufgreifen.
Was ist Git
Git ist ein verteiltes Versionierungssystem zum Verwalten von Dateien. Typisch für Git sind eine nichtlineare Entwicklung und eine dezentrale Speicherung. Es besteht zwar ein zentrales Repository, aber jeder Nutzer besitzt eine lokale Kopie inklusive der entsprechenden Versionen, welche auch ein Backup darstellen (verteiltes System). Eine durchgehende Verbindung zur Remote-Repository ist somit nicht zwingend notwendig, lediglich zur Synchronisation. Zudem ist Git plattformunabhängig und lässt sich somit in nahezu jeder Umgebung einrichten.
Erste Schritte und wichtigste Funktionen
Git kommt „out of the box“ mit einer Kommandozeile, ohne GUI. Für den Einen ist das eine tolle Sache, andere arbeiten lieber mit einer der vielen graphischen Oberflächen oder nutzen Plug-ins, welche es für diverse Editoren gibt. Ein Vorteil der Kommandozeile im Gegensatz zu all den GUI-Alternativen ist, dass wirklich alle vorhandenen Git-Befehle ausgeführt werden können. Die ersten und wichtigsten Schritte nach der Installation sind folgende:
Die (Basis-)Konfiguration
git config -1 | Konfiguration anzeigen |
Git config –global user.name „Max Mustermann“ | Benutzer einrichten (wird in jedem Commit angezeigt) |
git config –global user.email „max.mustermann@in-factory.com“ | E-Mail einrichten |
git config user.name | einzelne Konfiguration abfragen |
git config –global init.defaultBranch main | Branchnamen „main“ konfigurieren |
Das Repository erstellen/klonen
git init | ein neues Repository initialisieren (hierzu muss man sich im jeweiligen Verzeichnis befinden) |
git status | Status im Repository abfragen |
git clone /verzeichnis/repository | erstellt eine lokale Kopie eines Repositories |
git clone benutzername@host:/verzeichnis/repository | erstellt eine lokale Kopie eines Remote-Repositories |
Der Workflow
„Git definiert drei Hauptzustände, in denen sich eine Datei befinden kann: committet (engl. committed), geändert (engl. modified) und für Commit vorgemerkt (engl. staged).
Modified bedeutet, dass eine Datei geändert, aber noch nicht in die lokale Datenbank eingecheckt wurde.
Staged bedeutet, dass eine geänderte Datei in ihrem gegenwärtigen Zustand für den nächsten Commit vorgemerkt ist.
Committed bedeutet, dass die Daten sicher in der lokalen Datenbank gespeichert sind.“ (vgl. Scott Chacon & Ben Straub, Pro Git (Second Edition)¹, 2021, S. 17)
Add & Commit
git add | Datei hinzufügen (staging) |
git add * | alle Dateien im Verzeichnis hinzufügen (staging) |
git commit | Commit „speichert“ die neue Version (betrifft das lokale Repository, nicht das entfernte) |
git commit -m „Message Text“ | Commit „speichert“ die neue Version mit Kommentar |
git log | Commits auflisten |
git reset | Aktion rückgängig machen |
Die Änderungen “hochladen”
git push origin | Änderungen im lokalen Repository an das Remote-Repository senden |
git remote add origin | erstelltes Repository hochladen |
Branching
Branches, ein wesentlicher Unterschied zu SVN, werden verwendet, um unterschiedliche Entwicklungen voneinander zu isolieren. Der Master- oder auch Main-Branch ist der Hauptzweig eines jeden Repository. In der Entwicklung sollten andere weitere Branches verwendet werden, die dann zum späteren Zeitpunkt mit den Master- bzw. Main-Branch zusammengeführt werden (= merge).
git checkout –b | erstellt neuen Branch |
git checkout master | Branch wechseln zum Master-Branch |
git branch –d | Branch löschen |
git push origin | Branch in Remote-Repository hochladen (für andere verfügbar machen) |
Update & Merge
git pull | neusten Stand vom remote Repository in das lokale Repository ziehen |
git merge | einen Branch mit dem akt. Repository zusammenführen |
git diff | Differenzen zwischenzwei Branches anzeigen |
Tagging
git tag 1.0.0 | neuen Tag erstellen (Releaseteags wie man sie z.B. aus SVN kennt, die Commit_Id wird mit dem Tag referenziert) |
git log | Commit-Liste anzeigen |
Änderung rückgängig machen
git checkout — | lokal veränderten Stand auf den eingecheckten Stand zurücksetzen |
Git fetch origin Git reset –hard origin/master |
lokale Version verwerfen und Stand vom entfernten Repository holen |
git revert | Commit rückgängig machen |
Lifecycle-Status einer Datei in Git
Vorteile
- Paralleles Arbeiten (dezentral, branching)
- Absicherung durch verteiltes Repository
- Flexibilität durch verschiedene Arbeitsweisen
- Offline Arbeit möglich da dezentral und verknüpfbare Struktur
- Erweiterbarkeit (diverse Webclients und Plug-ins)
- Kostenlos
Nachteile und Kritik
Ein grosser Kritikpunkt ist die nicht so leichte Erlernbarkeit. Für Einsteiger ist die Terminologie zum Teil neu und Nutzer anderer Systeme sind manchmal irritiert, z.B. „-revert“ bedeutet in SVN was anderes als in Git.
Wenn man z.B. aus einem Grund die Strukturen leerer Verzeichnisse vollständig aufzeichnen möchte, ist Git nicht geeignet. Wenn die Verzeichnisse über keinen Inhalt verfügen, verwirft Git diese.
Vergleich mit SVN
Ob Git oder SVN, sie sind die zwei wohl bekanntesten unter Ihrer Art und beide haben Ihre jeweiligen Vor- und Nachteile. Anbei die relevantesten Unterschiede:
Git | SVN | |
Versionsverwaltung | verteilt | zentral |
Repository | lokale Repository-Kopien, in denen entwickelt wird | zentrales Repository, in dem Arbeitsfortschritte erstellt werden |
Verbindung mit Netzwerk | nur zur Synchronisation erforderlich | bei jedem Zugriff |
Berechtigung/Zugriff | gesamtes Verzeichnis | pfadbasiert |
Änderungen | zeichnet Inhalte auf | zeichnet Dateien auf |
Nachvollziehbarkeit/Historie | Repository und lokale Kopien enthalten komplette Historie | nur im Repository vollständig, lokale Kopien beinhalten lediglich die aktuellste Version |
¹Das Buch steht kostenlos hier zum Download