Chapters ā–¾ 2nd Edition

7.2 Utilitaires Git - Indexation interactive

Indexation interactive

Git propose quelques scripts qui rendent les opĆ©rations en ligne de commande plus simples. Nous allons Ć  prĆ©sent dĆ©couvrir des commandes interactives vous permettant de choisir les fichiers ou les parties d’un fichier Ć  incorporer Ć  un commit. Ces outils sont particuliĆØrement pratiques si vous modifiez un grand nombre de fichiers et que vous souhaitez valider ces changements en modifications plus atomiques plutĆ“t que d’un tenant. De la sorte, vous vous assurez que vos commits sont des ensembles cohĆ©rents de modifications et qu’ils peuvent ĆŖtre facilement revus par vos collaborateurs.

Si vous exĆ©cutez git add avec l’option -i ou --interactive, Git entre en mode interactif et affiche quelque chose commeĀ :

$ git add -i
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now>

Vous vous apercevrez que cette commande propose une vue bien diffĆ©rente de votre indexĀ ; en gros, c’est la mĆŖme information que vous auriez obtenue avec git status mais en plus succinct et plus instructif. Cela liste les modifications que vous avez indexĆ©es Ć  gauche et celles hors index Ć  droite.

En dessous vient la section des commandes (Commands). Vous aurez accĆØs Ć  un certain nombre d’actions, notamment indexer des fichiers, les enlever de l’index, indexer des parties de fichiers, ajouter des fichiers non indexĆ©s, et vĆ©rifier les diffĆ©rences de ce que vous avez indexĆ©.

Indexation et dƩsindexation des fichiers

Si vous tapez 2 ou u au prompt What now>, le script vous demande quels fichiers vous voulez indexerĀ :

What now> 2
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

Pour indexer les fichiers TODO et index.html, vous pouvez taper ces nombresĀ :

Update>> 1,2
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

Le caractĆØre * au dĆ©but de la ligne de chaque fichier indique que celui-ci est sĆ©lectionnĆ©. Si vous tapez EntrĆ©e sur l’invite Update>>, Git prend tout ce qui est sĆ©lectionnĆ© et l’indexe pour vousĀ :

Update>>
updated 2 paths

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now> 1
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

ƀ prĆ©sent, vous pouvez voir que les fichiers TODO et index.html sont indexĆ©s (staged en anglais) et que simplegit.rb ne l’est toujours pas. Si vous souhaitez enlever de l’index le fichier TODO, utilisez 3 (ou r pour revert en anglais)Ā :

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now> 3
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> 1
           staged     unstaged path
* 1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path

Un aperƧu rapide Ć  votre statut Git et vous pouvez voir que vous avez enlevĆ© le fichier TODO de l’indexĀ :

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now> 1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

Pour voir la modification que vous avez indexĆ©e, utilisez 6 ou d (pour diffĆ©rence). Cela vous affiche la liste des fichiers indexĆ©s et vous pouvez choisir ceux pour lesquels vous voulez consulter la diffĆ©rence. C’est Ć©quivalent Ć  git diff --cached en ligne de commandeĀ :

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now> 6
           staged     unstaged path
  1:        +1/-1      nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder

 <p id="out">...</p>

-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>

 <script type="text/javascript">

Avec ces commandes Ć©lĆ©mentaires, vous pouvez utiliser l’ajout interactif pour manipuler votre index un peu plus facilement.

Indexations partielles

Git est Ć©galement capable d’indexer certaines parties d’un fichier. Par exemple, si vous modifiez en deux endroits votre fichier simplegit.rb et que vous souhaitez indexer une modification seulement, cela peut se faire trĆØs aisĆ©ment avec Git. En mode interactif, tapez 5 ou p (pour patch en anglais). Git vous demandera quels fichiers vous voulez indexer partiellement, puis, pour chacun des fichiers sĆ©lectionnĆ©s, il affichera les parties du fichier où il y a des diffĆ©rences et vous demandera si vous souhaitez les indexer, une par uneĀ :

diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
   end

   def log(treeish = 'master')
-    command("git log -n 25 #{treeish}")
+    command("git log -n 30 #{treeish}")
   end

   def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?

ƀ cette Ć©tape, vous disposez de bon nombre d’options. ? vous liste les actions possibles dont voici une traductionĀ :

Indexer cette partie [y,n,a,d,/,j,J,g,e,?]? ?
y - indexer cette partie
n - ne pas indexer cette partie
a - indexer cette partie et toutes celles restantes dans ce fichier
d - ne pas indexer cette partie ni aucune de celles restantes dans ce fichier
g - sƩlectionner une partie Ơ voir
/ - chercher une partie correspondant Ơ la regexp donnƩe
j - laisser cette partie non dƩcidƩe, voir la prochaine partie non encore dƩcidƩe
J - laisser cette partie non dƩcidƩe, voir la prochaine partie
k - laisser cette partie non dƩcidƩe, voir la partie non encore dƩcidƩe prƩcƩdente
K - laisser cette partie non dƩcidƩe, voir la partie prƩcƩdente
s - couper la partie courante en parties plus petites
e - modifier manuellement la partie courante
? - afficher l'aide

En rĆØgle gĆ©nĆ©rale, vous choisirez y ou n pour indexer ou non chacun des blocs, mais tout indexer pour certains fichiers ou remettre Ć  plus tard le choix pour un bloc peut Ć©galement ĆŖtre utile. Si vous indexez une partie d’un fichier et une autre non, votre statut ressemblera Ć  peu prĆØs Ć  ceciĀ :

What now> 1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:        +1/-1        +4/-0 lib/simplegit.rb

Le statut pour le fichier simplegit.rb est intĆ©ressant. Il vous montre que quelques lignes sont indexĆ©es et d’autres non. Vous avez partiellement indexĆ© ce fichier. DĆØs lors, vous pouvez quitter l’ajout interactif et exĆ©cuter git commit pour valider les fichiers partiellement indexĆ©s.

Enfin, vous pouvez vous passer du mode interactif pour indexer partiellement un fichierĀ ; vous pouvez faire de mĆŖme avec git add -p ou git add --patch en ligne de commande.

De plus, vous pouvez utiliser le mode patch pour rƩinitialiser partiellement des fichiers avec la commande reset --patch, pour extraire des parties de fichiers avec checkout --patch et pour remiser des parties de fichiers avec stash save --patch. Nous explorerons plus en dƩtail chacune des ces commandes quand nous aborderons les usages avancƩs de ces commandes.

scroll-to-top