Arquivos de diretório .idea acidentalmente confirmados no git

306

Acolhi acidentalmente o .idea/diretório no git. Isso está causando conflitos em qualquer outro lugar em que preciso fazer check-out no meu repo. Eu queria saber como faço para remover esses arquivos do controle remoto?

Ainda preciso desses arquivos localmente, pois o Intellij IDE precisa deles. Só não os quero no controle remoto. Adicionei o diretório .idea/ao meu .gitignoree confirmei e enviei este arquivo para remoto. Isso parece não ter efeito durante meu check-out na minha outra máquina. Ainda recebo a mensagem de erro:

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
sethu
fonte
10
Você pode ajudar a evitar isso no futuro revisando seus commits. Eu prefiro executar commitcom -vpara mostrar o diff no seu editor quando você está escrevendo o commit. Isso ajuda a evitar esse tipo de erro e a focar sua mensagem de confirmação no que você mudou.
Daenyth
Daenyth está certo. Além disso, o Git, por padrão, exige que você adicione arquivos à lista de alterações confirmadas; portanto, use isso e não confirme tudo de uma vez. Caso contrário, você poluirá seu repositório como aconteceu, adicionando .idea-o.
Tadeck
1
Todos os arquivos, com exceção de dois .idea, devem estar no controle de origem: devnet.jetbrains.com/docs/DOC-1186
cja
Eu descobri IntelliJ .ignore plugin muito útil quando você deseja gerenciar todos os arquivos que não devem ser comprometidos com git: plugins.jetbrains.com/plugin/7495?pr=idea
paranza
Oi, qual é o dano disso se tivermos .idea no repositório remoto?
milad salimi

Respostas:

677

Adicione o diretório .idea à lista de arquivos ignorados

Primeiro, adicione-o .gitignore, para que não seja acidentalmente confirmado por você (ou outra pessoa) novamente:

.idea

Remova-o do repositório

Segundo, remova o diretório apenas do repositório, mas não o exclua localmente. Para conseguir isso, faça o que está listado aqui:

Remova um arquivo de um repositório Git sem excluí-lo do sistema de arquivos local

Envie a alteração para outras pessoas

Terceiro, confirme o .gitignorearquivo e a remoção do .idearepositório. Depois disso, empurre-o para o controle remoto.

Resumo

O processo completo ficaria assim:

$ 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

(opcionalmente, você pode substituir a última linha por git push some_remote, onde some_remoteestá o nome do controle remoto para o qual você deseja enviar)

Tadeck
fonte
4
Nota: Se você receber a mensagem fatal: pathspec '.idea' did not match any filesao executar git rm -r --cached .idea, exclua a pasta .idea, puxe do github e tente novamente.
annedroiid
Se você receber o erro @annedroiid de 'não corresponde a nenhum arquivo', tente adicionar seu caminho. Como quando eu estava excluindo o arquivo database.yml, eu simplesmente fiz 'git rm -r --cached config / database.yml' '
Ruto Collins
Alguns arquivos no diretório .idea devem ser registrados no seu repositório. Consulte github.com/github/gitignore/blob/master/Global/… para obter a sugestão do JetBrains sobre como deve ser o seu .gitignore.
tokenizer_fsj
2
Eu não consigo tirar essa pasta do nosso repositório para a vida toda ... alternar ramos continua rastreando-o ... as pessoas executam isso em vários ramos e sempre que você alterna ramos ... o git acha que precisa .. em algum momento ... exclua sua pasta .idea, então ... resumindo ... alternar ramos agora é basicamente uma limpeza de configurações para nós. Eu tentei executá-lo no master ... depois me fundindo em todos os ramos .. mas o stills está limpando as configurações.
Nawlbergs
1
Temos uma solução permanente para que isso seja definido como IntelliJ para NUNCA adicionar uma .ideapasta para confirmar arquivos?
Serhat
88

Você pode removê-lo do repositório e confirmar a alteração.

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

Depois disso, você pode enviá-lo para o controle remoto e todos os check-out / clones depois disso ficarão ok.

Ricardo Souza
fonte
10
Isso funcionou para mim, em oposição à resposta aceita. Talvez tenha sido o git add -u que fez a diferença.
Paolo Mioni
Você não precisa da segunda linha.
precisa saber é o seguinte
Como os outros disseram, eu não corri na segunda linha. Trabalhou como um encanto! graças
blackkara
0

Você deve adicionar um arquivo .gitignore ao seu projeto e adicionar /.ideaa ele. Você deve adicionar cada diretório / arquivo em uma linha.

Se você já possui um arquivo .gitignore , basta adicionar uma nova linha ao arquivo e colocá /.idea-la na nova linha.

Depois disso, execute o git rm -r --cached .ideacomando.

Se você encontrou um erro, pode executar o git rm -r -f --cached .ideacomando. Afinal, execute git add .e, em seguida, git commit -m "Removed .idea directory and added a .gitignore file"e finalmente pressione as alterações executando o git pushcomando

Hossein
fonte
0

É melhor fazer isso através da ramificação Master

Edite o arquivo .gitignore. Adicione a linha abaixo nela.

.idea

Remova a pasta .idea do repositório remoto. usando o comando abaixo.

git rm -r --cached .idea

Para mais informações. reference: Removendo arquivos de um repositório Git sem realmente excluí-los

Arquivo .gitignore do estágio. Usando o comando abaixo

git add .gitignore

Confirmar

git commit -m 'Removed .idea folder'

Enviar para remoto

git push origin master

rahulnikhare
fonte