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
Dit Kaldybaev
la source

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.
mcls
la source
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.
Sidhanshu_
la source
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.

kilotonne
la source
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.

Abhilash Ramteke
la source
-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

Lim Kean Phang
la source
Ce serait une hypothèse que l'OP veut réinitialiser.
SovietFrontier