Outils pour utilisateurs

Outils du site


dev:git:gerer-zone-index

Gestion de la zone d'index git

Un commit est un instantané de la zone d'index ou zone d'assemblage (staging area). La zone d'index est hors du répertoire de travail. Seuls les fichiers et dossiers présents dans la zone d'index seront enregistrés en l’état lors du commit.

Worflow:

  1. Modifier les fichiers dans le répertoire de travail
  2. Placer dans l'index les fichiers/dossiers à historiser
  3. Faire le commit

Pour illustrer les commandes, un dépôt avec le contenu suivant est créé:

/tmp/hello-git.git/
├── readme.txt
└── src
    ├── A.c
    ├── B.c
    └── C.c

État de la zone d'index

La commande git status permet de voir le contenu de la zone d'index, l'option -s résume le statut de chaque fichier:

$ git status -s
?? readme.txt
?? src/

Les points d'interrogations indique que le répertoire ./src et le fichier ./readme.txt ne sont pas suivis par git pour le moment.

Ajouter à l'index

L'index ou staging area est un espace d'assemblage permettant de préparer le commit. On sélectionne le travail que l'on souhaite historiser.

Ajouter un dossier

Ajouter un dossier dans l'index implique l'ajout de tout son contenu:

# Ajoute le dossier src à l'index
git add src/
 
# Le listing du contenu de l'index
# retourne le dossier et tout son contenu
git st
A  src/A.c
A  src/B.c
A  src/C.c
?? readme.tx

Ici, le 'A' en préfixe indique que les fichiers contenus dans src sont ajoutés à l'index.

Mettre à jour les fichiers suivis

Pour n'ajouter à l'index que les fichiers déjà suivis et modifiés dans l'espace de travail:

$ git add -u

Ajouter à l'index les fichiers non suivis et les fichiers modifiés:

$ git add .
$ git st
A  readme.txt
A  src/A.c
A  src/B.c
A  src/C.c

N'ajouter qu'une partie d'un fichier

Lorsque des modifications sont apportées à plusieurs endroits dans un même fichier, on peut vouloir pousser dans l'index qu'une partie d' entre elles mais pas toutes.

C'est ce que permet de faire l'option -p ou --patch de la commande git add:

# Plusieurs modifications ont été apportées en même temps
# au fichiers "config.py". On ne va sélectionner qu'une
# sous partie pour le prochain commit
 
git add --patch fairymaps/config.py

La commande bascule en mode interactif, pour chaque section modifiée git demande à l'utilisateur ce qu'il souhaite faire (saisir '?' pour afficher l'aide) :

(1/1) Indexer cette section [y,n,q,a,d,s,e,?] ?
y - indexer cette section
n - ne pas indexer cette section
q - quitter ; ne pas indexer cette section ni les autres restantes
a - indexer cette section et toutes les suivantes de ce fichier
d - ne pas indexer cette section ni les suivantes de ce fichier
s - découper la section en sections plus petites
e - éditer manuellement la section actuelle
? - afficher l'aide

Via le mode interactif, l'utilisateur peut choisir les sections qu'il souhaite intégrer à la zone d'assemblage ou redécouper les sections disponibles pour choisir finement quelles modifications apportées dans le fichier seront sauvegardées par le prochain commit.

Ignorer des fichiers

Les fichiers .gitignore permettent de définir des patterns d'exclusion. Lors des appels à la commande git add, le fichier .gitignore est évalué et les fichiers correspondants aux patterns présents ne sont pas ajoutés à l'index. On peut néanmoins forcer l'ajout à l'index avec l'argument -f

$ git add -f ./build/A.o

Il peut y avoir de multiples fichiers .gitignore dans répertoire du projet. Pour tester si un fichier est bien exclus:

$ git check-ignore -v build/B.o
.gitignore:2:*.o        build/B.o

Dans cet exemple la commande retourne que le fichier “B.o” est ignoré par la règle de la ligne 2.

Retirer des fichier de l'index

La commande git reset permet de retirer un fichier de la zone d'index:

$ git reset dossier/fichier
La commande git reset sans argument ne comporte aucun danger de perte de données. Elle retire le fichier de la zone d'index mais celui-ci reste présent dans la zone de travail.

Pour supprimer un fichier on peut également utiliser git rm

git rm --cached dossier/fichier
Attention a bien utiliser l'option --cached pour ne supprimer que le fichier de la zone d'index. Sans cette option le fichier et les modifications apportées sont supprimés de l'index et de l'espace de travail.

Retirer tous les fichiers de l'index

Pour retirer tous les fichiers présents dans la zone d'index en conservant le répertoire de travail:

# équivalent pleinement qualifié du comportement par défaut
$ git reset --mixed
 
# comportement par défaut retirant tous les fichiers/dossiers de la staging area
$ git reset

Restaurer un fichier

Pour annuler les modifications faites sur un fichier du répertoire de travail et le restaurer tel qu'il était lors du dernier commit

$ git checkout -- fichier
dev/git/gerer-zone-index.txt · Dernière modification : 2024/11/19 14:56 de yoann