Voici le cinquième volet de la formation Git. Dans mon précédent article, nous avons vu l’initialisation d’un dépôt Git, l’ajout d’un fichier à l’index de Git et sa validation sous forme de commit. Aujourd’hui nous allons nous pencher plus en détail sur ce que cela signifie.
Travailler avec Git
Rappelez-vous que lorsque vous initialisez un dépôt Git, les informations sont stockées dans un répertoire .git
à la racine du projet. Le répertoire où vous créez et éditez des fichiers, c’est le répertoire de travail (working directory).
Non, ne vous mettez pas à créer et éditer des fichiers à l’intérieur du répertoire .git
, c’est une très mauvaise idée. Continuez à considérer .git
et son contenu comme une boîte noire et évitez d’y toucher.
Le dépôt Git lui-même est divisé en deux parties :
- l’index (index)
- la base de données d’objets (object database)
Lorsque vous invoquez la commande git add
, Git effectue une copie du fichier dans votre répertoire de travail et range cette copie dans l’index. Cet index (ou zone d’indexation) est un endroit provisoire où nous pouvons placer tout un tas de choses jusqu’à ce que nous décidons de les valider ou non.
Maintenant, lorsque vous invoquez git commit
, Git va prendre en compte tout le contenu de la zone d’indexation et l’enregistrer dans la base de données d’objets, qui représente en quelque sorte la mémoire permanente de Git.
L’opération ressemble à ce que les chefs de cuisine appellent la mise en place. Dans un premier temps, vous découpez et tranchez toute une série d’ingrédients. Vous les préparez dans des bols ou des assiettes, pour sélectionner ensuite ce que vous allez mettre dans la poêle ou dans le four.
Un peu de pratique
Répertoire de travail ? Index ? Base de données d’objets ? Prenons un exemple concret pour montrer à quoi correspondent ces trois notions qui ont l’air un peu abstraites pour le moment.
Créez un répertoire formation-git/atelier-08
et initialisez un dépôt Git :
$ cd ~/formation-git/
$ mkdir atelier-08
$ cd atelier-08
$ git init
...
Initialized empty Git repository in /home/kikinovak/formation-git/atelier-08/.git/
Créez un fichier RECETTES.md
:
$ echo "# Mes recettes" > RECETTES.md
- Le fichier
RECETTES.md
se trouve dans votre répertoire de travail. - L’index de Git est vide.
- La base de données d’objets de Git est également vide.
Ajoutez le fichier à l’index de Git :
$ git add RECETTES.md
- Git a copié le fichier
RECETTES.md
du répertoire de travail vers l’index. - La base de données d’objets est toujours vide.
Effectuez un commit avec un message approprié :
$ git commit -m "Ajout d'un fichier RECETTES." [master (root-commit) 0eff38c] Ajout d'un fichier RECETTES. 1 file changed, 1 insertion(+) create mode 100644 RECETTES.md
- À présent, Git a enregistré le contenu de l’index dans la base de données d’objets.
Un fichier dans tous ses états
Nous avons vu à quoi ressemble le flux de travail avec Git :
- Vous éditez un ou plusieurs fichiers.
- Vous les ajoutez à l’index de Git.
- Une fois que c’est présentable, vous effectuez un commit.
À tout moment, Git surveille l’état de tous ces fichiers, en se posant les questions suivantes :
- Quels fichiers sont présents dans le répertoire de travail ?
- Quels fichiers ont été ajoutés à l’index ?
- Quels fichiers ont déjà été validés dans la base de données d’objets ?
Lorsque nous ajoutons un nouveau fichier à un dépôt, Git voit très bien que ce fichier existe mais ne fait rien jusqu’à ce que nous lui disions explicitement d’en tenir compte :
- Un fichier qui n’a pas encore été ajouté à l’index est considéré comme non suivi (untracked).
- À partir du moment où nous ajoutons un fichier à l’index, Git garde un œil sur ce que ce fichier devient. C’est donc dorénavant un fichier suivi (tracked).
Une fois qu’un fichier est suivi (tracked), il se trouve dans l’un de ces trois états :
- indexé (staged)
- inchangé (unmodified)
- modifié (modified)
Exercice
Voici une petite liste récapitulative des différents états dans lesquels un fichier peut se trouver par rapport à Git :
- non suivi (untracked)
- suivi (tracked)
- indexé (staged)
- inchangé (unmodified)
- modifié (modified)
Nous sommes toujours dans le répertoire formation-git/atelier-08
:
- Créez un nouveau fichier
Sauce-Bolognaise.md
. - Ajoutez
Sauce-Bolognaise.md
à l’index de Git (git add
). - Validez les changements (
git commit -m "Ajout d'une recette de sauce bolognaise."
). - Éditez
Sauce-Bolognaise.md
et enregistrez les modifications.
À chacune des étapes 1 à 4, quel est l’état du fichier Sauce-Bolognaise.md
par rapport à Git ? Non suivi ? Suivi ? Indexé ? Inchangé ? Modifié ? Notez que plusieurs réponses sont possibles pour certaines étapes.
Lire la suite : État des lieux
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
0 commentaire