Ho diversi piccoli progetti eseguiti su hardware embedded diverso e circa il 50% del loro codice è identico (in genere alcuni driver, il loro sistema operativo e alcune librerie).
Voglio unire questi piccoli progetti in un singolo repository git in modo che diventi più semplice mantenerli centralmente, ad esempio per aggiornare un driver.
Tuttavia, quando si modifica il codice condiviso tra i diversi progetti, diciamo un driver, non voglio doverlo testare su ogni piattaforma hardware prima di passare al repository git. Non si ridimensiona affatto per testare il codice per un determinato progetto, devo testarlo su uno specifico hardware per progetto e, se necessario, correggere i bug specifici del progetto che potrebbero essere introdotti dalla modifica del codice condiviso. È molto meglio ritardare la verifica della modifica del codice condiviso su un dato progetto la prossima volta che voglio modificare questo progetto.
Al momento, ecco la soluzione con cui sono arrivato: la struttura della directory sarebbe come tale:
. |--shared_code |--projects |--projectA |--projectB |--projectC
Creerei un ramo git per progetto, che rappresenterebbe solo fino a quando il codice del commit è stato testato per un determinato progetto. Quindi, inserirò il codice solo nel ramo master e unirò il codice dal ramo master a un ramo del progetto una volta testato su questa piattaforma. In questo modo un ramo di progetto sarebbe sempre in uno stato stabile (testato). Il ramo principale sarebbe instabile per la maggior parte dei progetti.
git structure:
master | commits: 1 <-- 2 <-- 3 <-- 4 <-- 5 <-- 6 <-- 7 ^ ^ ^ | | | branches: A B C
È questo il modo corretto per risolvere questo problema? C'è una soluzione migliore?