Les fichiers dans tous leurs états
À ce stade, 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. Dans cet atelier pratique, 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).
Ne rangez rien dans .git
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.
La mise en place
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 ../formation-git/atelier-08/.git/
Créez un fichier RECETTES.md :
-
Le fichier
RECETTES.mdse 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 a copié le fichier
RECETTES.mddu 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)
À vous de jouer
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.mdet 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.
| Untracked | Tracked | Staged | Unmodified | Modified | |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 |

