Git

Was ist Git? 🤔

Git ist ein weit verbreitetes, kostenloses Open-Source-System zur verteilten Versionskontrolle (Distributed Version Control System - DVCS). Es wurde 2005 von Linus Torvalds, dem Schöpfer des Linux-Kernels, ursprünglich für die Verwaltung der Linux-Kernel-Entwicklung entworfen. Git dient dazu, Änderungen an Dateien (insbesondere Quellcode) über die Zeit hinweg nachzuverfolgen, sodass Entwickler*innen den Projektverlauf einsehen, zu früheren Versionen zurückkehren und vor allem effektiv im Team zusammenarbeiten können.

Im Gegensatz zu zentralisierten Versionskontrollsystemen (wie z.B. Subversion/SVN), bei denen die gesamte Historie nur auf einem zentralen Server liegt, ist bei Git jede Arbeitskopie eines Entwicklers auch ein vollständiges Repository mit der kompletten Projekthistorie. Dies ermöglicht dezentrales Arbeiten (auch offline), bietet eine hohe Ausfallsicherheit und unterstützt flexible Arbeitsabläufe (Workflows). Git legt besonderen Wert auf Geschwindigkeit, Datenintegrität und leistungsfähige Unterstützung für nicht-lineare Entwicklungszweige (Branching und Merging).

Wichtige Git-Konzepte

Das Verständnis einiger zentraler Konzepte ist für die Arbeit mit Git unerlässlich:

  • Repository (Repo): Das Herzstück von Git; eine Datenstruktur, die alle Dateien und Verzeichnisse des Projekts sowie die gesamte Historie aller Änderungen speichert. Es gibt lokale Repositories (auf dem Rechner der Entwickler*innen) und oft auch entfernte (remote) Repositories (auf Servern wie GitHub, GitLab), die zur Synchronisation und Zusammenarbeit dienen.
  • Commit: Ein Schnappschuss des Zustands aller versionierten Dateien im Projekt zu einem bestimmten Zeitpunkt. Jeder Commit enthält Metadaten wie den Autor, das Datum, eine Commit-Nachricht (die die Änderungen beschreibt) und einen Verweis auf den/die vorherigen Commit(s). Commits bilden die chronologische Historie des Projekts.
  • Branch (Zweig): Eine eigenständige Entwicklungslinie. Branches ermöglichen es, an neuen Funktionen oder Bugfixes zu arbeiten, ohne die Hauptentwicklungslinie (oft `main` oder `master` genannt) direkt zu beeinflussen. Änderungen können parallel auf verschiedenen Branches erfolgen.
  • Merge (Zusammenführen): Der Vorgang, die Änderungen von einem Branch in einen anderen zu integrieren. Git ist besonders stark im effizienten Zusammenführen von unterschiedlichen Entwicklungsständen.
  • Staging Area (Index): Ein Zwischenspeicherbereich, in dem Änderungen gesammelt werden, bevor sie in einem Commit zusammengefasst werden. Mit `git add` werden Dateien oder Änderungen zur Staging Area hinzugefügt. Dies erlaubt eine feingranulare Kontrolle darüber, was im nächsten Commit enthalten sein soll.
  • Remote: Eine Verknüpfung zu einem anderen Repository, meist auf einem Server. Dient dem Austausch von Commits zwischen lokalen und entfernten Repositories (z.B. über `git push` und `git pull`). Der Standardname für das Haupt-Remote-Repository ist oft `origin`.

Typischer Arbeitsablauf (Workflow)

Obwohl es verschiedene etablierte Git-Workflows gibt (wie Gitflow oder GitHub Flow), beinhaltet ein grundlegender Arbeitszyklus oft die folgenden Schritte:

  1. Repository holen/aktualisieren: Ein entferntes Repository wird lokal geklont (`git clone`) oder die lokale Kopie wird auf den neuesten Stand gebracht (`git pull`).
  2. Branch erstellen/wechseln: Für eine neue Aufgabe wird oft ein neuer Branch erstellt und zu diesem gewechselt (`git checkout -b `).
  3. Änderungen durchführen: Dateien werden bearbeitet, hinzugefügt oder gelöscht.
  4. Änderungen zur Staging Area hinzufügen: Die gewünschten Änderungen werden für den nächsten Commit vorgemerkt (`git add`).
  5. Commit erstellen: Die Änderungen in der Staging Area werden als neuer Snapshot in der lokalen Historie gespeichert, versehen mit einer aussagekräftigen Commit-Nachricht (`git commit`).
  6. Änderungen teilen: Lokale Commits werden zum entfernten Repository hochgeladen (`git push`), um sie anderen zugänglich zu machen.
  7. Branches zusammenführen: Nach Abschluss einer Aufgabe werden die Änderungen des Branches (oft nach einem Code-Review über einen Pull/Merge Request) in den Hauptbranch integriert (`git merge` oder über die Weboberfläche der Hosting-Plattform).

Vorteile und Ökosystem

Git hat sich aufgrund seiner zahlreichen Vorteile als Standard in der Softwareentwicklung etabliert:

  • Geschwindigkeit: Die meisten Operationen (Commit, Branching, Merging) finden lokal statt und sind dadurch extrem schnell.
  • Leistungsfähiges Branching und Merging: Ermöglicht einfache parallele Entwicklung, Experimente und flexible Workflows.
  • Datenintegrität: Durch die Verwendung kryptografischer Hashfunktionen (SHA-1) für alle Objekte wird sichergestellt, dass die Historie und der Inhalt nicht unbemerkt verändert werden können.
  • Verteilte Architektur: Erlaubt Offline-Arbeit, bietet Redundanz (jeder Klon ist ein Backup) und unterstützt vielfältige Kollaborationsmodelle.
  • Skalierbarkeit: Kann auch sehr große Projekte mit langer Historie effizient verwalten.
  • Open Source: Frei verfügbar und unter aktiver Entwicklung durch eine große Community.

Um Git herum hat sich ein riesiges Ökosystem entwickelt. Plattformen wie GitHub, GitLab und Bitbucket bieten Hosting für Git-Repositories sowie erweiterte Funktionen für Zusammenarbeit, Code-Reviews (Pull/Merge Requests), Issue Tracking und CI/CD. Daneben gibt es zahlreiche grafische Benutzeroberflächen (GUI-Clients wie Sourcetree, GitKraken, Fork) und eine tiefe Integration in alle gängigen integrierten Entwicklungsumgebungen (IDEs).

Zurück

Wie können wir Ihnen helfen?

Die Potenziale digitaler Möglichkeiten sind riesig. Das Allermeiste, was Sie sich vorstellen können, können wir für Sie entwickeln. Glauben Sie nicht? Dann sollten wir reden. Sonst natürlich auch gerne.

Mathias Münzner

Geschäftsführer

06221-1878440

Kontakt

cortona GmbH

Margot-Becke-Ring 8

69124 Heidelberg

T: +49 (0) 6221 18 78 440

E: info@cortona.de