Avancé · 7 min de lecture
Comment Git fonctionne à l'intérieur
Blobs, trees, commits et refs : une fois que tu les vois, plus rien n'est magique dans Git.
Quatre types d'objets
Un blob est le contenu d'un fichier. Un tree est un dossier (noms → blobs et trees). Un commit pointe vers un tree, son ou ses parents, un auteur et un message. Un tag pointe vers un commit. Chacun est identifié par le hash de son contenu.
$ git cat-file -p HEAD$ git cat-file -p HEAD^{tree}
Les branches ne sont que des fichiers
Une branche est un petit fichier contenant un hash de commit. HEAD indique sur quelle branche tu es. C'est pour ça que créer une branche est instantané.
$ cat .git/HEAD$ git rev-parse main
Pourquoi presque rien n'est perdu
Les objets ne sont jamais modifiés, seulement ajoutés. Un reset ou une branche supprimée ne fait que déplacer ou retirer un nom ; les objets restent jusqu'au garbage collection, et le reflog se souvient d'où étaient les noms.
$ git reflog$ git fsck --unreachable