Vier Objekttypen
Git speichert alles als content-addressable Objekte unter .git/objects. Es gibt vier Typen: blob (Dateiinhalte), tree (Verzeichniseintrage von Blobs und Subtrees), commit (Snapshot-Zeiger mit Autor, Committer, Message und Eltern) und tag (annotierter Tag).
Inspektion
git cat-file -t <sha>
git cat-file -p <sha>
git cat-file -s <sha>
git ls-tree HEAD
git rev-parse HEAD^{tree}
Loose vs packed
Neu erstellte Objekte starten als loose: eine zlib-komprimierte Datei pro Objekt.
Hashing
echo "hello" | git hash-object --stdin
git hash-object -w README.md
Trees kodieren Berechtigungen
Modi: 040000 (Verzeichnis), 100644 (regular), 100755 (ausfuhrbar), 120000 (Symlink), 160000 (Gitlink/Submodul).
Historie durchwandern
git log --raw
git log --pretty=raw
git rev-list --objects HEAD
Erreichbarkeit und Pruning
git fsck --unreachable
git gc --prune=now
SHA-256-Ubergang
Modernes Git unterstutzt SHA-256-Repositories (git init --object-format=sha256).
Haufige Fehler
Dateien unter .git/objects direkt bearbeiten. Nicht tun.