git affiche toujours les fichiers modifiés après l'ajout à .gitignore


252

j'ajoute ceci au fichier .gitignore

.idea/*

mais de toute façon le statut est:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

Qu'est-ce que je fais mal ? j'ai même ajouté .idea / * au statut global ~ / .gitignore_global mais git, de toute façon me montre:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

Réponses:


422

Votre .gitignorefonctionne, mais il suit toujours les fichiers car ils étaient déjà dans l'index.

Pour arrêter cela, vous devez faire: git rm -r --cached .idea/

Lorsque vous validez, le .idea/répertoire sera supprimé de votre référentiel git et les validations suivantes ignoreront le .idea/répertoire.

PS: Vous pouvez utiliser .idea/au lieu de .idea/*pour ignorer un répertoire. Vous pouvez trouver plus d'informations sur les modèles sur la page de manuel .gitignore .


Citation utile de la git-rmpage de manuel

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.

Pourriez-vous s'il vous plaît expliquer ce que vous vouliez dire par "l'ajout de .idea / fonctionnerait aussi" Est-ce une solution alternative à l'utilisation .gitignorepuis à la réalisation git rm -cached?
Mehrad

3
@Mehrad pas besoin du * dans .gitignore
Steve

2
Non, l'ajout de .idea / ne fonctionne pas, car comme vous l'avez dit dans la réponse, il est déjà dans l'index.
Henrique de Sousa

15
Vous dites donc que vous devez après commitavoir supprimé les fichiers mis en cache? Cela semble vraiment contre-intuitif; ce sont des fichiers que je ne veux PAS valider. Et je ne veux pas qu'ils soient supprimés du référentiel (je veux juste qu'ils ne traînent plus autour de moi git status). Ou suis-je vraiment vraiment confus?
Scott Biggs

6
Ses fichiers ont déjà été suivis par git en raison d'une validation antérieure, donc pour les supprimer, vous devez créer une nouvelle validation qui les supprime du référentiel.
mcls

47

Pour les personnes susceptibles de rechercher ce problème, ne regardez que cette page.

Cela vous aidera à supprimer les fichiers d'index mis en cache, puis à n'ajouter que ceux dont vous avez besoin, y compris les modifications apportées à votre .gitignorefichier.

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

Voici un peu plus d'informations.

  1. Cette commande supprimera tous les fichiers mis en cache de l'index.
  2. Cette commande ajoutera tous les fichiers sauf ceux mentionnés dans gitignore.
  3. Cette commande va valider à nouveau vos fichiers et supprimer les fichiers que vous voulez que git ignore, mais gardez-les dans votre répertoire local.

1
Cela m'a été utile, je voudrais simplement noter que dans les fenêtres cmd, les guillemets simples ne semblent pas fonctionner dans # 3. Utiliser git commit -am "Supprimer les fichiers ignorés" fonctionne cependant.
Sundance.101

1
Pas de soucis, et merci encore pour la réponse claire et concise.
Sundance.101

1
Cette solution dérange vraiment mes fichiers de projet. J'ai dû tout revenir après avoir fait ça.
Fatmajk

1

Les solutions proposées ici et ailleurs n'ont pas fonctionné pour moi, donc je vais ajouter à la discussion pour les futurs lecteurs. Certes, je ne comprends pas encore complètement la procédure, mais j'ai finalement résolu mon problème (similaire) et je veux partager.

J'avais accidentellement mis en cache certains répertoires doc avec plusieurs centaines de fichiers lorsque je travaillais avec git dans IntelliJ IDEA sur Windows 10, et après les avoir ajoutés à .gitignore(et PROBABLEMENT les avoir déplacés un peu), je ne pouvais pas les retirer de la liste des modifications par défaut.

J'ai d'abord commis les changements réels que j'avais apportés, puis j'ai résolu le problème - cela m'a pris beaucoup trop de temps. J'ai essayé git rm -r --cached .mais j'obtiendrais toujours des path-specERREURS, avec différentes variations de path-specainsi qu'avec les drapeaux -fet -r.

git statusafficherait toujours les noms de fichiers, j'ai donc essayé d'utiliser certains de ces mots avec git rm -cached, mais pas de chance. Cacher et déchausser les changements semblait fonctionner, mais ils ont de nouveau été mis en file d'attente après un certain temps (je suis un peu flou sur le délai exact). J'ai finalement supprimé ces entrées pour de bon en utilisant

git reset

Je suppose que ce n'est qu'une BONNE IDÉE lorsque vous n'avez aucune modification mise en cache / mise en cache que vous souhaitez réellement valider.


0

Ajoutez simplement git rm -r --cached <folder_name/file_name>

Parfois, vous mettez à jour le fichier .gitignore après la commande commit des fichiers. Ainsi, les fichiers sont mis en cache dans la mémoire. Pour supprimer les fichiers mis en cache, utilisez la commande ci-dessus.


-2
  1. Git add.

  2. Git status // Vérifier le fichier en cours de modification

    // git reset HEAD --- remplacez le fichier que vous voulez ignorer

  3. git reset HEAD .idea / <- Ceux qui voulaient exclure .idea d'avant commit // git check status et le fichier d'idées seront partis, et vous êtes prêt à partir!

  4. git commit -m ''

  5. git push


Ce serait une hypothèse que l'OP veut réinitialiser.
SovietFrontier
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.