Gerenciando várias versões de um aplicativo Web usando Git

12

Temos uma família de aplicativos, todos com a mesma base. Até agora, desenvolvi essa base e o fluxo de trabalho do Git era muito simples:

  • O desenvolvimento é feito na developfilial
  • Novos recursos são desenvolvidos na name-of-the-featurefilial
  • Lançamentos são feitos na release-**filial

Até agora, o código era o mesmo para todos os aplicativos da família. Digamos que a base que eles compartilham está concluída e a partir de agora o código será diferente para cada aplicativo.

Não tenho certeza de como devo lidar com o git e com vários aplicativos com a mesma base.

  • Cada um deles deve ter seu próprio projeto git ?
  • Eles deveriam estar no mesmo projeto, mas cada um em seu próprio ramo ?

O ponto é: se eu colocá-los em projetos separados, todas as modificações feitas na base do aplicativo precisarão ser repetidas em cada um deles. Eu não estou muito familiarizado com o git , mas se eu armazenar cada projeto em uma ramificação , será possível mesclar a modificação da base com cada aplicativo?

Alguém já passou por uma situação como essa? Não tenho certeza de como proceder.

Obrigado!

EDITADO Quando eu disse a versão , não quis dizer números de versão. Na verdade, são aplicativos diferentes que compartilham a mesma base.

João Daniel
fonte

Respostas:

7

Deixe o aplicativo base em seu próprio repositório e crie novos projetos que dependem do jar que você compila nesse repositório.

As ramificações Git não são para vários aplicativos. O Git prefere que você use um repositório para cada projeto ou uma família de projetos relacionada. As ramificações existem para que você possa desenvolver recursos isoladamente, não para criar um projeto totalmente novo sem sair do repositório.

Você não deseja ter vários aplicativos que compartilhem código - isso é um pesadelo de manutenção. Se, ao sugerir que você desenvolva cada um deles como uma filial em seu repositório central, haverá muita fusão para propagar as alterações em cada aplicativo. É muito mais fácil depender de uma única biblioteca separada e usar algo como o Apache Maven para obter dependências do projeto.

Michael K
fonte
Grande parte do código compartilhado é código GWT (visualizações, serviços etc.). É possível extraí-lo para uma biblioteca jar? Ou é apenas possível o código java do lado do servidor?
João Daniel
Os elementos de exibição podem ser extraídos, mas possivelmente não para um jarro. Por exemplo, o javascript pode ser extraído de todas as páginas em um único arquivo que pode ser incluído em cada projeto. O código comum JSP deve ser extraído para tags JSP. Você provavelmente não precisa puxar páginas inteiras, mas eu não conheço o seu projeto, então posso estar errado.
Michael K
o que você acha dessa abordagem: stackoverflow.com/a/2540471/2615737 ? parece razoável ...
Francisco Corrales Morales
Não acho que seja o mesmo caso de uso. Essa resposta lida com duas versões do mesmo aplicativo que são levemente diferentes, enquanto esta pergunta é sobre o que eu vejo como aplicativos completamente diferentes. Eu ainda preferiria não ter o ramo, mesmo no caso "um pouco diferente"; no entanto, é difícil considerar a funcionalidade para separar as bibliotecas no Android se houver algum XML de exibição envolvido. Parece que o atendente não achou que valesse a pena o problema para sua situação.
Michael K
6

Se os aplicativos não modificarem a base, considere deixar a base em seu próprio repositório. Em seguida, crie um novo repositório para cada um dos aplicativos individuais e adicione a base como um submódulo git .

jhenninger
fonte