Git add comme un pro

Formation Git en partant de 0 partie 4

Plusieurs manières

Dans le chapitre précédent, je t’avais expliqué comment faire ton premier commit et comment ajouter des fichiers dans le stage (l’index) pour pouvoir les commiter.

Maintenant, je vais te montrer différentes manières d’ajouter des fichiers à l’index en fonction de certains cas de figure, qui sont ceux que je rencontre le plus souvent dans mon métier de web développeur.

Contexte de départ

Histoire de partir de la même base, j’ai créé un dossier git sur mon bureau dans lequel j’ai initialisé un nouveau dépôt. Dans ce dossier, j’ai placé les fichiers de WordPress 5.2.

En exécutant la commande git status, voici ce que j’obtiens.

Pour chacune des commandes que je vais expliquer dans cet article, je repartirai de cet état.

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	index.php
	license.txt
	readme.html
	wp-activate.php
	wp-admin/
	wp-blog-header.php
	wp-comments-post.php
	wp-config-sample.php
	wp-content/
	wp-cron.php
	wp-includes/
	wp-links-opml.php
	wp-load.php
	wp-login.php
	wp-mail.php
	wp-settings.php
	wp-signup.php
	wp-trackback.php
	xmlrpc.php

nothing added to commit but untracked files present (use "git add" to track)

Ajout d'un fichier

La première façon d’ajouter des fichiers à l’index, c’est tout simplement de donner le chemin du fichier cible, voici deux exemples.

git add readme.html

git add wp-content/themes/twentynineteen/index.php

Et si je fais un git status, je peux voir que les deux fichiers ont bien été insérés dans l’index.

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   readme.html
	new file:   wp-content/themes/twentynineteen/index.php

Il est également possible d’ajouter plusieurs fichiers en même temps en les séparant par un espace.

git add index.php wp-cron.php

J’utilise parfois cette méthode quand un développeur envoie un nouveau fichier sur le serveur sans passer par git (et à ce moment-là, je cogne) ou lorsqu’un correctif est directement appliqué sur le serveur de production.

Ajout de tout

Et voici la méthode de fainéant par excellence ! En plus d’être rapide à taper, elle ajoute tous les fichiers à l’index (à partir du moment où elle est exécutée à la racine).

git add .

Il est également possible d’utiliser le symbole étoile pour avoir le même résultat.

git add *

Alors il existe quand même une différence entre les deux symboles. La commande avec l’étoile, permet d’ajouter tous les fichiers, cependant elle n’ajoutera pas ceux suivis puis supprimés.

Rien de mieux qu’un petit exemple !

# j'ajoute index.php à staging
git add index.php

# je commit le fichier
git commit -m "sauvegarde de l'index"

# puis je le supprime
rm index.php

# j'ajoute tous les fichiers avec le symbole étoile
git add *

# je commit l'ensemble des fichiers
git commit -m "sauvegarde de tous les fichiers"

Si maintenant je fais un coup de git status, je peux voir qu’effectivement Git n’a pas repris ce fichier.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	deleted:    index.php

Petite précision avec les symboles : ils sont bien sûr relatifs à l’endroit dans lequel tu te trouves (le path). Pour faire un ajout de tout ce qu’il y a dans le dossier wp-content/, je peux procéder comme ça.

# Je vais dans le dossier wp-content
cd wp-content

# Je fais le add .
git add .

Ajout par motif

La troisième méthode que je vais te présenter est sans doute celle que j’utilise le plus souvent. C’est l’ajout de fichiers par motif en utilisant le symbole *. Je vais te montrer deux exemples vraiment très pratiques que tu vas comprendre très facilement.

L’exemple ci-dessous me permet uniquement d’ajouter les fichiers .php qui se trouvent à la racine du WordPress.

P.S. Pour chaque exemple, je réinitialiserais le dépôt.

