Estou chegando agora numa consultoria que desenvolve um sistema WEB. Ao longo do tempo, o sistema foi sendo customizado para n clientes e atualmente existem projetos separados para cada cliente. Estes projetos possuem as funcionalidades do projeto original, mais os acréscimos solicitados pelos clientes.
Um novo gerente assumiu o projeto e deseja fazer um “merge” dos fontes dos projetos, porém as customizações devem continuar disponíveis somente para os respectivos clientes que as solicitaram, ou seja, as funcionalidades do sistema do cliente X não deverão ser incluídas no sistema do cliente Y depois da unificação dos fontes.
Considerando que os fontes do projeto são arquivos java, jsps e xmls, qual a solução mais comum para casos como este ?
A idéia é ter um único projeto, com branch eu tenho a facilidade de fazer merge das customizações no projeto original mas continuo tendo n projetos, certo ?
Tentar integrar vários projetos através de VCS não vai ser muito agradável. A quantidade de conflitos a resolver tornará seu trabalho bem imrodutivo.
Creio que o melhor seja repensar sua arquitetura. Utilize um sistema mais modular, onde as modificações podem ser adicionadas e removidas sem muito problema. Veja como sistemas com OSGI e comportam, não que você precise de OSGi mas pelo menos vai ter uma boa idéia de como um sistema modular atua.
Concordo com o pensamento do Phillip. Acho que você tem que redesenhar a sua aplicação pra ter um core e as customizações seriam algo como plugins. Pense na arquitetura do Eclipse: você tem o core (eclipse) e vários plugins que você pode instalar pra que ele tenha as funcionalidades das quais precisa.