Quais arquivos Eclipse pertencem sob controle de versão?

242

Quais arquivos do Eclipse é apropriado colocar sob controle de origem, além das fontes, obviamente?

No meu projeto, especificamente, estou pensando em:

.metadata / *
project-dir / .project
project-dir / .classpath
project-dir / .settings / *

Se houver algum destes dos quais depende, explique suas diretrizes.

esplêndido
fonte

Respostas:

175

Os metadados não devem ser gerenciados no controle de origem. Eles contêm principalmente dados relevantes para o seu espaço de trabalho.

A única exceção são os .launcharquivos XML (definição do iniciador).

Eles são encontrados em

[eclipse-workspace]\.metadata\.plugins\org.eclipse.debug.core\.launches

E eles devem ser copiados para o diretório do projeto: Quando o projeto for atualizado, essas configurações serão exibidas na caixa de diálogo "Executar configuração".

Dessa forma, esses arquivos de parâmetros de inicialização também podem ser gerenciados no SCM.

(Aviso: Do desmarque a opção "configurações de exclusão quando recurso associado é excluído" na Run / Lançamento / configuração de lançamento painel de preferências: é comum a soft-excluir um projeto, a fim de importá-lo de volta - para forçar uma reinicialização do metadados do eclipse. Mas essa opção, se marcada, removerá os parâmetros detalhados de inicialização!)

