Git-Repository — ist ein Speicher für den Quellcode eines Projekts, in dem Git jede Änderung von Dateien während der gesamten Entwicklung verfolgt. Das Repository enthält die vollständige Historie von Commits, Branches und Tags und ermöglicht Entwicklern die gemeinsame Arbeit am Code. Laut Git, 2024 ist das Repository die Grundlage jedes Versionskontrollsystems und wird in Millionen von Projekten weltweit eingesetzt.
Wichtige Erkenntnisse
Git-Repository — ist eine Datenstruktur, in der das Versionskontrollsystem Metadaten und Objekte speichert, die die Historie der Dateiänderungen eines Projekts beschreiben. Wenn ein Entwickler ein Repository mit dem Befehl git init initialisiert, erstellt Git einen versteckten Ordner .git im Projektstammverzeichnis.
In diesem Ordner befinden sich alle Objekte, Referenzen und Konfigurationsdateien, die für den Betrieb des Systems erforderlich sind. Das Repository ist an keinen bestimmten Ort gebunden — der Entwickler kann es lokal erstellen und dann mit einem Remote-Server verbinden.
Git verwendet ein verteiltes Repository-Modell: Jeder Projektteilnehmer hat eine vollständige Kopie der Historie auf seinem Computer. Das bedeutet, dass die meisten Operationen — Commits, Historie anzeigen, Branches erstellen — lokal ohne Kontakt zum Server ausgeführt werden.
Laut der Git-Dokumentation macht die verteilte Architektur das System ausfallsicher: Fällt der Server aus, kann jedes lokale Repository als Quelle für die Wiederherstellung der vollständigen Projekthistorie dienen.
Lokales Repository — ist eine Kopie des Projekts auf dem Computer des Entwicklers. Es enthält die gesamte Historie von Commits, Branches und Tags und ermöglicht die Ausführung von Commit-, Branch-, Merge- und Rebase-Operationen ohne Netzwerkverbindung.
Entferntes Repository — wird auf einem Server gehostet und dient als Synchronisationspunkt für alle Teammitglieder. Entwickler senden ihre Änderungen mit dem Befehl git push und holen Änderungen anderer mit git pull.
Die Verbindung zwischen lokalem und entferntem Repository wird über remote origin konfiguriert — die Server-URL, die in der Git-Konfiguration gespeichert ist. Ein lokales Repository kann mit mehreren entfernten Repositories verbunden sein, was bei der Arbeit mit Forks nützlich ist.
Der Hauptvorteil dieses Modells ist, dass der Entwickler offline am Code arbeiten und Änderungen erst dann synchronisieren kann, wenn er bereit ist, das Ergebnis zu senden.
| Eigenschaft | Lokal | Entfernt |
|---|---|---|
| Standort | Auf dem Computer des Entwicklers | Auf einem Server (GitHub, GitLab) |
| Offline-Zugriff | Vollständiger Zugriff auf alle Operationen | Ohne Verbindung nicht verfügbar |
| Synchronisation | Push/Pull mit dem entfernten | Nimmt Push von lokalen an |
| Backup | Nicht vor Datenverlust geschützt | Auf Server mit Backups gespeichert |
Das Speichermodell von Git unterscheidet sich grundlegend von anderen Versionskontrollsystemen. Anstatt eine Liste von Änderungen (Deltas) zwischen Versionen zu speichern, bewahrt Git vollständige Snapshots aller Projektdateien zum Zeitpunkt jedes Commits auf.
Jedes Objekt im Repository wird durch einen eindeutigen SHA-1-Hash mit 40 Zeichen identifiziert. Wenn sich der Inhalt einer Datei zwischen Commits nicht geändert hat, erstellt Git kein neues Objekt, sondern verwendet das vorhandene wieder — das spart Platz.
Git verwendet vier Objekttypen: blob (Dateiinhalt), tree (Verzeichnisstruktur), commit (Snapshot mit Metadaten) und tag (benannte Referenz auf einen Commit). Alle Objekte werden im Ordner .git/objects gespeichert.
Laut Git Internals gewährleistet das Objektmodell von Git die Datenintegrität: Jede Änderung des Dateiinhalts erzeugt einen neuen Hash, sodass eine unbemerkte Änderung der Historie unmöglich ist.
Der .git-Ordner ist das Herz des Repositorys. Ohne ihn kann Git keine Änderungen verfolgen, und ein gewöhnliches Verzeichnis bleibt nur eine Sammlung von Dateien. Das Verständnis der Struktur dieses Ordners hilft bei der Diagnose von Repository-Problemen.
Die HEAD-Datei verdient besondere Aufmerksamkeit. Im Normalzustand enthält sie einen symbolischen Verweis auf einen Branch, z. B. ref: refs/heads/main. Im Detached-HEAD-Zustand verweist sie direkt auf einen Commit — das bedeutet, dass neue Commits an keinen Branch gebunden werden.
Die Arbeit mit einem Git-Repository umfasst eine Reihe grundlegender Operationen, die der Entwickler täglich durchführt. Jede Operation ändert den Zustand des Repositorys, indem sie neue Objekte hinzufügt oder Referenzen verschiebt.
Die Operationen push und pull sind die einzigen, die eine Verbindung zum Remote-Server erfordern. Alle anderen Operationen werden vollständig lokal ausgeführt, was auch bei großem Historievolumen eine hohe Geschwindigkeit gewährleistet.
Jede Datei im Repository durchläuft vier Zustände: untracked (nicht verfolgt), modified (geändert), staged (vorbereitet) und committed (festgeschrieben). Git verfolgt nur Dateien, die explizit über git add hinzugefügt wurden oder sich bereits in der Commit-Historie befinden.
Das Verständnis dieses Modells ist der Schlüssel zur effektiven Arbeit mit Git. Der Entwickler kann selektiv nur einen Teil der geänderten Dateien für den Commit vorbereiten und logisch abgeschlossene Commits mit klarer Beschreibung erstellen.
Entfernte Repositories werden in der Regel auf spezialisierten Plattformen gehostet, die eine Weboberfläche, ein Zugriffsverwaltungssystem und zusätzliche Tools für die gemeinsame Entwicklung bereitstellen.
Die Wahl der Plattform hängt von der Teamgröße, den Datenschutzanforderungen und den erforderlichen Integrationen ab. Für die mobile Entwicklung wird aufgrund der breiten Community-Unterstützung und der Integration mit CI/CD-Tools für iOS und Android häufig GitHub gewählt.
Betrachten wir ein praktisches Szenario: Ein Entwickler klont ein vorhandenes Repository, erstellt einen neuen Branch, nimmt Änderungen vor und sendet sie an den Server. Jeder Befehl demonstriert die Arbeit mit verschiedenen Repository-Komponenten.
# Entferntes Repository klonen
git clone https://github.com/user/mobile-app.git
# In das Projektverzeichnis wechseln
cd mobile-app
# Neuen Feature-Branch erstellen und zu ihm wechseln
git checkout -b feature/auth
# Status der geänderten Dateien überprüfen
git status
# Alle Änderungen zur Staging-Area hinzufügen
git add .
# Commit mit Beschreibung erstellen
git commit -m "Add authentication module"
# Änderungen an das entfernte Repository senden
git push origin feature/auth
Der Befehl git status ist einer der nützlichsten im täglichen Gebrauch. Er zeigt, welche Dateien geändert wurden, welche für den Commit vorgemerkt sind und welche von Git gar nicht verfolgt werden.
Zur Analyse der Repository-Historie wird der Befehl git log mit verschiedenen Formatierungsflags verwendet. Er zeigt die Chronologie der Commits, ihre Autoren, Daten und SHA-1-Identifikatoren an.
# Historie mit Visualisierung des Branch-Graphen anzeigen
git log --oneline --graph --all
# Änderungen in einem bestimmten Commit anzeigen
git show a1b2c3d
# Aktuellen Zustand mit dem letzten Commit vergleichen
git diff HEAD
# Historie einer bestimmten Datei anzeigen
git log --follow src/MainActivity.kt
Das Flag --graph zeigt einen ASCII-Graphen der Verzweigungen an, was besonders in Repositories mit aktiver Arbeit in mehreren Branches nützlich ist. Für mobile Projekte mit häufigen Releases hilft ein visueller Graph, die Entwicklungsstruktur schnell zu bewerten.
Häufig gestellte Fragen
Ein Repository ist ein technischer Codespeicher mit Änderungshistorie. Ein Projekt ist ein breiterer Begriff, der das Repository, das Aufgabenverwaltungssystem, die Dokumentation und die Entwicklungsprozesse umfasst. Ein Projekt kann mehrere Repositories enthalten.
Erstellen Sie ein neues Repository über die GitHub-Weboberfläche, indem Sie auf die Schaltfläche New klicken. Geben Sie einen Namen, eine Beschreibung und die Zugriffsebene an. Klonen Sie dann das Repository auf Ihren lokalen Rechner oder verknüpfen Sie es über git remote add origin mit einem vorhandenen lokalen Repository.
Wenn ein entferntes Repository vom Server gelöscht wurde, aber mindestens ein Entwickler eine lokale Kopie besitzt, kann das Repository wiederhergestellt werden. Erstellen Sie einfach ein neues entferntes Repository und führen Sie git push --force von der lokalen Kopie mit der gesamten Historie aus.
Ein Fork ist eine Kopie eines fremden Repositorys auf Ihrem Konto. Sie erhalten eine vollständige Kopie der Historie und können beliebige Änderungen vornehmen, ohne das Original zu beeinflussen. Forks werden verwendet, um über Pull Requests an Open-Source-Projekten teilzunehmen.
Verwenden Sie git gc zum Komprimieren von Objekten und Entfernen unerreichbarer Daten. Entfernen Sie große Dateien aus der Historie mit git filter-branch oder git filter-repo. Für Projekte mit Binärdateien erwägen Sie Git LFS (Large File Storage).
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch