Dans cette section, nous allons nous concentrer sur une discussion détaillée de la commande git clean. Git clean est dans une certaine mesure une commande  » undo « . Git clean peut être considérée comme complémentaire à d’autres commandes comme git reset et git checkout. Alors que ces autres commandes opèrent sur les fichiers précédemment ajoutés à l’index de suivi Git, la commande git clean opère sur les fichiers non suivis. Les fichiers non suivis sont des fichiers qui ont été créés dans le répertoire de travail de votre repo mais qui n’ont pas encore été ajoutés à l’index de suivi du dépôt à l’aide de la commande git add. Pour mieux démontrer la différence entre les fichiers suivis et non suivis, considérez l’exemple de ligne de commande suivant :

 $ mkdir git_clean_test $ cd git_clean_test/ $ git init . Initialized empty Git repository in /Users/kev/code/git_clean_test/.git/ $ echo "tracked" > ./tracked_file $ git add ./tracked_file $ echo "untracked" > ./untracked_file $ mkdir ./untracked_dir && touch ./untracked_dir/file $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached ..." to unstage) new file: tracked_file Untracked files: (use "git add ..." to include in what will be committed) untracked_dir/ untracked_file

L’exemple crée un nouveau dépôt Git dans le répertoire git_clean_test. Il procède ensuite à la création d’un tracked_file qui est ajouté à l’index Git, de plus, un untracked_file est créé, et un untracked_dir. L’exemple invoque ensuite git status qui affiche une sortie indiquant l’état interne de Git des modifications suivies et non suivies. Avec le référentiel dans cet état, nous pouvons exécuter la commande git clean pour démontrer son objectif.

 $ git clean fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

À ce stade, l’exécution de la commande git clean par défaut peut produire une erreur fatale. L’exemple ci-dessus démontre ce à quoi cela peut ressembler. Par défaut, Git est globalement configuré pour exiger que la commande git clean reçoive une option « force » pour être lancée. Il s’agit d’un mécanisme de sécurité important. Lorsqu’il est finalement exécuté, git clean n’est pas annulable. Lorsqu’il est entièrement exécuté, git clean fera une suppression dure du système de fichiers, similaire à l’exécution de l’utilitaire rm en ligne de commande. Assurez-vous que vous voulez vraiment supprimer les fichiers non suivis avant de l’exécuter.

Options communes et utilisation

Avec l’explication précédente des comportements par défaut de git clean et des avertissements, le contenu suivant démontre divers cas d’utilisation de git clean et les options de ligne de commande correspondantes nécessaires à leur fonctionnement.

-n

L’option -n effectuera un « essai à sec » de git clean. Cela vous montrera les fichiers qui vont être supprimés sans les supprimer réellement. C’est une bonne pratique de toujours effectuer d’abord une exécution à sec de git clean. Nous pouvons démontrer cette option dans le repo de démonstration que nous avons créé précédemment.

 $ git clean -n Would remove untracked_file

La sortie nous indique que untracked_file sera supprimé lorsque la commande git clean sera exécutée. Remarquez que le untracked_dir n’est pas signalé dans la sortie ici. Par défaut, git clean n’opérera pas de manière récursive sur les répertoires. C’est un autre mécanisme de sécurité pour empêcher la suppression permanente accidentelle.

 -f or --force

L’option force initie la suppression effective des fichiers non suivis du répertoire actuel. Force est nécessaire sauf si l’option de configuration clean.requireForce est définie sur false. Cela ne supprimera pas les dossiers ou les fichiers non suivis spécifiés par .gitignore. Exécutons maintenant un live git clean dans notre exemple de repo.

 $ git clean -f Removing untracked_file

La commande va sortir les fichiers qui sont supprimés. Vous pouvez voir ici que untracked_file a été supprimé. Exécuter git status à ce stade ou faire un ls montrera que untracked_file a été supprimé et n’est nulle part retrouvé. Par défaut, git clean -f opérera sur tous les fichiers non suivis du répertoire courant. En outre, une valeur peut être passée avec l’option -f qui supprimera un fichier spécifique.

 git clean -f -d include directories

L’option -d indique à git clean que vous voulez également supprimer tous les répertoires non suivis, par défaut il ignorera les répertoires. Nous pouvons ajouter l’option -d à nos exemples précédents:

 $ git clean -dn Would remove untracked_dir/ $ git clean -df Removing untracked_dir/

