web-dev-qa-db-fra.com

Comment supprimer les fichiers répertoriés dans le .gitignore mais toujours dans le référentiel?

Certains fichiers de mon référentiel doivent être ignorés. Je les ai ajoutés au .gitignore mais, bien sûr, ils ne sont pas supprimés de mon référentiel.

Ma question est donc la suivante: existe-t-il une commande ou un script magique utilisant une branche de filtre qui puisse réécrire mon historique et supprimer facilement tous ces fichiers? Ou simplement une commande qui créera un commit qui les supprimera?

248
Intrepidd

Vous pouvez les supprimer manuellement du référentiel:

git rm --cached file1 file2 dir/file3

Ou, si vous avez beaucoup de fichiers:

git rm --cached `git ls-files -i --exclude-from=.gitignore`

Mais cela ne semble pas fonctionner dans Git Bash sous Windows. Cela produit un message d'erreur. Ce qui suit fonctionne mieux:

git ls-files -i --exclude-from=.gitignore | xargs git rm --cached  

En ce qui concerne la réécriture de l'historique complet sans ces fichiers, je doute fortement qu'il existe un moyen automatique de le faire.
Et nous savons tous que réécrire l'histoire est une mauvaise chose, n'est-ce pas? :)

352
Samy Dindane

Un moyen plus simple qui fonctionne sur n'importe quel système d'exploitation est de le faire.

git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"

Vous avez essentiellement lu tous les fichiers, à l’exception de ceux du fichier .gitignore

280
gtatr

Comme les fichiers de . Gitignore ne font pas l'objet d'un suivi, vous pouvez utiliser la commande git clean pour supprimer de manière récursive des fichiers qui ne sont pas sous contrôle de version.

Utilisez git clean -xdn pour effectuer un essai et voir ce qui sera supprimé.
Puis utilisez git clean -xdf pour l'exécuter.

Fondamentalement, git clean -h ou man git-clean (sous Unix) vous aidera.

Sachez que cette commande supprimera également nouveaux fichiers qui ne se trouvent pas dans la zone de stockage intermédiaire.

J'espère que ça aide.

117
weiz

J'ai fait une solution très simple en manipulant la sortie de la déclaration .gitignore avec sed:

cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash

Explication:

  1. imprimer le fichier .gitignore
  2. supprimer tous les commentaires de l'impression
  3. supprimer toutes les lignes vides
  4. ajoute 'git rm -r' au début de la ligne
  5. exécuter chaque ligne.
4
Scott Crossen