À propos de Git
git est un logiciel de gestion de versions décentralisé. C’est un logiciel libre créé par Linus Torvalds, auteur du noyau Linux, et distribué selon les termes de la licence publique générale GNU version 2. En 2016, il s’agit du logiciel de gestion de versions le plus populaire qui est utilisé par plus de douze millions de personnes4
Git possède deux structures de données : une base d’objets et un cache de répertoires. Il existe quatre types d’objets :
- l’objet blob, qui représente le contenu d’un fichier (l’origine de cette dénomination est probablement à chercher dans les binary large objects des bases de données) ;
- l’objet tree (mot anglais signifiant « arbre »), qui est une liste d’objets de type blobs et des informations associées à chaque blob, tel que le nom du fichier et les permissions. Cet objet décrit l’arborescence des sources à un instant donné ;
- l’objet commit, résultant de l’opération du même nom (mot anglais signifiant « valider une transaction »8) et qui donne accès à l’historique d’une arborescence de source. Il contient un message de log, un objet arbre et pointe vers un ou plusieurs objets commit parents ;
- l’objet tag (étiquette) qui est une manière de représenter un commit spécifique. Il est en général utilisé pour marquer certains commits, par exemple par un numéro ou un nom de version (2.1 ou bien Lucid Lynx).
La base des objets peut contenir n’importe quel type d’objets. Une couche intermédiaire, utilisant des index (les sommes de contrôle), établit un lien entre les objets de la base et l’arborescence des fichiers.
Chaque objet est identifié par une somme de contrôle SHA-1 de son contenu. Git calcule la somme de contrôle et utilise cette valeur pour déterminer le nom de fichier de l’objet. L’objet est placé dans un répertoire dont le nom correspond aux deux premières lettres de la somme de contrôle. Le reste de la somme de contrôle constitue alors le nom du fichier pour cet objet.
Git enregistre chaque révision dans un fichier en tant qu’objet blob unique. Les relations entre les objets blobs sont déterminées en examinant les objets commit. En général, les objets blobs sont stockés dans leur intégralité en utilisant la compression de la zlib. Ce principe peut rapidement consommer une grande quantité de place disque ; de ce fait, les objets peuvent être combinés dans des archives, qui utilisent la compression différentielle (c’est-à-dire que les blobs sont enregistrés sous la forme de différences par rapport aux autres blobs).