git add *.php
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   index.php
	new file:   wp-activate.php
	new file:   wp-blog-header.php
	new file:   wp-comments-post.php
	new file:   wp-config-sample.php
	new file:   wp-cron.php
	new file:   wp-links-opml.php
	new file:   wp-load.php
	new file:   wp-login.php
	new file:   wp-mail.php
	new file:   wp-settings.php
	new file:   wp-signup.php
	new file:   wp-trackback.php
	new file:   xmlrpc.php

Le symbole * permet de désigner tous les fichiers d’un répertoire (attention pas les fichiers des répertoires enfants). Si j’ajoute juste après « .php », le système comprend qu’il doit choisir tous les fichiers du répertoire dont le nom finit par .php.

Pour le deuxième exemple de cette méthode, ce que je vais faire, c’est sélectionner uniquement les fichiers qui commencent par « wp-«  et qui se terminent par « .php » ! Tu l’auras sans doute deviné assez facilement, il est possible de mettre le symbole étoile n’importe où dans la chaine.

git add wp-*.php

Et si tu regardes attentivement, tu peux voir que cette fois-ci index.php et xmlrpc.php n’ont pas été repris dans l’index car ils ne respectent pas le motif.

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   wp-activate.php
	new file:   wp-blog-header.php
	new file:   wp-comments-post.php
	new file:   wp-config-sample.php
	new file:   wp-cron.php
	new file:   wp-links-opml.php
	new file:   wp-load.php
	new file:   wp-login.php
	new file:   wp-mail.php
	new file:   wp-settings.php
	new file:   wp-signup.php
	new file:   wp-trackback.php

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	index.php
	license.txt
	readme.html
	wp-admin/
	wp-content/
	wp-includes/
	xmlrpc.php

Git add update

La dernière méthode quant à elle est vraiment très pratique. C’est la même commande que pour tout ajouter mais avec l’option -u (update/mise à jour). On va pouvoir lui dire de ne prendre que les fichiers déjà suivis.

La première chose est de suivre au minimum un fichier. Donc j’ajoute l’index.php et je fais un petit commit, ensuite je fais une toute petite modification dans ce même fichier et je donne un coup de git status.

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   index.php

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	license.txt
	readme.html
	wp-activate.php
	wp-admin/
	wp-blog-header.php
	wp-comments-post.php
	wp-config-sample.php
	wp-content/
	wp-cron.php
	wp-includes/
	wp-links-opml.php
	wp-load.php
	wp-login.php
	wp-mail.php
	wp-settings.php
	wp-signup.php
	wp-trackback.php
	xmlrpc.php

Git m’indique que le fichier index.php contient des modifications. Et je sais qu’il est suivi car il n’apparait pas dans Untracked files.

Maintenant, si je fais un git add . avec l’option update, tu vas voir qu’il va uniquement ajouter le fichier index.php car c’est le seul qui est suivi.

git add . -u
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   index.php

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	license.txt
	readme.html
	wp-activate.php
	wp-admin/
	wp-blog-header.php
	wp-comments-post.php
	wp-config-sample.php
	wp-content/
	wp-cron.php
	wp-includes/
	wp-links-opml.php
	wp-load.php
	wp-login.php
	wp-mail.php
	wp-settings.php
	wp-signup.php
	wp-trackback.php
	xmlrpc.php

C’est une commande très utile quand tu travailles sur un CMS. Dans WordPress par exemple, les fichiers noyau, plugins et le thème sont séparés et quand tu fais une mise à jour, tu peux facilement identifier les nouveaux fichiers qui ont été ajoutés grâce à cette méthode.

"Add bientot"

Voilà tu sais maintenant ajouter des fichiers à l’index comme un expert. Avec de la pratique, tu verras que c’est quelque chose qui est assez instinctif avec ce qui ce fait déjà en ligne de commande. Il y a quelques subtilités à connaître au début, et tu as toujours la commande git status pour savoir où tu en es.

16/03/2020

Yann Vangampelaere - nouslesdevs -

Sinon jete un coup d’oeil aux autres catégories

Ma boîte aux lettres

Tu veux me demander quelque chose ?