====== Git ======
[[werkzeuge:start|← Werkzeuge]] · [[:start|Startseite]]
----
Git ist ein verteiltes Versionsverwaltungssystem für Quellcode und andere textbasierte Projektdateien.
Es ermöglicht, Änderungen nachvollziehbar zu speichern, frühere Entwicklungsstände wiederherzustellen und die Entwicklung eines Projekts in einzelne, überschaubare Schritte zu gliedern.
Git arbeitet zunächst **lokal**. Ein Dienst wie GitHub ist für die grundlegende Arbeit mit Git nicht erforderlich.
===== Grundbegriffe =====
**Repository**
Ein Repository ist ein von Git verwaltetes Projektverzeichnis. Es enthält neben den eigentlichen Projektdateien auch die Versionshistorie.
**Working Tree**
Der Working Tree ist der aktuelle Arbeitsstand der Dateien im Projektverzeichnis.
**Staging Area**
In der Staging Area werden gezielt die Änderungen gesammelt, die in den nächsten Commit aufgenommen werden sollen.
**Commit**
Ein Commit speichert einen definierten Entwicklungsstand dauerhaft in der lokalen Git-Historie.
**Branch**
Ein Branch ist ein Entwicklungszweig. Der Hauptzweig eines neuen Projekts heißt üblicherweise ''main''.
----
===== Repository anlegen =====
Im Stammverzeichnis des Projekts:
git init
Dadurch wird das aktuelle Verzeichnis zu einem Git-Repository.
Git legt dafür das versteckte Verzeichnis ''.git'' an.
----
===== Status prüfen =====
git status
Dieser Befehl gehört zu den wichtigsten Git-Befehlen.
Er zeigt unter anderem:
* neue, noch nicht versionierte Dateien
* geänderte Dateien
* gelöschte Dateien
* für den nächsten Commit vorgemerkte Änderungen
* den aktuellen Branch
Vor einem Commit sollte der Status grundsätzlich kontrolliert werden.
----
===== Dateien für einen Commit vormerken =====
Eine einzelne Datei:
git add dateiname
Mehrere bestimmte Dateien:
git add datei1 datei2 datei3
Alle Änderungen im aktuellen Projekt:
git add .
''git add'' erstellt noch keinen Commit. Die Änderungen werden lediglich in die Staging Area aufgenommen.
----
===== Vorgemerkte Änderungen kontrollieren =====
Eine kompakte Übersicht:
git diff --cached --stat
Die vollständigen Änderungen:
git diff --cached
Damit kann vor einem Commit geprüft werden, was tatsächlich gespeichert wird.
----
===== Commit erstellen =====
git commit -m "Beschreibung der Änderung"
Beispiel:
git commit -m "Geschaeftspartner auf Kontaktmodell umstellen"
Eine Commit-Nachricht sollte kurz und eindeutig beschreiben, welcher fachliche oder technische Entwicklungsstand gespeichert wird.
----
===== Git-Historie anzeigen =====
Ausführliche Darstellung:
git log
Kompakte Darstellung:
git log --oneline
Beispiel:
1773c45 Objekt-Stamm mit Statusmodell implementieren
778ceb0 Datenbankkonfiguration dokumentieren
f72336e Initiale Laravel-Basis fuer RoWaBase
----
===== .gitignore =====
Mit der Datei ''.gitignore'' wird festgelegt, welche Dateien und Verzeichnisse Git nicht versionieren soll.
Bei einem Laravel-Projekt gehören beispielsweise sensible oder automatisch erzeugte Inhalte nicht ins Repository:
.env
/vendor
/node_modules
Besonders wichtig ist ''.env'', da diese Datei Passwörter und andere lokale Zugangsdaten enthalten kann.
Eine ''.env.example'' kann dagegen versioniert werden. Sie dokumentiert die benötigten Einstellungen, enthält aber keine echten Passwörter.
----
===== Typischer Arbeitsablauf =====
Ein einfacher Git-Arbeitszyklus:
git status
git add
git status
git diff --cached --stat
git commit -m "Beschreibung"
git status
Damit ergibt sich der Ablauf:
- Änderungen durchführen
- Status prüfen
- gewünschte Änderungen vormerken
- Commit-Inhalt kontrollieren
- Commit erstellen
- sauberen Arbeitsstand prüfen
Nach einem erfolgreichen Commit sollte ''git status'' im Idealfall melden:
nothing to commit, working tree clean
----
===== Git und GitHub =====
Git und GitHub sind nicht dasselbe.
**Git** ist das Versionsverwaltungssystem und arbeitet auch vollständig lokal.
**GitHub** ist eine Online-Plattform, auf der Git-Repositories gespeichert, synchronisiert und gemeinsam bearbeitet werden können.
Die lokale Versionsverwaltung sollte daher unabhängig von GitHub verstanden und eingerichtet werden.
----
===== Praxis: RoWaBase =====
RoWaBase verwendet Git bereits während der Entwicklung.
Dabei werden fachlich zusammengehörige Änderungen möglichst in eigenen Commits gespeichert.
Beispiele:
Initiale Laravel-Basis fuer RoWaBase
Datenbankkonfiguration dokumentieren
Objekt-Stamm mit Statusmodell implementieren
Geschaeftspartner auf Kontaktmodell umstellen
Dadurch entsteht eine nachvollziehbare Entwicklungshistorie und ein stabiler Rückkehrpunkt nach jedem größeren Arbeitsschritt.
----
===== Merksatz =====
**Git speichert nicht einfach Dateien – Git dokumentiert Entwicklungsstände.**
Deshalb sollten Commits klein, nachvollziehbar und fachlich zusammengehörig sein.
[[#git|↑]]