Todos na nossa equipe usam o IntelliJ IDEA, e achamos útil colocar seus arquivos de projeto (.ipr e .iml) no controle de origem, para que possamos compartilhar configurações, configurações e inspeções de compilação. Além disso, podemos usar essas configurações de inspeção em nosso servidor de integração contínua com o TeamCity. (Temos o arquivo .iws da área de trabalho por usuário no arquivo .gitignore e não no controle de origem.)
No entanto, esses arquivos mudam de pequenas maneiras quando você faz praticamente qualquer coisa no IDEA. Há um problema no banco de dados de problemas do IDEA para ele ( IDEA-64312 ), então talvez alguém possa considerar isso um bug no IDEA, mas é com o qual precisaremos conviver no futuro próximo.
Até recentemente, estávamos usando o Subversion, mas recentemente mudamos para o Git. Cada um de nós se acostumou a ter uma lista de alterações nos arquivos do projeto que ignoramos e não efetuamos check-in, a menos que houvesse alterações nos arquivos do projeto que desejássemos compartilhar com outras pessoas. Mas com o Git, o poder real parece ser (pelo que estamos explorando) a ramificação contínua que ele incentiva, e alternar entre ramificações é uma dor, pois os arquivos do projeto sempre foram modificados. Geralmente, ele pode mesclar as alterações de alguma forma e tenta lidar com as alterações no arquivo do projeto que estão sendo aplicadas agora na nova ramificação. No entanto, se o novo ramo alterou os arquivos do projeto (como o ramo está trabalhando em um novo módulo que ainda não está nos outros ramos), o git apenas gera um erro que não faz ' não faz sentido mesclar os arquivos quando o ramo tem alterações e você tem alterações localmente, e eu posso entender o ponto. Na linha de comando, pode-se usar "-f" no comando "git checkout" para forçá-lo a jogar fora as alterações locais e usar as ramificações, mas (1) o comando Git Checkout GUI no IDEA (10.5.1) parece não ter isso como uma opção que podemos encontrar; portanto, precisamos mudar para a linha de comando regularmente e (2) não temos certeza de que queremos ter o hábito de usá-lo. sinalizar e dizer ao Git para descartar nossas alterações locais.
Então, aqui estão alguns pensamentos que temos sobre as opções que temos que lidar com isso:
- Tire os arquivos do projeto completamente do controle de origem. Coloque-os no .gitignore e distribua-os a cada pessoa e TeamCity por outros meios, talvez colocando-os no controle de origem em outro lugar ou sob outros nomes. Nossa equipe é pequena o suficiente para considerar essa opção, mas isso não parece ótimo.
- Continue vivendo com ele, tentando garantir quais arquivos temos em quais ramificações em um determinado momento. Como parte disso, podemos incentivar cada desenvolvedor a ter mais de uma cópia de cada projeto em seu sistema, para que cada um possa fazer check-out em uma ramificação diferente, com conjuntos de arquivos de projeto possivelmente diferentes.
- Tente ter apenas o projeto (.ipr) no controle de origem, com os arquivos do módulo (.iml) que não estão no controle de origem e no arquivo .gitignore. A principal coisa que parece mudar por conta própria no .ipr regularmente é a ordem das configurações de compilação compartilhadas, mas talvez possamos compartilhar as informações separadamente sobre como configurá-las. Não tenho muita certeza de como a IDEA lida com esse tipo de coisa, tendo apenas alguns de seus arquivos, especialmente em um novo checkout.
Eu acho que espero que exista alguma solução óbvia (ou não óbvia) que perdemos, talvez lidando com a enorme capacidade de personalização que o Git e o IDEA parecem ter. Mas parece que não poderíamos ser a única equipe com esse problema. As perguntas que são semelhantes no Stack Overflow incluem 3495191 , 1000512 e 3873872 , mas não sei como são exatamente o mesmo problema, e talvez alguém possa apresentar os prós e contras das várias abordagens descritas, abordagens listadas nas respostas a essas perguntas ou abordagens recomendadas.
Respostas:
Você pode usar os IDEA's estrutura de projeto baseada em diretório , onde as configurações são armazenadas no diretório .idea em vez do arquivo .ipr. Oferece controle mais refinado sobre o que é armazenado no controle de versão. Os arquivos .iml ainda estarão por aí, por isso não resolverão as alterações aleatórias neles (talvez mantê-los fora do controle de origem?), Mas é fácil compartilhar coisas como estilo de código e perfis de inspeção, pois cada um deles será em seu próprio arquivo no diretório .idea.
fonte
Do DOC oficial: http://devnet.jetbrains.com/docs/DOC-1186
Coloquei no meu .gitignore:
fonte
Uma resposta oficial está disponível . Supondo que você esteja usando o
.idea
formato do projeto de pasta moderno (e agora padrão) :.idea/workspace.xml
(que é específico do usuário).idea/tasks.xml
(que é específico do usuário)Este arquivo .gitignore de amostra pode ser uma referência útil, mas você ainda deve ler o link acima para entender por que essas entradas aparecem e decidir se você precisa delas.
Pessoalmente, também ignoro o
.idea/find.xml
arquivo, pois isso parece mudar toda vez que você realiza uma operação de pesquisa.fonte
Tirei o workspace.xml do controle de origem (+ adicionado ao .gitignore).
fonte
Nossa equipe não faz check-in de arquivos IntelliJ específicos do caminho. Assumimos que as pessoas saibam como usar o IDE e configurar um projeto. Os arquivos IntelliJ entram na lista de alterações 'ignoradas'.
ATUALIZAR:
A resposta é mais fácil agora que estou usando o Maven e sua estrutura de diretórios padrão.
IntelliJ deve ser convidado a ignorar todos os arquivos
/.svn
,/.idea
e/target
pastas. Tudo referente às informações do caminho de um indivíduo é armazenado/.idea
.Tudo o resto é um jogo justo para se comprometer com o Subversion ou o Git.
fonte
Apenas para compartilhar outra abordagem que minha equipe usou: mova os arquivos relacionados ao IDE para um local diferente onde o IntelliJ não reconheça e crie um script para copiá-los para o local 'ativo' desejado que é ignorado pelo GIT.
O benefício dessa abordagem é que você manteve a opção de compartilhar as configurações do IDE por meio do controle de versão. A única desvantagem é que você precisa decidir quando executar o script (provavelmente uma vez por clone da área de trabalho ou quando as alterações são desejadas), e você pode automatizar isso incorporando o script no processo de construção ou no gancho pós-mesclagem.
Essa abordagem baseia-se no fato de o IntelliJ pesquisar apenas em locais específicos por seus arquivos de configuração, assim também se aplica aos arquivos de configuração da estrutura. Na verdade, ignoramos o arquivo .properties do Grails da mesma maneira, para que os desenvolvedores não façam o check-in acidentalmente de suas alterações na configuração local.
fonte