Faire un git add propre et efficace
Salut les amis !
Cela faisait un p’tit moment que je n’avais pas écrit d’article, mais il faut dire que cette période a été un peu compliquée pour tout le monde :) Et j’ai été pas mal occupé également.
Il y a quelques mois, je m’étais forcé à utiliser Git dans le terminal et plus en mode « clic clic » dans mon éditeur de code sans comprendre ce que je fais réellement. Et que ce soit au taf ou pour moi perso. Et je dois dire qu’aujourd’hui c’est devenu naturel. Au point que lorsque je clique sur un bouton pour faire une action Git, j’ai honte et je regarde autour de moi si on m’a vu.
Aujourd’hui je voudrais mettre en lumière 2 façons d’ajouter vos fichiers dans l’index pour commit et vous pourrez ne plus utiliser le sempiternel git add .. Que l’on soit d’accord : ce n’est pas les meilleures façons d’ajouter, mais bien les façons que moi je peux conseiller. Encore une fois, je ne suis pas un pro du git, et il est fort possible qu’il existe une meilleure façon de faire. Donc, n’hésitez pas à me le dire en commentaire :)
Pourquoi je n’aime pas git add . ?
La réponse sera simple et courte : je ne trouve ça pas trop propre et vous ajoutez tous vos fichiers comme un bourrin dans l’index de commit sans vous souciez de ce qui a été modifié. OK c’est plus rapide, mais une erreur est vite arrivée et vous pouvez insérer des erreurs inutiles qui vous feront chier par la suite.
S’il vous plait, plus de git add . !
Comme pour mon article sur le git rebase interactive, je vais fonctionner avec des copies d’écran pour que vous compreniez bien.
Faisons un git status :
Nous pouvons voir un fichier modifié et un fichier non ajouté dans l’index : on dit que le fichier est untracked.
Un peu de vocabulaire
Voyons cela rapidement :
- Untracked : votre fichier est nouveau et n’est pas encore inscrit dans l’index du commit En gros il est là, il attend qu’on veuille bien de lui et n’est existant qu’en local sans interaction avec votre branche locale. Il apparaît en rouge dans le statut.
- Changes not staged : votre fichier est inscrit dans l’index mais a été modifié. Il apparaît en rouge dans le statut
- Changes to be commit : votre fichier a été ajouté à l’index du commit et est prêt à être commit. Il apparaît en vert dans le statut.
1 : Git add -p
La première façon est git add -p. le -p veut dire patch. En gros vous allez parcourir chaque modification dans chaque fichier modifié, voir les modifications et dire si oui ou non vous voulez l’ajouter. Essayons ! Allez hop :
Bon OK la différence est subtile, c’est l’indentation. Mais c’est pour les besoins de l’article ! Ne me jugez pas, je suis pas là pour souffrir OK ??!
Là on a pas mal de choix possible ! Stage de hunk, à traduire par ajouter ce bloc :
- y : cela va parcourir le fichier et afficher chaque différence. Et à chaque différence on vous demandera ce que vous voulez faire.
- n : vous refusez d’ajouter le fichier complet. Il passe au suivant
- q : vous quittez le git add -p (c’était trop dur :P)
- a : vous allez accepter ce bloc et toutes les autres modifications seulement sur ce fichier.
- d : vous refusez ce bloc de modification et toutes les prochaines modifications et vous passez au fichier suivant. La différence est subtile avec n mais ce dernier refuse le fichier au complet alors que d lui vous pouvez accepter par exemple les 2 premières modifications et refuser les suivantes.
- g : vous pouvez choisir le bloc modifié sur lequel vous voulez aller. C’est pas mal pour parcourir vos modifications.
- / : si vous êtes un fou du regex, cette option est faite pour vous :P
- J : si vous êtes indécis sur ce que vous voulez faire de cette modification, cela permet de mettre ce bloc en undecided et de passer au bloc modifié suivant.
- j : vous laissez ce bloc en undecided et vous passez au prochain bloc qui a le statut undecided
- e : permet de modifier le bloc en live avec nano ou VI
- ? : affiche l’aide que je viens de me faire chier à vous expliquer ! :P
Point positif :
Cette solution est vraiment pas mal. Vous pouvez interagir avec vos fichiers modifiés inscrits dans l’index pour chaque bloc.Point négatif :
Je regrette juste que ce soit assez chiant quand on a beaucoup de modification et de fichiers modifiés. Et quid des fichiers en untracked ? On risque de les oublier et on est obligé de faire un git add monfichier pour l’inscrire dans l’index de commit.
2 : Git add -i
La seconde méthode est ma préférée. C’est la façon interactive. Je trouve cette méthode assez claire car elle regroupe plusieurs commandes, dont le patch que nous venons de voir. Allez c’est partie, faisons un p’tit git add -i :
Ce qui est intéressant avec cette méthode, c’est qu’en théorie vous ne pouvez pas louper un fichier untracked car il y a une option pour ça dans la version interactive.
Expliquons les options :
- 1 (ou s) : affiche le statut des fichiers dans l’index de commit. (Important : juste dans l’index de commit !)
- 2 (ou u) : liste les fichiers que vous voulez ajouter dans l’index de commit au cas par cas. Soit vous tapez le chiffre, soit la lettre qui est en gras et couleur pour sélectionner vos fichiers
- 3 (ou r) : liste les fichiers que vous avez ajoutés dans l’index de commit pour faire un retour arrière. Vous sélectionnez le ou les fichiers voulus et cela les renverra à l’état initial au tout début du git add -p (soit unchanged, soit untracked)
- 4 (ou a) : liste les fichiers non inscrit dans l’index de commit pour les ajouter au cas par cas. A vous de sélectionner les fichiers voulus
- 5 (ou p) : liste les fichiers modifié et inscrit dans l’index de commit pour passer en revu les modifications et voir quoi ajouter ou refuser. Vous vous retrouvez avec le patch vu juste ci-dessus grâce à la commande git add -p.
- 6 (ou d) : liste les fichiers ajoutés dans l’index de commit et vous montrent les différences entre vos modifications et le code original.
- 7 (ou q) : vous quittez le git add -i. :)
- 8 (ou h) : affiche l’aide !
Voici un exemple si vous tapez a (add untracked), vous avez le listing des fichiers à ajouter dans l’index de commit. Et même principe, le chiffre ou la lettre en gras pour l’ajouter ! Et vous faites la touche Entrée sans rien saisir pour revenir au menu précédent :
Point positif :
J’aime cette solution. Elle permet de ne rien oublier, de tout contrôler. Bref vous l’aurez compris c’est ma méthode préférée.Point négatif :
Très honnêtement je n’en ai pas trouvé. :P
Voilà ! Après tout ça, j’espère vous avoir fait abandonner le git add . bien bourrin et être plus consciencieux dans vos ajouts de fichiers sur vos branches :)
Longue vie et prospérité !
Oh yees ! oh yes !!
ça rappelle nos débuts avec Git ^^
Ha ha ha yes mon ami :D
Git .. Pas facile à prendre en main au tout début lorsqu’on débute, mais ce montre très rapidement indispensable et obligatoire pour tout dev qui se respecte !
Merci pour l’article.
De rien et merci pour le commentaire ! :)