Close

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
Logo Git
Ressource connexe

Fiche de révision sur Git

Logo Bitbucket
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 de livraison courant consiste à avoir un répertoire de build ou de distribution qui n'est pas commité dans l'index de suivi des répertoires. 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 répertoire. Il peut être utile de nettoyer également ce répertoire contenant 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.

Des personnes qui collaborent à l'aide d'un mur rempli d'outils

Le blog Bitbucket

Illustration DevOps

Parcours de formation DevOps

Démos Des démos avec des partenaires d'Atlassian

Fonctionnement de Bitbucket Cloud avec Atlassian Open DevOps

Inscrivez-vous à notre newsletter DevOps

Thank you for signing up