# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( assurez-vous de valider d'abord les modifications que vous souhaitez conserver , pour éviter tout incident, comme jball037 commente ci-dessous .
L' --cachedoption gardera vos fichiers intacts sur votre disque.)
Dans le cas où vous obtenez un message d'erreur comme fatal: path spec '...' did not match any files, il peut y avoir des fichiers avec des espaces dans leur chemin.
Vous pouvez supprimer tous les autres fichiers avec l'option --ignore-unmatch:
mais les fichiers sans correspondance resteront dans votre référentiel et devront être supprimés explicitement en mettant leur chemin entre guillemets:
J'ai trouvé que l'étape git add n'est pas nécessaire, lorsque j'exécute git status après git rm --cached, les fichiers supprimés sont déjà dans la zone de préparation et vous pouvez simplement les valider.
@VonC désolé, ce n'était pas censé être une diatribe ou un bâton :) Mais oui, j'ai utilisé --cached et toutes mes modifications non validées ont été perdues lorsque j'ai vérifié mes fichiers. Paniqué pendant un moment mais "git reset HEAD" a restauré mes fichiers (mais cette fois sans les fichiers que j'ai spécifiés dans .gitignore, donc votre solution fonctionnait toujours!)
jball037
3
@ jball037 Bien. J'ai ajouté l'avertissement et modifié la réponse en conséquence.
VonC
1
si seulement je lis une ligne plus loin avant de faire ceci "(assurez-vous de valider d'abord vos modifications que vous souhaitez conserver, pour éviter tout incident comme jball037" #fml
Aiden Strydom
9
Je pourrais mal comprendre, mais essayez-vous de supprimer des fichiers récemment ignorés ou souhaitez-vous ignorer les nouvelles modifications apportées à ces fichiers? Dans ce cas, la chose fonctionne.
Si vous souhaitez supprimer les fichiers ignorés précédemment validés, utilisez
C'est une raison très simple de supprimer des fichiers après avoir mis à jour mon .gitignore Cependant, il faut quelques mises à jour mineures: `` git rm –cached git ls-files -i –exclude-standard git commit -m 'clean up' '
Aaron
1
Je sais que c'est une vieille question, mais la solution de gracchus ne fonctionne pas si les noms de fichiers contiennent des espaces. La solution de VonC pour les noms de fichiers avec des espaces est de ne pas les supprimer en utilisant --ignore-unmatch, puis de les supprimer manuellement, mais cela ne fonctionnera pas bien s'il y en a beaucoup.
Voici une solution qui utilise des tableaux bash pour capturer tous les fichiers.
# Build bash array of the file nameswhileread -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'
Réponses:
La solution mentionnée dans "le fichier .gitignore n'ignore pas " est un peu extrême, mais devrait fonctionner:
( assurez-vous de valider d'abord les modifications que vous souhaitez conserver , pour éviter tout incident, comme jball037 commente ci-dessous .
L'
--cached
option gardera vos fichiers intacts sur votre disque.)Vous avez également une autre solution plus fine dans le billet de blog " Faire en sorte que Git ignore les fichiers déjà suivis ":
Bassim suggère dans son montage :
Fichiers avec de l'espace dans leurs chemins
la source
Je pourrais mal comprendre, mais essayez-vous de supprimer des fichiers récemment ignorés ou souhaitez-vous ignorer les nouvelles modifications apportées à ces fichiers? Dans ce cas, la chose fonctionne.
Si vous souhaitez supprimer les fichiers ignorés précédemment validés, utilisez
la source
git ls-files -i –exclude-standard
git commit -m 'clean up' 'Je sais que c'est une vieille question, mais la solution de gracchus ne fonctionne pas si les noms de fichiers contiennent des espaces. La solution de VonC pour les noms de fichiers avec des espaces est de ne pas les supprimer en utilisant
--ignore-unmatch
, puis de les supprimer manuellement, mais cela ne fonctionnera pas bien s'il y en a beaucoup.Voici une solution qui utilise des tableaux bash pour capturer tous les fichiers.
# Build bash array of the file names while read -r file; do rmlist+=( "$file" ) done < <(git ls-files -i --exclude-standard) git rm –-cached "${rmlist[@]}" git commit -m 'ignore update'
la source