File di directory .idea impegnati accidentalmente in git


306

Ho accidentalmente impegnato la .idea/directory in git. Ciò sta causando conflitti in qualsiasi altro luogo in cui ho bisogno di controllare il mio repository. Mi chiedevo come posso rimuovere questi file dal telecomando?

Ho ancora bisogno di questi file localmente poiché l'IDE Intellij ne ha bisogno. Non li voglio nel telecomando. Ho aggiunto la directory .idea/alla mia .gitignoree il commit e ho inserito questo file in remoto. Questo sembra non avere alcun effetto durante il mio checkout sull'altra mia macchina però. Ricevo ancora il messaggio di errore:

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
Puoi evitare questo in futuro rivedendo i tuoi impegni. Preferisco correre commitcon -vper mostrare il diff nel tuo editor quando scrivi il commit. Ti aiuta a prevenire questo tipo di errore e ti aiuta a focalizzare il tuo messaggio di commit su ciò che hai cambiato.
Daenyth,

Daenyth ha ragione. Inoltre Git per impostazione predefinita richiede di aggiungere file all'elenco delle modifiche impegnate, quindi utilizzalo e non eseguire il commit di tutto in una volta. Altrimenti inquinerai il tuo repository come è successo aggiungendolo .ideaad esso.
Tadeck,

1
Tutti i file tranne due in .idea dovrebbero essere nel controllo del codice sorgente: devnet.jetbrains.com/docs/DOC-1186
cja

Ho trovato il plug-in IntelliJ .ignore molto utile quando si desidera gestire tutti i file che non devono essere impegnati in git: plugins.jetbrains.com/plugin/7495?pr=idea
paranza

Ciao, qual è il danno di questo se abbiamo .idea nel repository remoto?
milad salimi

Risposte:


677

Aggiungi la directory .idea all'elenco dei file ignorati

Innanzitutto, aggiungilo a .gitignore, quindi non viene commesso di nuovo accidentalmente da te (o da qualcun altro):

.idea

Rimuoverlo dal repository

In secondo luogo, rimuovere la directory solo dal repository, ma non eliminarla localmente. Per farlo, fai ciò che è elencato qui:

Rimuovere un file da un repository Git senza eliminarlo dal filesystem locale

Invia la modifica ad altri

In terzo luogo, eseguire il commit del .gitignorefile e la rimozione .ideadal repository. Dopodiché, spingilo sul / sui telecomando / i.

Sommario

L'intero processo sarebbe simile al seguente:

$ 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

(facoltativamente puoi sostituire l'ultima riga con git push some_remote, dove some_remoteè il nome del telecomando che vuoi spingere)


4
Nota: se ricevi il messaggio fatal: pathspec '.idea' did not match any filesquando esegui git rm -r --cached .idea, elimina la cartella .idea, tira da github e quindi riprova.
Annedroiid,

Se ricevi l'errore @annedroiid di "non corrisponde ad alcun file", puoi provare ad aggiungere il suo percorso. Come quando stavo cancellando il file database.yml, ho semplicemente fatto 'git rm -r --cached config / database.yml'
Ruto Collins

Alcuni file nella directory .idea devono essere archiviati nel repository. Vedi github.com/github/gitignore/blob/master/Global/… per suggerimenti su JetBrains su come dovrebbe apparire il tuo .gitignore.
tokenizer_fsj

2
Non riesco a estrarre questa cartella dal nostro repository per tutta la vita ... il cambio di rami continua a rintracciarlo ... le persone lo hanno eseguito su più rami e ogni volta che si cambia ramo ... git pensa che debba .. ... ad un certo punto ... cancella la tua cartella .idea, quindi ... in breve ... cambiare rami ora è sostanzialmente una cancellazione delle impostazioni per noi. Ho provato a eseguirlo sul master ... quindi l'unione in tutti i rami .. ma alambicchi sta cancellando le impostazioni.
nawlbergs,

1
Abbiamo una soluzione permanente per impostare IntelliJ su MAI aggiungere la .ideacartella per eseguire il commit dei file?
Serhat,

88

È possibile rimuoverlo dal repository e confermare la modifica.

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

Dopodiché, puoi inviarlo al telecomando e ogni checkout / clone successivo sarà ok.


10
Questo ha funzionato per me, al contrario della risposta accettata. Forse è stato Git Add -u a fare la differenza.
Paolo Mioni,

Non hai bisogno della seconda linea.
kjdion84,

Come hanno detto gli altri, non ho eseguito la seconda linea. Ha funzionato come un fascino! grazie
blackkara il

0

È necessario aggiungere un file .gitignore al progetto e aggiungerlo /.ideaad esso. È necessario aggiungere ogni directory / file in una riga.

Se si dispone di un file .gitignore esistente, è sufficiente aggiungere una nuova riga al file e inserirla /.ideanella nuova riga.

Dopo quel git rm -r --cached .ideacomando di esecuzione .

Se hai riscontrato un errore, puoi eseguire il git rm -r -f --cached .ideacomando. Dopo tutto esegui git add .e poi git commit -m "Removed .idea directory and added a .gitignore file"e infine invia le modifiche eseguendo il git pushcomando.


0

È meglio eseguire questa operazione sul ramo Master

Modifica il file .gitignore. Aggiungi la riga sotto in essa.

.idea

Rimuovere la cartella .idea dal repository remoto. usando il comando sotto.

git rm -r --cached .idea

Per maggiori informazioni. riferimento: Rimozione di file da un repository Git senza eliminarli effettivamente

Stage file .gitignore. Utilizzando il comando seguente

git add .gitignore

Commettere

git commit -m 'Removed .idea folder'

Premere sul telecomando

git push origin master

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.