git ready

Apprendre git, un commit à la fois
Par Nick Quaranto. Traduction par Edouard Swiac

la zone de transit

committed 18 Jan 2009

Un des concepts les plus essentiels est celui de la zone de transit (staging area).
Son utilisation peut fondamentallement changer votre manière de travailler, en mieux bien sûr ! Examinons ensemble exctement comment cela fonctionne et ce que vous deveez savoir pour l’utiliser.

Avec la plupart des autres systèmes de contrôle, il y a deux endroits pour stocker vos données : votre copie courante (les répertoires/fichiers que vous utilier ) et l’entrepôt de données (où le système de gestion de version décide de la manière d’empaqueter et de stocker les données). Dans Git, il y a une troisième option: la zone de transit (ou l’index). C’est simplement une aire de chargement où l’on décide quels changement vont effectivement être envoyés.

Comme le répertoire courant et ce qui est sauvegardé par Git sont fondamentalement découplés, cela permet au développeur de construire ses ajouts (commit) de la manière qu’il veut veut, et non par celle imposée par le SGV.
Cette couche, située juste avant le moment où Git sauvegarde véritablement les données, permet une plus grande flexibilité et un plus grand contrôle.

L’index est simple d’utilisation grâce aux commandes git add et git commit. On ajoute des fichier à l’index, une fois qu’on est satisfait de son contenu, on les ajoute au dépôt (commit) :

Dans le dépôt, vous pouvez utiliser push pour stocker ces modifications dans un dépôt distant, merge pour les fusionner avec une autre branche, et bien plus. Il est possible d’effectuer des opérations spécifiques à cette zone de transit, comme par exemple stasher de manière temporaire ses changements.

Parcourons ensemble un exemple simple d’utilisation de la zone de transit. Après quelques changements :

$ git status
  On branch master
  Changed but not updated:
    (use "git add <file>..." to update what will be committed)
 
      modified:   README.md
      modified:   about.html
 
  Untracked files:
    (use "git add <file>..." to include in what will be committed)
 
      help.txt
  no changes added to commit (use "git add" and/or "git commit -a")

Dans cet exemple, 2 fichiers sont reconnus par Git, et un reste inconnu: help.txt. La commande git add . ajoute tous les changementsou tous les nouveaux fichiers qui n’ont pas encore été référencés. La commande add n’enregistre pas encore les données, elle ne fait que les placer sur une zone de chargement, prêtes à être chargées par le prochain git commit.

$ git add .
$ git status
  On branch master
  Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)
 
      modified:   README.md
      modified:   about.html
      new file:   help.txt

Comme vous l’indique le prompt, vous pouvez utiliser git reset HEAD <file> pour retourner à l’état précédent. Ainsi, vous pouvez ajouter exactement ce que vous voulez. Vous pouvez également ajouter certaines lignes de fichier. Si vous vous demandez commment revenir à l’état antérieur d’un fichier, voici une astuce complète. De la, un git commit enregistrera tous les fichiers dans le système de stockage de Git, vous êtes prêt !

$ git commit -m "Adding stuff"
  Created commit e793200: Adding stuff
   2 files changed, 3 insertions(+), 0 deletions(-)
   create mode 100644 help.txt

Si vous voulez plus d’informations sur l’index, voici deux liens fantastiques :

  1. The Thing About Git
  2. Git Book – The Git Index

Si vous connaissez d’autres sources d’informations sur l’index, merci de les préciser dans les commentaires !