project-dir/.project
project-dir/.classpath
project-dir/.settings/* 

deve estar no seu SCM (especialmente .projecte de .classpathacordo com a documentação do Eclipse ).

O objetivo é que qualquer pessoa possa fazer check-out / atualizar seu espaço de trabalho do SCM e importar o projeto Eclipse para o espaço de trabalho do Eclipse.

Para isso, você deseja usar apenas caminhos relativos no caminho .class, usando recursos vinculados .

Nota: é melhor se project-dirreferir a um diretório de projeto "externo", não a um diretório criado no espaço de trabalho do eclipse. Dessa forma, as duas noções (espaço de trabalho eclipse vs. espaço de trabalho SCM) são claramente separadas.


Como o ipsquiggle menciona no comentário, e como já mencionei em uma resposta antiga , você pode realmente salvar a configuração de inicialização como arquivo compartilhado diretamente no diretório do projeto. Toda a configuração de inicialização pode ser versionada como os outros arquivos de projeto.

(Na postagem do blog Dica: Criando e compartilhando configurações de inicialização do KD)

texto alternativo

VonC
fonte
16
Um fluxo de trabalho (IMO) muito melhor para trabalhar com qualquer coisa em .metadata para os arquivos .launch é: quando você edita uma configuração de inicialização, na commonguia, escolha Save as > shared file. Isso o coloca diretamente na pasta do projeto, para que possa ser SCM com o restante do projeto.
Ipsquiggle
3
Por que o .project deveria estar no SCM? Por exemplo, quero usar uma ferramenta de métricas de código que cause alterações no projeto quando ativada. Eu não gostaria de forçar isso em todos os usuários do projeto.
Jritz42
8
@ jfritz42: se você fizer uma alteração local e pontual válida apenas para você, faça com que a versão .projectignorada por enquanto seja apenas para o seu espaço de trabalho. Mas não prive todos os outros usuários da definição de projeto comum do Eclipse que eles podem importar rapidamente em seu espaço de trabalho Eclipse, apenas porque você possui uma definição extra que atenderia apenas às suas necessidades do momento.
VonC 28/11/19
7
Obrigado. Estudarei esses links com cuidado, mas já noto que no primeiro dos seus links uma resposta começa "Definitivamente sim", enquanto a seguinte começa "Definitivamente não". O Google está cheio de conselhos variados e pouco amigáveis ​​para iniciantes. Eu entendo o objetivo, mas como chegar lá é o problema. Eu venho do Xcode, onde as opções de origem e usuário são claramente separadas da saída gerada pelo Xcode e gerada pelo compilador, para que esta pergunta tenha uma resposta simples. Para o iniciante no Eclipse, parece que esses arquivos são misturados e espalhados. Eu estou procurando um simples compreensível answr
Garyp
3
Eu venho do VisualStudio, e eu segundo o @garyp aqui - é realmente uma bagunça - se o Eclipse precisar criar arquivos temporários e / ou desnecessários para rastrear por usuário, deve colocá-los em outro lugar, para que as definições de projeto e construção podem ser rastreadas e todo o lixo temporário não atrapalha. Não há mais alguma orientação oficial da equipe Eclipse em algum lugar? (É bastante claro a equipe eclipse não teste de unidade [ou se o fizerem, eles não fazê-lo de forma eficaz], mas pelo menos me dizer que utilizam controle de origem XD!)
BrainSlugs83
19

Atualmente, estou trabalhando em um projeto no qual temos os arquivos .project e .cproject sob controle de origem. A idéia era que as configurações relacionadas aos caminhos da biblioteca e às diretivas de link se propagassem pela equipe.

Na prática, não funcionou muito bem, as fusões quase sempre retornam em um estado conflituoso que precisa ser desconfigurado fora do eclipse e, em seguida, o projeto é fechado e reaberto para que as alterações entrem em vigor.

Eu não recomendaria mantê-los no controle de origem.

pdemarest
fonte
14

Não vale nada que os arquivos de configuração do CDT não sejam compatíveis com o controle de origem. Há um erro registrado para os arquivos .cproject mudando com muita frequência e causando conflitos. Consulte Compartilhar arquivos do projeto cdt no repositório sempre causa conflitos .

Diaa Sami
fonte
Caramba - esse bug tem seis anos e ainda não foi tocado. Claramente, o suporte ao controle de origem não é uma prioridade para a equipe do Eclipse!
precisa saber é o seguinte
2
Também deve ser observado que o arquivo .cproject contém informações de configuração que você prefere não forçar outros desenvolvedores a recriar manualmente. Ugh.
Christopher Barber
7

Alguns projetos, como os que usam o Maven, gostam de gerar os arquivos .project com base em POMs.

Dito isto, além disso - .metadata NÃO deve estar no controle de origem. Seu projeto precisará determinar se o projectdir / .settings funciona, com base em como você planeja gerenciar padrões e tais. Se você pode confiar honestamente em seus desenvolvedores para configurar seu ambiente com base no padrão e não precisar personalizar nada de especial para nenhum projeto, não precisará inseri-los. Eu, recomendo configurar todos os projetos especificamente . Isso permite que os desenvolvedores trabalhem nas coisas de vários projetos no mesmo espaço de trabalho sem precisar alterar as configurações padrão e para trás e torna as configurações muito explícitas, substituindo as configurações padrão para corresponder aos padrões do projeto.

A única parte difícil é garantir que todos fiquem sincronizados. Mas na maioria dos casos, você pode copiar os arquivos .settings de um projeto para outro. Se houver algo que você não deseja especificamente no controle de origem, faça o equivalente à configuração svn: ignore para eles, se o seu SCM suportar.

John Stoneham
fonte
2
Usamos o Maven 1 e 2 e ele só gera o arquivo .project se você solicitar. E mesmo se você o fizer, o fará com base no conteúdo do POM; portanto, se outro desenvolvedor já fez essa etapa para você e verificou o resultado no controle de versão, por que não tirar proveito disso?
Andrew Swan
6

O arquivo .classpath é definitivamente um bom candidato para o scm, pois configurá-lo manualmente pode ser muito trabalhoso e será difícil para novos desenvolvedores entrarem no projeto. É verdade que pode ser gerado a partir de outras fontes; nesse caso, você faria o check-in na outra fonte.

Quanto às configurações, isso depende das configurações. Essa é uma área cinzenta, mas algumas configurações são quase obrigatórias e é conveniente poder verificar um projeto, importá-lo no Eclipse e ter tudo configurado e pronto.

Portanto, em nosso projeto, mantemos uma cópia da pasta .settings chamada CVS.settings e temos uma tarefa ant para copiá-la para .settings. Quando você obtém o projeto no CVS, chama a tarefa ant 'eclipsify' para copiar as configurações padrão para a nova pasta .settings. Quando você define as configurações necessárias para todos os que estão desenvolvendo o projeto, as junta novamente à pasta CVS.settings e as confirma ao CVS. Dessa forma, salvar as configurações no SCM se torna um processo consciente. Requer que os desenvolvedores mesclem essas configurações de volta às pastas .settings periodicamente, quando grandes alterações são registradas. Mas é um sistema simples que funciona surpreendentemente bem.

Stijn de Witt
fonte
4

Eu diria que nenhum deles. Eles provavelmente contêm informações que são relevantes apenas para sua estação de trabalho (estou pensando em caminhos para bibliotecas e tudo). E se alguém da sua equipe não estiver usando o Eclipse?

agnul
fonte
3
Não, você pode ter caminhos relativos no seu caminho .class. Consulte stackoverflow.com/questions/300328#300346 .
VonC 3/08/08
7
Soa como uma equipe bastante incoerente / ineficiente se não estiver usando o mesmo desenvolvedor. ferramentas, projeto, depuração e definições de compilação, etc. - Em seguida, você me dirá para não usar um JDK ou padrão de codificação comum. - Idealmente, um usuário deve poder retirar um projeto do controle de origem e entrar diretamente sem muita configuração ou instruções adicionais. Portanto, esta resposta é simplesmente inaceitável para mim.
precisa saber é o seguinte
1
É muito mais ineficiente lidar com os conflitos nos arquivos de preferências durante uma mesclagem, apenas porque alguém abriu o projeto em um novo espaço de trabalho - esse é um pesadelo em grandes projetos. Além disso, forçar o uso do mesmo IDE com exatamente a mesma configuração parece uma restrição desnecessária.
A. Rodas
Eu concordo com [~ agnul]. Os projetos devem usar alguma ferramenta de construção (gradle, maven, ant, etc ...) e o IDE deve poder abrir e configurar o projeto a partir do arquivo de configuração da ferramenta de construção (build.gradle, pom.xml, build.xml, etc ...) Nenhum arquivo IDE deve ser controlado por versão. Todos são arquivos específicos do desenvolvedor, não arquivos específicos do projeto. Eles simples não pertencem ao controle de versão.
axiopisty 23/02
2

Considerar:

.classpath
.project
.launch

Estes devem estar no controle de versão, desde que você mantenha o uso de caminhos relativos ao projeto. Isso permite que outros desenvolvedores verifiquem o projeto e comecem a trabalhar imediatamente, sem ter que passar por toda a dor de instalação que outros desenvolvedores também passaram.

Você pode ficar tentado a incluir .metadata no controle de versão, para que os desenvolvedores do Eclipse possam verificar uma área de trabalho inteira e pré-configurá-la com todos os projetos certos, mas inclui muitas informações específicas do usuário que, sempre que alguém trabalhar nela, serão alterar, por isso aconselho a NÃO INCLUIR .metadata. É fácil construir um espaço de trabalho local apenas importando todos os projetos existentes do Eclipse.

Alex McCarrier
fonte
Na minha experiência, isso tende a quebrar de várias maneiras quando você atualiza o Eclipse para uma versão mais recente ou alterna entre os sabores.
Thorbjørn Ravn Andersen
1

Passei muitas horas definindo as configurações do espaço de trabalho do eclipse para novos colegas (e para mim). O que acabei fazendo foi copiar meus próprios .metadata para a nova máquina do desenvolvedor.

Se você estiver trabalhando em uma equipe, acho que os candidatos a seguir são muito bons para manter o controle de versão:

  • JREs instalados e seus nomes
  • Ambientes de tempo de execução do servidor
  • Modelos do editor Java
  • Atalhos do teclado do controle de versão
  • Configurações de plug-in que não fornecem configurações específicas do projeto
  • Configurações do Maven
  • Perspectivas pré-configuradas
  • ...
Reto Höhener
fonte