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

src / core

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?

questionAnswers(2)

yourAnswerToTheQuestion