Par Anonyme (non vérifié) , 29 avril 2026

Quatre types d'objets

Git stocke tout sous forme d'objets adressés par contenu sous .git/objects. Il y a quatre types : blob (contenu de fichier), tree (listing de répertoire de blobs et subtrees), commit (pointeur d'instantané avec auteur, committer, message et parents), et tag (tag annoté avec signataire et message). Chacun est nommé par le SHA-1 (ou SHA-256) de son contenu.

Inspection

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

Les objets nouvellement créés commencent loose : un fichier compressé zlib par objet sous .git/objects/xx/yyyy.... Le garbage collection combine ensuite plusieurs objets en un packfile.

Hachage

echo "hello" | git hash-object --stdin
git hash-object -w README.md

Les trees encodent les permissions

Une entrée tree est mode + nom + sha. Les modes sont 040000 (répertoire), 100644 (régulier), 100755 (exécutable), 120000 (symlink), 160000 (gitlink/submodule).

Parcourir l'historique

git log --raw
git log --pretty=raw
git rev-list --objects HEAD

Atteignabilité et élagage

git fsck --unreachable
git gc --prune=now

Transition SHA-256

Git moderne supporte les dépôts SHA-256 (git init --object-format=sha256).

Erreurs courantes

Éditer les fichiers sous .git/objects directement. Ne le faites pas. Utilisez les commandes plumbing comme git hash-object et git update-ref.