GitVoici le quinzième volet de la formation Git. Dans mon précédent article, nous avons abordé une première manière de revenir en arrière grâce à la commande git restore. Jusqu’ici nous avons vu comment ajouter des fichiers à l’index de Git grâce à la commande git add. Aujourd’hui nous allons voir en détail comment nous débarrasser des fichiers dont nous ne voulons plus.

La suppression de fichiers par la pratique

Nous allons continuer à nous servir des fichiers de l’atelier pratique formation-git/atelier-18 pour notre démonstration pratique. Effectuez une nouvelle copie de ce dépôt Git pour travailler dessus :

$ cd ~/formation-git/
$ cp -R atelier-18/ atelier-21
$ cd atelier-21/

Regardons très sommairement ce qu’il contient :

$ ls
Cartes.md  Entretien.md  Roadtrip.md

Le fichier Cartes.md contient la liste des cartes routières dont je pense avoir besoin pour mon voyage. Jusqu’ici j’ai été un motard old school et je me suis trimballé mon lot de cartes Michelin dans ma sacoche de réservoir. Mais cette année, j’ai décidé de passer au XXIème siècle en utilisant le GPS. Je n’ai donc plus besoin de ma liste de cartes :

$ git rm Cartes.md 
rm 'Cartes.md'

Ici, la commande git rm a supprimé le fichier Cartes.md de l’index de Git et du répertoire de travail.

$ ls
Entretien.md  Roadtrip.md

Quel est l’état du dépôt après une opération de suppression ?

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    Cartes.md

Ici, j’ai le choix :

  • Soit je valide la suppression du fichier Cartes.md avec un message approprié.
  • Soit j’annule la suppression à coups de git restore.

Au diable les cartes en papier, je décide de valider la suppression :

$ git commit -m "Plus besoin de cartes, on utilise le GPS."
[master 494f7a9] Plus besoin de cartes, on utilise le GPS.
 1 file changed, 9 deletions(-)
 delete mode 100644 Cartes.md

Deux remarques sur ce que je viens de faire :

  • La commande git rm gère uniquement les fichiers suivis. Si jamais je crée un fichier dans mon répertoire de travail sans l’ajouter à l’index, j’utiliserai la simple commande Linux rm pour m’en débarrasser éventuellement.
  • La base de données d’objets n’est pas affectée par cette suppression. Toutes les versions antérieures du fichier supprimé subsistent dans cette base aussi longtemps que le dépôt existe. Autrement dit, je ne pourrai pas me servir de git rm pour réécrire l’histoire.

Maintenant, que se passe-t-il si j’utilise la simple commande rm au lieu de git rm pour supprimer un fichier suivi par Git ? Faisons un petit test et essayons de supprimer le fichier Roadtrip.md :

$ ls
Entretien.md  Roadtrip.md
$ rm -f Roadtrip.md 
$ ls
Entretien.md

Comme il fallait s’y attendre, il ne figure plus dans mon répertoire de travail. En revanche, l’index n’est pas au courant de cette suppression :

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    Roadtrip.md

no changes added to commit (use "git add" and/or "git commit -a")

Je peux prendre en compte la suppression du fichier grâce à la commande suivante :

$ git add --update
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    Roadtrip.md

Et là, j’ai à nouveau le choix :

  • Soit je valide et je me débarrasse de mon fichier.
  • Soit je reviens en arrière et j’annule la suppression.

Cette fois-ci je ne vais pas valider la suppression du fichier. Au lieu de cela je vais le restaurer en me laissant guider par les indications successives de Git :

$ git restore --staged Roadtrip.md
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    Roadtrip.md

no changes added to commit (use "git add" and/or "git commit -a")
$ git restore Roadtrip.md
$ git status
On branch master
nothing to commit, working tree clean
$ ls
Entretien.md  Roadtrip.md

Exercice

  • Effectuez une copie du dépôt Git atelier-13 et nommez-la atelier-22.
  • Inspectez le contenu, l’historique et l’état du dépôt.
  • Supprimez le script hello-cow.sh dans les règles de l’art et validez la suppression avec le message « Je n’aime pas les vaches ».
  • Supprimez le script hello.sh avec la commande rm.
  • Prenez en compte la suppression de hello.sh dans l’index.
  • Ne validez pas la suppression.
  • Restaurez le script hello.sh jusqu’à ce que votre dépôt soit propre.

Lire la suite : Renommer des fichiers


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *