Fichiers de répertoire .idea accidentellement engagés dans git


306

J'ai accidentellement validé le .idea/répertoire dans git. Cela provoque des conflits partout où je dois vérifier mon dépôt. Je me demandais comment supprimer ces fichiers de la télécommande?

J'ai toujours besoin de ces fichiers localement car l'IDE Intellij en a besoin. Je ne veux juste pas qu'ils soient dans la télécommande. J'ai ajouté le répertoire .idea/à mon .gitignoredossier et je me suis engagé et j'ai poussé ce fichier à distance. Cela semble cependant n'avoir aucun effet lors de mon paiement sur mon autre machine. Je reçois toujours le message d'erreur:

error: The following untracked working tree files would be overwritten by checkout:
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/uiDesigner.xml
.idea/vcs.xml
.idea/workspace.xml

10
Vous pouvez éviter cela à l'avenir en examinant vos validations. Je préfère exécuter commitavec -vpour afficher le diff dans votre éditeur lorsque vous écrivez le commit. Il aide à prévenir ce type d'erreur et vous aide à concentrer votre message de validation sur ce que vous avez changé.
Daenyth

Daenyth a raison. De plus, Git par défaut vous oblige à ajouter des fichiers à la liste des modifications validées, alors utilisez-les et ne commettez pas tout à la fois. Sinon, vous polluerez votre référentiel tel qu'il s'est produit en y ajoutant .idea.
Tadeck

1
Tous les fichiers, sauf deux, dans .idea doivent être sous contrôle de code
cja

J'ai trouvé le plugin IntelliJ .ignore très utile lorsque vous souhaitez gérer tous les fichiers qui ne doivent pas être
validés

Salut, quel est le danger de cela si nous avons .idea dans le référentiel distant?
milad salimi

Réponses:


677

Ajoutez le répertoire .idea à la liste des fichiers ignorés

Tout d'abord, ajoutez-le à .gitignore, afin qu'il ne soit pas accidentellement commis par vous (ou quelqu'un d'autre) à nouveau:

.idea

Retirez-le du référentiel

Deuxièmement, supprimez le répertoire uniquement du référentiel, mais ne le supprimez pas localement. Pour y parvenir, faites ce qui est indiqué ici:

Supprimer un fichier d'un référentiel Git sans le supprimer du système de fichiers local

Envoyer la modification aux autres

Troisièmement, validez le .gitignorefichier et supprimez-le .ideadu référentiel. Ensuite, poussez-le vers la ou les télécommandes.

Résumé

Le processus complet ressemblerait à ceci:

$ echo '.idea' >> .gitignore
$ git rm -r --cached .idea
$ git add .gitignore
$ git commit -m '(some message stating you added .idea to ignored entries)'
$ git push

(facultativement, vous pouvez remplacer la dernière ligne par git push some_remote, où some_remoteest le nom de la télécommande vers laquelle vous souhaitez pousser)


4
Remarque: Si vous recevez le message fatal: pathspec '.idea' did not match any fileslorsque vous exécutez git rm -r --cached .idea, supprimez votre dossier .idea, extrayez de github et réessayez.
annedroiid

Si vous obtenez une erreur @annedroiid de «ne correspond à aucun fichier», vous pouvez essayer d'ajouter son chemin. Comme lorsque je supprimais le fichier database.yml, j'ai simplement fait 'git rm -r --cached config / database.yml'
Ruto Collins

Certains fichiers du répertoire .idea doivent être archivés dans votre référentiel. Voir github.com/github/gitignore/blob/master/Global/… pour la suggestion de JetBrains sur l'apparence de votre .gitignore.
tokenizer_fsj

2
Je ne peux pas retirer ce dossier de notre référentiel pour la vie de moi ... changer de branche continue de le suivre ... les gens l'ont exécuté sur plusieurs branches et chaque fois que vous changez de branche ... git pense qu'il doit .. . à un moment donné ... supprimez votre dossier .idea donc ... en bref ... changer de branche est maintenant essentiellement un essuyage des paramètres pour nous. J'ai essayé de l'exécuter sur master ... puis de fusionner dans toutes les branches .. mais les photos sont toujours en train d'essuyer les paramètres.
nawlbergs

1
Avons-nous une solution permanente pour cela de définir sur IntelliJ pour ne JAMAIS ajouter de .ideadossier pour valider les fichiers?
Serhat

88

Vous pouvez le supprimer du référentiel et valider la modification.

git rm .idea/ -r --cached
git add -u .idea/
git commit -m "Removed the .idea folder"

Après cela, vous pouvez le pousser vers la télécommande et chaque checkout / clone après cela sera ok.


10
Cela a fonctionné pour moi, par opposition à la réponse acceptée. C'est peut-être le git add -u qui a fait la différence.
Paolo Mioni

Vous n'avez pas besoin de la 2e ligne.
kjdion84

Comme les autres l'ont dit, je n'ai pas couru en deuxième ligne. A fonctionné comme un charme! merci
blackkara

0

Vous devez ajouter un fichier .gitignore à votre projet et y ajouter /.idea. Vous devez ajouter chaque répertoire / fichier sur une seule ligne.

Si vous avez un fichier .gitignore existant, vous devez simplement ajouter une nouvelle ligne au fichier et la placer /.ideasur la nouvelle ligne.

Après cette git rm -r --cached .ideacommande d' exécution .

Si vous rencontrez une erreur, vous pouvez exécuter la git rm -r -f --cached .ideacommande. Après tout course git add ., puis git commit -m "Removed .idea directory and added a .gitignore file"et enfin pousser les modifications en cours d' exécution git pushcommande.


0

Il vaut mieux effectuer cela sur la branche Master

Modifiez le fichier .gitignore. Ajoutez-y la ligne ci-dessous.

.idea

Supprimez le dossier .idea du référentiel distant. en utilisant la commande ci-dessous.

git rm -r --cached .idea

Pour plus d'informations. reference: Suppression de fichiers d'un référentiel Git sans les supprimer réellement

Fichier stage .gitignore. Utilisation de la commande ci-dessous

git add .gitignore

Commettre

git commit -m 'Removed .idea folder'

Pousser vers la télécommande

git push origin master

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.