Devo manter meus arquivos de projeto sob controle de versão? [fechadas]

87

Devo manter os arquivos do projeto, como .project, .classpath, .settings do Eclipse, sob controle de versão (por exemplo, Subversion, GitHub, CVS, Mercurial, etc)?

Cretzel
fonte
12
Muito construtivo
QED de

Respostas:

93

Você deseja manter no controle de versão todos os arquivos de configuração portáteis , o que
significa:
Qualquer arquivo que não tenha um caminho absoluto.
Isso inclui:

  • .projeto,
  • .classpath ( se nenhum caminho absoluto for usado , o que é possível com o uso de variáveis ​​IDE ou variáveis ​​de ambiente do usuário)
  • Configurações IDE (que discordo totalmente da resposta 'aceita'). Essas configurações geralmente incluem regras de análise de código estático que são de vital importância para serem aplicadas de forma consistente para qualquer usuário que carregue este projeto em seu espaço de trabalho.
  • As recomendações de configurações específicas do IDE devem ser escritas em um grande arquivo README (e com versão também, é claro).

Regra prática para mim:
você deve ser capaz de carregar um projeto em um espaço de trabalho e ter tudo o que você precisa para configurá-lo corretamente em seu IDE e começar em minutos.
Nenhuma documentação adicional, páginas wiki para ler ou o que não.
Carregue, configure e vá.

VonC
fonte
@Rich: obrigado. Para os outros leitores, veja a resposta de Rich à mesma pergunta um ano depois: stackoverflow.com/questions/1429125/…
VonC
3
fase-chave "... comece em minutos ..."
Eric Labashosky,
3
Então, o repositório VC deve ter os arquivos de configuração para cada IDE? NetBeans, Eclipse, Emacs, vi, o que mais? Eu discordo especificamente com a ideia de que esses arquivos porque o desenvolvedor deve ser responsável por configurar seu próprio IDE.
RHSeeger
3
@RH - "... deve ser responsável por configurar seu próprio IDE". Tudo bem, até que algum palhaço se esqueça de definir suas propriedades de estilo de código do Eclipse ... e verifique os arquivos de origem com TABs neles. Grrrr !!
Stephen C
2
Eu também discordo - se você estiver usando CI, várias versões, plataformas, IDEs, etc. isso quebra o DRY muito mal. Esp. já que diferentes plug-ins / configurações têm uma grande influência no que termina aqui.
jayshao
30

Arquivos .project e .classpath sim. No entanto, não mantemos nossas configurações IDE no controle de versão. Existem alguns plug-ins que não fazem um bom trabalho de persistência de configurações e descobrimos que algumas configurações não eram muito portáveis ​​de uma máquina de desenvolvimento para outra. Portanto, temos uma página Wiki que destaca as etapas necessárias para um desenvolvedor configurar seu IDE.

Kevin
fonte
2
-1 Sugiro arquivar relatórios de bug para esses plug-ins, em vez de permitir que desperdiçam o tempo de milhares de pessoas. E então, eu colocaria todos os arquivos de configurações estáveis ​​sob controle de versão e reduziria a página do Wiki até o esqueleto.
Aaron Digulla
18

Esses são o que considero serem arquivos gerados e, como tal, nunca os coloco sob controle de versão. Eles podem ser diferentes de máquina para máquina e de desenvolvedor para desenvolvedor, por exemplo, quando as pessoas têm diferentes plug-ins Eclipse instalados.

Em vez disso, uso uma ferramenta de construção (Maven) que pode gerar versões iniciais desses arquivos quando você faz um novo checkout.

Colete chris
fonte
Para ser preciso: mvn eclipse: eclipse irá gerar um .classpath e um .project apropriados. Você pode passar -DdownloadSources = true e -DdownloadJavadocs = true.
Aleksandar Dimitrov
você também pode configurar o plugin do eclipse em seu pom para sempre baixar fontes e javadoc.
Chris Vest
1
-1 Isso funciona desde que você nunca altere as configurações do projeto em seu IDE. E o perigo é: se você alterá-los, não perceberá porque os arquivos não têm versão. Portanto, estou muito tentado a votar contra isso. Sempre faça isso para projetos realmente simples, como aqueles que você não pretende compartilhar com ninguém. Em uma equipe, os padrões geralmente não funcionam e pedir a cada desenvolvedor para alterar sua configuração é uma receita infalível para o caos.
Aaron Digulla
Aaron, isso funciona mesmo se você alterar os arquivos do projeto em seu IDE. O que acontece a seguir é que você não empurra suas mudanças para sua equipe desavisada. Projetos IDE são propensos a conter informações específicas da máquina e do desenvolvedor, que não funcionam para todos. Acho que quanto mais plug-ins você usa e quanto mais complexo se torna o uso do IDE, pior fica. As pessoas devem saber como funcionam suas ferramentas e ter controle sobre sua configuração. I fazer , no entanto, concorda que esta abordagem não é sem seu próprio conjunto de problemas.
Chris Vest
Além disso, consertar conflitos de mesclagem causados ​​por plug-ins que editam esses arquivos levianamente fica obsoleto rapidamente.
Chris Vest
7

