Wie strukturiert Git den Inhalt des Repository?
Dieses Tutorial behandelt die folgenden Themen:
Ein .git Verzeichnis hat eine ähnliche Struktur wie die folgende:
Objekte/Ordner
In diesem Verzeichnis werden die Daten Ihrer Git-Objekte gespeichert- der gesamte Inhalt der Dateien, die Sie jemals eingecheckt haben, Ihre Commits, Bäume und Tag-Objekte
- Objekte/[0-9a-f] [0-9a-f] Ordner
Ein neu erstelltes Objekt wird in einer eigenen Datei gespeichert. Die Objekte werden über 256 Unterverzeichnisse platziert, wobei die ersten beiden Zeichen des SHA1 Objektnamens verwendet werden, um die Anzahl der Verzeichniseinträge in den Objekten selbst auf einer überschaubaren Zahl zu halten. Objekte, die hier gefunden werden, werden oft als unverpackte oder lose Objekte bezeichnet.
- Objekte/Packordner
Dateien, die viele Objekte in komprimierter Form speichern, zusammen mit Indexdateien, die einen zufälligen Zugriff auf sie ermöglichen, befinden sich in diesem Verzeichnis.
- Objekte/Info-Ordner
Zusätzliche Informationen über das gespeicherte Objekt werden in diesem Verzeichnis abgelegt.
Referenzordner
Referenzen werden in Unterverzeichnissen dieses Verzeichnisses gespeichert. Der Befehl git prune bewahrt Objekte, die von refs in diesem Verzeichnis und dessen Unterverzeichnissen erreichbar sind.
- refs/heads/Ordner
Enthält Commit-Objekte.
- refs/tags/Ordner
Enthält einen beliebigen Objektnamen.
- refs/remotes/Ordner
Enthält Commit-Objekte von Verzweigungen, die aus einem entfernten Repository kopiert wurden.
gepackte Referenzdatei
Die Datei besteht aus gepackten Köpfen und Tags. Es ist nützlich für einen effizienten Zugriff auf das Repository.
HEAD-Datei
Diese Datei enthält einen Verweis auf den Zweig, in dem Sie sich gerade befinden. Dies teilt Git mit, was als übergeordnetes Element des nächsten Commits verwendet werden soll.
Konfigurationsdatei
Dies ist die Haupt-Git-Konfigurationsdatei. Es hält spezifische Git-Optionen für Ihr Projekt, wie Ihre Fernbedienungen, Push-Konfigurationen, Tracking-Zweige und mehr. Ihre Konfiguration wird zuerst aus dieser Datei geladen, dann aus einer ~/.gitconfig Datei und dann aus einer /etc/gitconfig Datei, falls vorhanden.
Zweige
Eine veraltete Methode zum Speichern von Kurzschreibweisen, mit denen eine URL für git fetch , git pull und git push angegeben werden kann. Dieser Mechanismus ist ein Vermächtnis und wird in modernen Repositories kaum zu finden sein.
Hooks-Ordner
Dieses Verzeichnis enthält Shell-Skripte, die nach den entsprechenden Git-Befehlen aufgerufen werden. Nachdem Sie beispielsweise ein Commit ausgeführt haben, wird Git versuchen, das Post-Commit-Skript auszuführen.
Indexdatei
Der GIT-Index wird als Bereitstellungsbereich zwischen Ihrem Arbeitsverzeichnis und Ihrem Repository verwendet. Sie können den Index verwenden, um eine Reihe von Änderungen aufzubauen, die Sie zusammen übernehmen möchten. Wenn Sie ein Commit erstellen, wird als Commit angegeben, was gerade im Index steht, und nicht, was sich in Ihrem Arbeitsverzeichnis befindet. Es ist eine binäre Datei, die eine sortierte Liste von Pfadnamen enthält, jede mit Berechtigungen und dem SHA-1 eines blob Objekts.
Info-Ordner
Zusätzliche Informationen über das Repository werden in diesem Verzeichnis aufgezeichnet.
Fernbedienungsordner
Dieser Ordner enthält Abkürzungen für URLs und Standard-Refnames, die bei der Interaktion mit entfernten Repositories über die Befehle git fetch , git pull und git push verwendet werden. Dieser Mechanismus ist ein Vermächtnis und wird in modernen Repositories kaum zu finden sein.
Protokollordner
Speichert die an refs vorgenommenen Änderungen im Repository.
- Ordner logs/refs/heads/
Zeichnet alle Änderungen auf, die an den verschiedenen Verzweigungsspitzen vorgenommen wurden
- Ordner logs/refs/tags/
Zeichnet alle an den verschiedenen Tags vorgenommenen Änderungen auf.
Modulordner
Enthält die Git-Repositories der Submodule.
Ordner für Arbeitsbäume
Enthält Verwaltungsdaten für verknüpfte Arbeitsbäume. Jedes Unterverzeichnis enthält den Arbeitsbaum-bezogenen Teil eines verknüpften Arbeitsbaums.