Est-il possible de "rafraîchir" un dépôt git après la mise à jour du fichier gitignore?
Je viens d'ajouter plus d'ignorations (?) À mon gitignore et j'aimerais supprimer des éléments déjà dans le dépôt correspondant au nouveau fichier.
Est-il possible de "rafraîchir" un dépôt git après la mise à jour du fichier gitignore?
Je viens d'ajouter plus d'ignorations (?) À mon gitignore et j'aimerais supprimer des éléments déjà dans le dépôt correspondant au nouveau fichier.
Réponses:
La solution mentionnée dans "le fichier .gitignore n'ignore pas " est un peu extrême, mais devrait fonctionner:
# 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' --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 ":
git rm --cached `git ls-files -i --exclude-standard`
Bassim suggère dans son montage :
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
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
mais les fichiers sans correspondance resteront dans votre référentiel et devront être supprimés explicitement en mettant leur chemin entre guillemets:
git rm --cached "<path.to.remaining.file>"
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
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
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'