Estou dividido entre duas opções aqui.

Por um lado, acho que todos deveriam ser livres para usar o conjunto de ferramentas de desenvolvimento com que são mais produtivos, contanto que todos os artefatos de origem sejam armazenados no controle de versão e o script de construção (digamos ANT ou Maven) garanta a conformidade dos padrões por especificando exatamente qual JDK usar, quais versões de quais bibliotecas de terceiros depender, executar verificações de estilo (por exemplo, checkstyle) e executar testes de unidade etc.

Por outro lado, acho que muitas pessoas usam as mesmas ferramentas (por exemplo, Eclipse) e muitas vezes é muito melhor ter algumas coisas padronizadas em tempo de design em vez de tempo de construção - por exemplo, Checkstyle é muito mais útil como um plugin do Eclipse do que como uma tarefa ANT ou Maven - que é melhor padronizar no conjunto de ferramentas de desenvolvimento e um conjunto comum de plug-ins.

Eu trabalhei em um projeto onde todos usavam exatamente o mesmo JDK, mesma versão do Maven, a mesma versão do Eclipse, o mesmo conjunto de plug-ins do Eclipse e os mesmos arquivos de configuração (por exemplo, perfis de Checkstyle, regras do formatador de código etc.). Todos eles foram mantidos no controle de origem - .project, .classpath e tudo na pasta .settings. Isso tornou a vida muito fácil durante as fases iniciais do projeto, quando as pessoas estavam continuamente ajustando as dependências ou o processo de construção. Também ajudou imensamente ao adicionar novos iniciadores ao projeto.

No geral, acho que se não houver muitas chances de uma guerra religiosa, você deve padronizar o conjunto básico de ferramentas de desenvolvimento e plug-ins e garantir a conformidade da versão em seus scripts de construção (por exemplo, especificando explicitamente a versão Java) .I não pense que há muitos benefícios em armazenar o JDK e a instalação do Eclipse no controle de origem. Todo o resto que não seja um artefato derivado - incluindo seus arquivos de projeto, configuração e preferências de plug-in (particularmente formatador de código e regras de estilo) - deve entrar no controle de origem.

PS Se você usa o Maven, há um argumento para dizer que os arquivos .project e .classpath são artefatos derivados. Isso só é verdade se você gerá-los toda vez que fizer uma compilação, e se você nunca teve que ajustá-los manualmente (ou alterá-los inadvertidamente, alterando algumas preferências) após gerá-los a partir do POM

Vihung
fonte
6

Não, porque eu apenas os arquivos de controle de versão necessários para construir o software. Além disso, os desenvolvedores individuais podem ter suas próprias configurações específicas do projeto.

John Topley
fonte
5

Não, eu sou um usuário pesado do Maven e uso o Q para Eclipse frequente do plug-in que cria e mantém .project e .classpath atualizados. Para outras coisas, como configurações de plug-ins, geralmente mantenho um README ou uma página Wiki sobre isso.

Além disso, aqueles com quem trabalhei que preferem outros IDEs, apenas usam os plug-ins Maven para gerar os arquivos necessários para manter seu IDE (e eles próprios) felizes.

Andreas Holstenson
fonte
5

Isso tudo é opinião, eu suponho - mas as melhores práticas ao longo dos anos indicam que os arquivos específicos para um determinado IDE não devem ser armazenados no controle de origem, a menos que toda a sua organização seja padronizada em um IDE e você nunca tenha qualquer intenção de alternar.

De qualquer maneira, você definitivamente não quer as configurações do usuário armazenadas - e .project pode conter configurações que são realmente específicas do desenvolvedor.

