-
1. Los geht's
- 1.1 Wozu Versionskontrolle?
- 1.2 Die Geschichte von Git
- 1.3 Git Grundlagen
- 1.4 Git installieren
- 1.5 Git konfigurieren
- 1.6 Hilfe finden
- 1.7 Zusammenfassung
-
2. Git Grundlagen
-
3. Git Branching
- 3.1 Was ist ein Branch?
- 3.2 Einfaches Branching und Merging
- 3.3 Branch Management
- 3.4 Branching Workflows
- 3.5 Externe Branches
- 3.6 Rebasing
- 3.7 Zusammenfassung
-
4. Git auf dem Server
- 4.1 Die Protokolle
- 4.2 Git auf einen Server bekommen
- 4.3 Generiere deinen öffentlichen SSH-Schlüssel
- 4.4 Einrichten des Servers
- 4.5 Öffentlicher Zugang
- 4.6 GitWeb
- 4.7 Gitosis
- 4.8 Gitolite
- 4.9 Git Daemon
- 4.10 Git Hosting
- 4.11 Einrichten eines Benutzeraccounts
- 4.12 Zusammenfassung
-
5. Distribuierte Arbeit mit Git (xxx)
-
6. Git Tools
- 6.1 Revision Auswahl
- 6.2 Interaktives Stagen
- 6.3 Stashen
- 6.4 Änderungshistorie verändern
- 6.5 Mit Hilfe von Git debuggen
- 6.6 Submodule
- 6.7 Subtree Merging
- 6.8 Zusammenfassung
-
7. Git individuell einrichten
-
8. Git und andere Versionsverwaltungen
- 8.1 Git und Subversion
- 8.2 Zu Git umziehen
- 8.3 Zusammenfassung
-
9. Git Internas
- 9.1 Plumbing und Porcelain
- 9.2 Git Objekte
- 9.3 Git Referenzen
- 9.4 Pack-Dateien
- 9.5 Die Refspec
- 9.6 Transfer Protokolle
- 9.7 Wartung und Datenwiederherstellung
- 9.8 Zusammenfassung
9.1 Git Internas - Plumbing und Porcelain
Plumbing und Porcelain
In diesem Buch haben wir Git besprochen, indem wir vielleicht 30 Befehle wie checkout, branch, remote und so weiter verwendet haben. Weil Git aber ursprünglich als ein Werkzeugkasten konzipiert war, un nicht so sehr als ein komplettes, anwenderfreundliches VCS, gibt es auch eine Reihe von Befehlen, die ihre Arbeit auf einer sehr viel grundlegenderen Ebene verrichten. Viele davon sind ursprünglich entwickelt worden, um als UNIX Befehle miteinander verkettet zu werden oder aus Scripten heraus aufgerufen zu werden. Diese Befehle werden oft als "plumbing" (xxx) Befehle zusammengefaßt, während die eher anwenderfreundlichen Befehle "porcelain" (d.h. Porzellan) genannt werden.
Die ersten acht Kapitel dieses Buches haben sich fast ausschließlich mit "porcelain" Befehlen befaßt. In diesem Kapitel gehen wir dagegen auf die zugrundeliegenden "plumbing" Befehle ein, u.a. weil sie dir den Zugriff auf Git's innere Abläufe ermöglichen, und weil sie dabei helfen, zu verstehen, warum Git tut, was es tut. Diese Befehle sind nicht unbedingt dazu bestimmt direkt (xxx on the command line xxx) ausgeführt zu werden, sondern sind als Bausteine für Werkzeuge und Scripts gemeint.
Wenn du git init in einem neuen oder bereits bestehenden Verzeichnis ausführst, erzeugt Git das .git Verzeichnis, das fast alle Dateien enthält, die Git intern speichert und ändert. Wenn du eine Sicherheitskopie deines Repositories anlegen oder es duplizieren willst, dann reicht aus, dieses Verzeichnis zu kopieren. Dieses ganze Kapitel handelt praktisch nur von den Inhalten dieses Verzeichnisses - die so aussehen:
$ ls
HEAD
branches/
config
description
hooks/
index
info/
objects/
refs/
Möglicherweise findest du darin weitere Dateien. Obiges stammt aus einem mit git init neuangelegten Repository - das sind also die Standardinhalte. Der Ordner branches wird von neueren Git Versionen nicht mehr verwendet, und die Datei descriptions wird nur vom Programm GitWeb benötigt. Du kannst sie also ignorieren. Die Datei config enthält deine Projekt-spezifischen Konfigurationsoptionen, und im Ordner info befindet sich eine Datei, die globale Dateiausschlußpatterns (xxx) enthält, die du nicht in jeder .gitignore Datei neu spezifizieren willst. Das hooks Verzeichnis enthält die client- oder serverseitigen Hook Scripte, die wir in Kapitel 7 besprochen haben.
Damit bleiben vier wichtige Einträge übrig: die Dateien HEAD und index und die Verzeichnisse objects und refs. Dies sind die Kernkomponenten eines Git Repositories: Im objects Verzeichnis befinden sich die Inhalte der Datenbank. Das refs Verzeichnis enthält Referenzen auf Commit Objekte (Branches) in dieser Datenbank. Die Datei HEAD zeigt auf denjeningen Branch, den du gegenwärtig ausgecheckt hast, und in der Datei index verwaltet Git die Informationen der Staging Area. Wir werden auf diese Elemente jetzt im einzelnen darauf eingehen, so daß du nachvollziehen kannst, wie Git intern arbeitet.