Como organizar código / ativos compartilhados entre projetos com repositórios git
Eu tenho um cenário em que o projeto base consiste em código java e arquivos de sites (jsp / html / javascript, modelos, css, imagens etc.).
As variantes deste projeto base são criadas pelos seguintes motivos:
a) etiqueta branca + personalização
b) Um novo projeto baseado neste projeto, mas com recursos adicionais (em arquivos java e web)
Projeto base
Java
rede
modelos
css
javascript
imagens
Projeto A (baseado na base)
Java
src / core
pastas específicas src / projectA
rede
modelos
css
javascript
imagens
pastas específicas do projeto
Projeto B (baseado na base)
Java
src / core
pastas específicas do src / projectB
rede
modelos
css
javascript
imagens
pastas específicas do projetoB
Restrições importantes
a) Tanto projectA quanto projectB compartilham bastante código do projeto base
b) Além de ter seus próprios arquivos e código, o ProjectA e o ProjectB podem adicionar, modificar ou excluir arquivos em pastas da web / modelos, web / css, web / imagem - para personalização e etiqueta branca
c) Mais projetos como projectA e projectB poderão ser criados no futuro
d) Quando o projeto base é alterado, deve ser possível ter as alterações refletidas nos subprojetos
e) Ocasionalmente, as alterações feitas no projeto A / projeto B em arquivos comuns devem ser dobradas novamente no projeto base.
Inicialmente, pensei que terei um repositório git separado para o projeto base e cada um do Projeto A, B etc. Mas, tendo especialmente em mente as restrições acima, parece-me que as abordagens da subárvore ou do submódulo do git não funcionam (por limitações óbvias)
Portanto, estou tendendo a ter um único repositório e usando a abordagem de "ramificação", em que projeto A e projeto B serão ramificações e a base será o "mestre". Quão bem a restrição (e) funciona nessa abordagem?
Existem maneiras melhores de gerenciar isso no git?