Eu recomendo usar algo como Maven ou Ant como um sistema de construção padronizado. Qualquer desenvolvedor pode obter um classpath configurado em seu IDE em alguns segundos.

Kevin Day
fonte
1

Sim, exceto para a pasta .settings. A confirmação dos outros arquivos funciona bem para nós. Há uma questão semelhante aqui .

Jay R.
fonte
1

Embora eu geralmente concorde com a abordagem "não criar arquivos gerados por versão", temos problemas com ela e precisamos voltar.

Nota: Também estou interessado na resposta de VonC , particularmente sobre o ponto "faça o Eclipse funcionar em minutos". Mas não é decisivo para nós.

Nosso contexto é Eclipse + Maven, usando o plug-in m2eclipse. Temos um ambiente de desenvolvimento comum, com diretórios comuns, tanto quanto possível. Mas acontece às vezes que alguém tenta um plug-in, ou muda pequenas coisas na configuração, ou importa um segundo espaço de trabalho para um branch diferente ...

Nosso problema é que a geração do .project é feita ao importar um projeto no Eclipse, mas não é atualizado em todos os casos posteriormente . É triste e provavelmente não é permanente, pois o plug-in m2eclipse vai melhorar, mas é verdade agora. Então acabamos tendo configurações diferentes. O que tínhamos hoje era isso: várias naturezas foram adicionadas a muitos projetos em alguma máquina, que então se comportou de forma muito diferente :-(

A única solução que vemos é a versão do arquivo .project (para evitar riscos, faremos o mesmo para .classpath e .settings). Dessa forma, quando um desenvolvedor muda seu pom, os arquivos locais são atualizados usando m2eclipse, todos eles são comprometidos juntos e outros desenvolvedores verão todas as mudanças.

Nota: em nosso caso, usamos nomes de arquivo relativos, portanto, não temos problemas para compartilhar esses arquivos.

Então, para responder à sua pergunta, eu digo que sim, envie esses arquivos.


Eu também gostei:

KLE
fonte
"... muda seu pom usando m2eclipse ..."? O que m2eclipse tem a ver com o arquivo pom? Certamente ele usa, mas as mudanças no pom devem ser independentes do plugin.
RHSeeger
@RHSeeger Obrigado, vou melhorar a clareza nesta parte da minha resposta.
KLE
0

Parece que esses arquivos de projeto podem mudar com o tempo enquanto você trabalha em um projeto, então sim, eu os coloco sob controle de versão.

Dbrien
fonte
0

Sim. Tudo menos a saída de construção.

nitind
fonte
0

Usamos IntelliJ IDEA e mantemos versões '.sample' dos arquivos de projeto (.ipr) e módulo (.iml) sob controle de versão.

A coisa um pouco maior aqui é compartilhar e reutilizar que versionar, IMHO. Mas se você vai compartilhar essas configurações, não há melhor lugar para colocá-las do que no repositório, ao lado de todo o resto.

Algumas vantagens de arquivos de projeto compartilhados e com versão:

  • Você pode verificar qualquer tag / branch e começar a trabalhar nisso rapidamente
  • Torna mais fácil para um novo desenvolvedor configurar primeiro o ambiente de desenvolvimento e se atualizar
  • Este adere melhor ao DRY, que sempre é profundamente satisfatório. Antes disso, todos os desenvolvedores tinham que configurar essas coisas de vez em quando, essencialmente fazendo um trabalho repetido. É claro que cada um tinha suas pequenas maneiras de evitar a repetição, mas olhando para a equipe como um todo, havia muito esforço duplicado.

Observe que no IDEA esses arquivos contêm configurações como: quais são os diretórios "source" e "test source"; tudo sobre dependências externas (onde estão localizados os jars da biblioteca, bem como fontes relacionadas ou javadocs); opções de construção, etc. Isso é coisa que não não variar de desenvolvedor para desenvolvedor (não concordo com isso muito fortemente). IDEA armazena mais configurações pessoais do IDE em outro lugar, bem como quaisquer configurações de plug-in. (Não conheço o Eclipse muito bem; isso pode ou não ser bem diferente.)

Eu concordo com esta resposta que diz:

Você deve ser capaz de carregar um projeto em um espaço de trabalho e ter tudo o que você precisa para configurá-lo corretamente em seu IDE e começar em minutos. [...] Carregar, configurar, vai.

E nós temos assim, graças aos arquivos de projeto versionados.

Jonik
fonte