GIT - 15 Gérer des fichiers en dehors de GIT

Dans cette leçon, on regarde ce qui se passe quand on renomme ou supprime des fichiers via les commandes shell mv et rm (hors Git), et comment indiquer correctement ces changements à Git après coup. Je suis dans le repository avec un working directory propre, et deux fichiers suivis : coucou.html et venus.html.

Créons un nouveau fichier uranus.html avec touch, puis renommons venus.html en venus.txt avec la commande shell :

touch uranus.html
mv venus.html venus.txt
ls -l

Comment Git perçoit ces changements

Git ne voit pas un « rename » : il voit une suppression (venus.html a disparu) et un fichier non suivi (venus.txt est apparu, ainsi qu'uranus.html). Pour qu'il enregistre correctement nos changements, on utilise git add avec les bonnes options.

git add -u vs git add -A

  • git add -u (update) : ne prend en compte que les modifications et suppressions des fichiers déjà suivis — pas les nouveaux fichiers untracked.
  • git add -A (all) : couvre tous les types de modifications (ajouts, modifs, suppressions) sur le repository entier.
git add -A
git status

Avec -A, Git détecte alors correctement le rename venus.html → venus.txt et prend aussi le nouveau uranus.html. On committe :

git commit -m "rename et ajouts"

Supprimer via rm puis informer Git

Si on décide finalement de supprimer uranus.html en passant par le shell :

rm uranus.html
git add -u
git commit -m "suppression de uranus.html"

Bilan : utiliser les commandes shell hors Git fonctionne, mais nécessite ensuite un git add -u ou -A explicite pour informer Git. Préférez quand c'est possible git mv et git rm directement — c'est plus propre et Git suit le rename à 100% de confiance.

En résumé

Cette leçon enseigne comment gérer les fichiers en dehors de Git à l'aide des commandes système d'exploitation (touch, mv, rm) et comment Git détecte ces changements. On découvre que renommer un fichier est interprété par Git comme une suppression d'ancien fichier et un ajout de nouveau, et on apprend à utiliser `git add -u` pour les modifications/suppressions et `git add -A` pour capturer tous les changements (ajouts, suppressions, renommages) dans l'index.

Points clés

  • Créer un fichier avec touch : Git ne le détecte pas tant qu'il n'est pas ajouté manuellement
  • Renommer avec mv au niveau système : Git l'interprète comme suppression de l'ancien + ajout du nouveau fichier
  • git add -u met à jour l'index pour les fichiers modifiés/supprimés existants (exclut les nouveaux fichiers non suivis)
  • git add -A (ou git add .) capture tous les changements : ajouts, suppressions ET renommages
  • git status affiche correctement un renommage après git add -A, reconnaissant la continuité du fichier
  • La suppression avec rm au niveau système doit être communiquée à Git via git add -u ou git add -A avant commit

Questions fréquentes

Pourquoi Git détecte-t-il un renommage comme suppression + ajout?

Parce que le renommage se fait au niveau du système d'exploitation (avec mv), pas via Git. Git observe seulement le résultat : l'ancien fichier a disparu et un nouveau a apparu. Il faut utiliser git add -A pour qu'il détecte intelligemment qu'il s'agit d'un renommage.

Quelle est la différence entre git add -u et git add -A?

git add -u ne stage que les modifications et suppressions des fichiers déjà suivis par Git, tandis que git add -A stage tous les changements : modifications, suppressions ET nouveaux fichiers non encore suivis.

Comment gérer les suppressions de fichiers avec Git?

Après supprimer un fichier au niveau système avec rm, utiliser git add -u pour signaler à Git que le fichier est supprimé, ou git add -A pour capturer ce changement ainsi que d'autres modifications avant de faire un commit.