Nous avons ici exécuté un ‘dry run’ en utilisant la combinaison -dn qui sort untracked_dir est prêt à être supprimé. Ensuite, nous exécutons un nettoyage forcé, et recevons la sortie que untracked_dir est supprimé.

 -x force removal of ignored files

Un modèle commun de version de logiciel est d’avoir un répertoire de construction ou de distribution qui n’est pas commis à l’index de suivi des dépôts. Le répertoire de construction contiendra des artefacts de construction éphémères qui sont générés à partir du code source commis. Ce répertoire de construction est généralement ajouté au fichier .gitignore des dépôts. Il peut être pratique de nettoyer également ce répertoire avec d’autres fichiers non suivis. L’option -x indique à git clean d’inclure également tous les fichiers ignorés. Comme avec les invocations précédentes de git clean, c’est une meilleure pratique d’exécuter d’abord un ‘essai’, avant la suppression finale. L’option -x agira sur tous les fichiers ignorés, pas seulement ceux spécifiques à la construction du projet. Cela pourrait être des choses involontaires comme les fichiers de configuration de l’IDE ./.idea.

 git clean -xf 

Comme l’option -d -x peut être passée et composée avec d’autres options. Cet exemple démontre une combinaison avec -f qui supprimera les fichiers non suivis du répertoire actuel ainsi que tous les fichiers que Git ignore habituellement.

Mode interactif ou git clean interactive

En plus de l’exécution ad-hoc en ligne de commande que nous avons démontrée jusqu’à présent, git clean possède un mode « interactif » que vous pouvez initier en passant l’option -i. Revisitons le repo d’exemple de l’introduction de ce document. Dans cet état initial, nous allons démarrer une session interactive de nettoyage.

 $ git clean -di Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now>

Nous avons initié la session interactive avec l’option -d afin qu’elle agisse également sur notre untracked_dir. Le mode interactif affichera une invite What now> qui demande une commande à appliquer aux fichiers non suivis. Les commandes elles-mêmes sont assez explicites. Nous allons les examiner brièvement dans un ordre aléatoire en commençant par la commande 6: help. La sélection de la commande 6 expliquera davantage les autres commandes :

 What now> 6 clean - start cleaning filter by pattern - exclude items from deletion select by numbers - select items to be deleted by numbers ask each - confirm each deletion (like "rm -i") quit - stop cleaning help - this screen ? - help for prompt selection
 5: quit

Est directe et quittera la session interactive.

 1: clean

Supprimera les éléments indiqués. Si nous devions exécuter 1: clean à ce stade, untracked_dir/ untracked_file serait supprimé.

 4: ask each

Va itérer sur chaque fichier non suivi et afficher une Y/N invite pour une suppression. Cela ressemble à ce qui suit:

 *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 4 Remove untracked_dir/ ? N Remove untracked_file ? N
 2: filter by pattern

Affichera une invite supplémentaire qui prend les entrées utilisées pour filtrer la liste des fichiers non suivis.

 Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 2 untracked_dir/ untracked_file Input ignore patterns>> *_file untracked_dir/

Ici, nous entrons le motif de caractère générique *_file qui restreint ensuite la liste des fichiers non suivis à seulement untracked_dir.

 3: select by numbers

Similaire à la commande 2, la commande 3 fonctionne pour affiner la liste des noms de fichiers non suivis. La session interactive demandera des numéros qui correspondent à un nom de fichier non suivi.

 Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 3 1: untracked_dir/ 2: untracked_file Select items to delete>> 2 1: untracked_dir/ * 2: untracked_file Select items to delete>> Would remove the following item: untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help

Summary

Pour récapituler, git clean est une méthode pratique pour supprimer les fichiers non suivis dans le répertoire de travail d’un repo. Les fichiers non suivis sont ceux qui sont dans le répertoire du repo mais qui n’ont pas encore été ajoutés à l’index du repo avec git add. Globalement, l’effet de git clean peut être accompli en utilisant git status et les outils de suppression natifs des systèmes d’exploitation. Git clean peut être utilisé aux côtés de git reset pour annuler complètement tous les ajouts et commits dans un dépôt.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.