git clean
Dans cette section, nous allons voir plus en détail la commande git clean
. git clean
est, dans une certaine mesure, une commande d'annulation. git clean
peut être considérée comme un complément à d'autres commandes, telles que git reset et git checkout. Tandis que ces autres commandes agissent sur les fichiers précédemment ajoutés à l'index de suivi Git, la commande git clean
fonctionne sur les fichiers non suivis. Ces fichiers ont été créés dans le répertoire de travail de votre dépôt, mais n'ont pas encore été ajoutés à l'index de suivi de celui-ci à l'aide de la commande git add.
Pour mieux illustrer la différence entre les fichiers suivis et non suivis, observons 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 <file>..." to unstage)
new file: tracked_file
Untracked files: (use "git add <file>..." to include in what will be committed) untracked_dir/ untracked_file
Ressource connexe
Fiche de révision sur Git
DÉCOUVRIR LA SOLUTION
Découvrir Git avec Bitbucket Cloud
L'exemple crée un nouveau dépôt Git dans le répertoire git_clean_test
. Il continue en créant un fichier tracked_file
qui est ajouté à l'index Git. De plus, un fichier untracked_file
et un répertoire untracked_dir
sont créés. L'exemple appelle ensuite git status
, qui affiche une sortie précisant l'état interne de Git pour les changements trackés et non trackés. Lorsque le dépôt présente cet état, nous pouvons exécuter la commande git clean
pour démontrer l'objectif visé.
$ git clean fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
À ce stade, exécuter la commande git clean
par défaut peut entraîner une erreur irrécupérable. L'exemple ci-dessus l'illustre. Par défaut, Git est généralement configuré pour demander que la commande git clean
soit associée à une option « force » pour se lancer. C'est un mécanisme de sécurité important. Une fois exécutée, la commande git clean
ne peut pas être annulée. Lorsqu'elle est entièrement exécutée, la commande git clean
procédera à une suppression complète du système de fichiers, qui s'apparente à l'exécution de l'utilitaire rm de ligne de commande. Assurez-vous de réellement vouloir supprimer les fichiers non trackés avant de l'exécuter.
Options courantes et utilisation
Étant donné l'explication précédente des comportements et des mises en garde git clean par défaut, le contenu ci-dessous présente plusieurs cas d'usage de git clean et les options de ligne de commande connexes requises pour leur fonctionnement.
-n
L'option -n effectue un « dry run » de git clean. Vous voyez ainsi les fichiers qui vont être supprimés sans le faire réellement. Il est recommandé de toujours exécuter en premier lieu un « dry run » de git clean. Nous pouvons illustrer le fonctionnement de cette option dans le dépôt de démo créé tout à l'heure.
$ git clean -n
Would remove untracked_file
La sortie nous indique que untracked_file
sera supprimé quand la commande git clean
sera exécutée. Notez que untracked_dir
ne figure pas dans la sortie ici. Par défaut, git clean
n'opère pas de manière récurrente sur les répertoires. Il s'agit d'un autre mécanisme de sécurité pour empêcher toute suppression permanente accidentelle.
-f or --force
L'option « force » initie la suppression réelle des fichiers non trackés du répertoire en cours. L'option « force » est nécessaire, sauf si l'option de configuration clean.requireForce
est définie sur « false ». Cela ne supprimera pas les dossiers ou fichiers non trackés spécifiés par .gitignore
. Exécutons à présent une commande git clean
en direct dans notre dépôt de démonstration.
$ git clean -f
Removing untracked_file
La commande générera une sortie affichant les fichiers supprimés. Comme vous pouvez le voir, untracked_file
a été supprimé. Exécuter git status à ce stade ou ls montrera que le fichier untracked_file a été supprimé et est donc introuvable. Par défaut, git clean -f opèrera sur tous les fichiers non suivis du répertoire actuel. En outre, une valeur < path > peut être transmise avec l'option -f qui supprimera un fichier spécifique.
git clean -f <path>
-d include directories
L'option -d indique à git clean que vous souhaitez également supprimer les éventuels répertoires non suivis. Par suivi, les répertoires seront ignorés. Nous pouvons ajouter l'option -d à nos exemples précédents :
$ git clean -dn
Would remove untracked_dir/
$ git clean -df
Removing untracked_dir/
Dans cet exemple, nous avons exécuté un « dry run » à l'aide de la combinaison -dn, qui génère une sortie indiquant que untracked_dir doit être supprimé. Nous exécutons ensuite un nettoyage forcé et nous recevons une sortie indiquant que untracked_dir a été supprimé.
-x force removal of ignored files
Un schéma courant de livraison de logiciels consiste à avoir un répertoire de build ou de distribution qui n'est pas commité dans l'index de suivi des dépôts. Le répertoire de build contient des artefacts de build éphémères, qui sont générés à partir du code source commité. Ce répertoire de build est généralement ajouté au fichier .gitignore du dépôt. Il peut également être pratique de nettoyer ce répertoire avec d'autres fichiers non suivis. L'option -x indique à git clean d'inclure également les éventuels fichiers ignorés. Comme avec les précédents appels de git clean, il est recommandé d'exécuter d'abord un « dry run » avant la suppression finale. L'option -x s'applique sur tous les fichiers ignorés, pas seulement sur ceux propres au build de projet. Cela pourrait concerner des fichiers inattendus, comme les fichiers de configuration de l'IDE.
git clean -xf
À l'instar de l'option -d, -x peut être transmise et combinée avec d'autres options. Cet exemple montre une combinaison avec -f et supprime les fichiers non suivis du répertoire actuel, ainsi que tout fichier généralement ignoré par Git.
Mode interactif ou git clean interactive
Outre l'exécution de la ligne de commande ad hoc, nous avons jusqu'à présent démontré que git clean
dispose d'un mode « interactif » que vous pouvez lancer en transmettant l'option -i
. Réexaminons l'exemple de dépôt donné dans l'introduction de ce document. Au cours de cette étape initiale, nous lancerons une session de nettoyage interactive.
$ 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 lancé la session interactive avec l'option -d
, de sorte qu'elle influencera également notre répertoire untracked_dir
. Le mode interactif affichera une invite What now>
qui exige d'appliquer une commande aux fichiers non trackés. Les commandes parlent d'elles-mêmes. Nous allons les examiner dans un ordre aléatoire, en commençant par la commande 6: help
. Sélectionner la commande 6 expliquera plus en détail 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 permet de quitter la session interactive.
1: clean
Les éléments indiqués seront supprimés. Si nous devions exécuter 1: clean
à ce stade, untracked_dir/ untracked_file
serait supprimé.
4: ask each
itérera chaque fichier non tracké et affichera une invite Y/N
en vue d'une suppression. Voici à quoi elle devrait ressembler :
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now> 4
Remove untracked_dir/ [y/N]? N
Remove untracked_file [y/N]? N
2: filter by pattern
Affiche une invite supplémentaire qui prend l'entrée utilisée pour filtrer la liste de 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/
Nous entrons ici le modèle de caractère générique *_file
qui restreint la liste de fichiers non trackés à untracked_dir
.
3: select by numbers
À l'instar de la commande 2, la commande 3 affine la liste des noms de fichiers non trackés. La session interactive demandera des numéros qui correspondent à un nom de fichier non tracké.
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
Résumé
Pour résumer, git clean
permet de supprimer facilement les fichiers non suivis dans le répertoire de travail d'un dépôt. Les fichiers non suivis sont ceux qui se trouvent dans le répertoire du dépôt, mais qui n'ont pas encore été ajoutés à l'index du dépôt grâce à git add. Globalement, l'effet de git clean
peut être obtenu grâce à git status et aux outils de suppression natifs des systèmes d'exploitation. git clean
peut être utilisée avec git reset pour annuler entièrement tous les ajouts et les commits d'un dépôt.
Partager cet article
Thème suivant
Lectures recommandées
Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.