Explorateur d'objets
Git a la réputation d'être compliqué. Presque tout vient du fait qu'on ne voit jamais le modèle : quatre sortes d'objets, et des pointeurs. Dès que vous pouvez cliquer un commit, atterrir sur son arbre, et découvrir que votre fichier est un blob à qui un arbre a donné un nom, la porcelaine cesse d'être magique.
⌘K → Explorateur d'objets. Rien sur cette page ne peut changer un octet —
chaque appel derrière elle est une lecture.

Les quatre objets
| Objet | C'est | Il connaît |
|---|---|---|
| blob | Le contenu d'un fichier | Rien. Ni son nom, ni son chemin, ni son histoire |
| tree | Un listing de répertoire | Les noms, les modes, et le sha de chaque blob ou arbre enfant |
| commit | Un instantané | Son arbre, ses parents, l'auteur, le validateur, le message |
| tag | Une étiquette annotée | L'objet vers lequel elle pointe, l'étiqueteur, un message |
La surprise, pour la plupart des gens, c'est la première ligne. Un blob n'a pas de nom. Deux fichiers de contenu identique, n'importe où dans votre historique, sont le même blob, stocké une seule fois. Le nom vit dans l'arbre qui pointe vers lui — c'est pourquoi git suit du contenu plutôt que des fichiers, et pourquoi les renommages sont détectés plutôt qu'enregistrés.
Une référence — refs/heads/main, refs/tags/v1.0, HEAD — n'est qu'un
fichier contenant un sha. Voilà tout ce que veut dire « brancher ne coûte rien ».
Se promener
La colonne de gauche liste toutes les références du dépôt, groupées comme git les groupe. Cliquez-en une pour atterrir sur l'objet qu'elle nomme.
À partir de là, tout est un lien :
- Un commit montre son
treeet chaqueparent— cliquez pour aller vers l'instantané, ou vers l'arrière dans l'histoire, un commit à la fois. - Un arbre liste ses entrées avec mode, type, sha et taille. Cliquez un nom pour ouvrir cet enfant.
- Un blob montre son texte (le début, pour tout ce qui est volumineux), ou le dit franchement quand il est binaire.
- Une étiquette annotée montre ce vers quoi elle pointe — cliquez pour aller au commit.
Retour refait vos pas en sens inverse.
Taper une révision
Le champ accepte tout ce qu'accepte git rev-parse, et c'est là que l'outil
cesse d'être un navigateur pour devenir une façon d'apprendre :
| Tapez ceci | Pour obtenir |
|---|---|
HEAD |
Le commit courant |
HEAD~3 |
Trois commits en arrière |
HEAD^{tree} |
L'arbre de ce commit, pelé |
HEAD:src/app.ts |
Le blob de ce chemin, directement |
v1.0^{} |
Ce vers quoi pointe une étiquette annotée, plutôt que l'objet étiquette |
a1b2c3d |
N'importe quel objet, par son sha — les abréviations fonctionnent |
Les chiffres de mode dans un listing d'arbre valent la peine d'être connus :
100644 un fichier, 100755 un exécutable, 040000 un sous-arbre, 120000 un
lien symbolique, 160000 un gitlink de sous-module — ce dernier étant la
totalité de ce qu'un sous-module stocke.
Limites qu'il vaut mieux connaître
- En lecture seule, à dessein. Il n'y a rien ici pour écrire. Fabriquer des
objets à la main est un exercice de
git hash-object, et sa place est dans un terminal. - Les gros blobs sont tronqués après les 200 premiers Ko — assez pour voir de quoi il s'agit, pas assez pour figer la fenêtre.
- Les tailles sont la taille du contenu de l'objet telle que la rapporte
git cat-file -s, pas ce qu'il coûte sur le disque après empaquetage. Pour cela, voir la maintenance. - Les objets inatteignables restent des objets. Collez un sha issu d'un
rapport
git fscksur les objets pendants et il s'ouvre, ce qui est souvent la façon la plus rapide de voir ce que contenait un commit perdu avant de décider s'il faut le récupérer.
Voir aussi : Le graphe · Maintenance du dépôt · Récupération