Git --local-branching-on-the-cheap
Chapters ▾ 2nd Edition

10.1 Les tripes de Git - Plomberie et porcelaine

Vous êtes peut-être arrivé à ce chapitre en en sautant certains autres ou après avoir parcouru tout le reste du livre. Dans tous les cas, c’est ici que le fonctionnement interne et la mise en œuvre de Git sont abordés. Pour nous, leur apprentissage a été fondamental pour comprendre à quel point Git est utile et puissant, mais d’autres soutiennent que cela peut être source de confusion et peut être trop complexe pour les débutants. Nous en avons donc fait le dernier chapitre de ce livre pour que vous puissiez le lire tôt ou tard lors de votre apprentissage. Nous vous laissons le choix.

Maintenant que vous êtes ici, commençons. Tout d’abord, si ce n’est pas encore clair, Git est fondamentalement un système de fichiers adressable par contenu avec l’interface utilisateur d’un VCS au-dessus. Vous en apprendrez plus sur ce que cela signifie dans quelques instants.

Aux premiers jours de Git (surtout avant la version 1.5), l’interface utilisateur était beaucoup plus complexe, car elle était centrée sur le système de fichiers plutôt que sur l’aspect VCS. Ces dernières années, l’interface utilisateur a été peaufinée jusqu’à devenir aussi cohérente et facile à utiliser que n’importe quel autre système. Pour beaucoup, l’image du Git des débuts avec son interface utilisateur complexe et difficile à apprendre est toujours présente.

La couche système de fichiers adressable par contenu est vraiment géniale et nous l’aborderons dans ce chapitre. Ensuite, vous apprendrez les mécanismes de transfert ainsi que les tâches que vous serez amené à accomplir pour maintenir un dépôt.

Plomberie et porcelaine

Ce livre couvre l’utilisation de Git avec une trentaine de verbes comme checkout, branch, remote… Mais, puisque Git était initialement une boîte à outils (toolkit) pour VCS, plutôt qu’un VCS complet et convivial, il dispose de tout un ensemble d’actions pour les tâches bas niveau qui étaient conçues pour être liées dans le style UNIX ou appelées depuis des scripts. Ces commandes sont dites commandes de « plomberie » (plumbing) et les autres, plus conviviales sont appelées « la porcelaine » (porcelain).

Les neuf premiers chapitres du livre concernent presque exclusivement les commandes de porcelaine. Par contre, dans ce chapitre, vous serez principalement confronté aux commandes de plomberie bas niveau, car elles vous donnent accès au fonctionnement interne de Git et aident à montrer comment et pourquoi Git fonctionne comme il le fait. Beaucoup de ces commandes ne sont pas faites pour être utilisées à la main sur une ligne de commande, mais sont plutôt utilisées comme briques de base pour écrire de nouveaux outils et scripts personnalisés.

Quand vous exécutez git init dans un nouveau répertoire ou un répertoire existant, Git crée un répertoire .git qui contient presque tout ce que Git stocke et manipule. Si vous voulez sauvegarder ou cloner votre dépôt, copier ce seul répertoire suffirait presque. Ce chapitre traite principalement de ce que contient ce répertoire. Voici à quoi il ressemble :

$ ls -F1
HEAD
config*
description
hooks/
info/
objects/
refs/

Vous y verrez sans doute d’autres fichiers, mais ceci est un dépôt qui vient d’être créé avec git init et c’est ce que vous verrez par défaut. Le fichier description est utilisé uniquement par le programme GitWeb, il ne faut donc pas s’en soucier. Le fichier config contient les options de configuration spécifiques à votre projet et le répertoire info contient un fichier d’exclusions listant les motifs que vous souhaitez ignorer et que vous ne voulez pas mettre dans un fichier .gitignore. Le répertoire hooks contient les scripts de procédures automatiques côté client ou serveur, ils sont décrits en détail dans Crochets Git.

Il reste quatre éléments importants : les fichiers HEAD et (pas encore créé) index, ainsi que les répertoires objects et refs. Ce sont les composants principaux d’un dépôt Git. Le répertoire objects stocke le contenu de votre base de données, le répertoire refs stocke les pointeurs vers les objets commit de ces données (branches), le fichier HEAD pointe sur la branche qui est en cours dans votre répertoire de travail et le fichier index est l’endroit où Git stocke les informations sur la zone d’attente. Vous allez maintenant plonger en détail dans chacune de ces sections et voir comment Git fonctionne.