Nota: ho visto molte altre domande sull'organizzazione del repository, ma non ne ho trovato nessuno con questo problema di dipendenza
Struttura corrente
Al momento abbiamo diverse distribuzioni (che devono rimanere come repository indipendenti - sono più o meno specifiche del client e non possono essere condivise), che hanno tutte un repository di librerie come modulo. Questo, a sua volta, dipende da qualche altro strato, sebbene questi strati inferiori siano piuttosto incastonati.
Questo è, approssimativamente, l'aspetto della struttura attuale ( Distro
è un elenco sempre crescente di distribuzioni):
Distro
+-Library Collection
+-Utility wrapper
+-Inner core
Il problema qui è il repository Library Collection
. Questo include alcune dozzine di librerie al momento, ma continua a crescere ad un ritmo accelerato. Di conseguenza, questo diventa ingombrante da mantenere e mi aspetto che Git inizi a sperimentare alcuni problemi di prestazioni nei prossimi anni.
Inoltre, la maggior parte delle distribuzioni include il codice che potrebbe dover finire in Library Collection
in futuro, sebbene sia difficile da prevedere e dipende in gran parte da fattori esterni.
Vorremmo trovare un modo per dividere Library Collection
in modo tale che ogni distribuzione possa scegliere e scegliere qualsiasi libreria individuale di cui ha bisogno, mantenendo l'organizzazione del progetto (principalmente CMake) abbastanza semplice. Idealmente, sarebbe simile a questo:
Distro
+-Lib A
+-Lib B
+-Utility wrapper
+-Inner core
Dipendenze
Nella struttura attuale, ogni repository dipende dal livello successivo (a volte, anche se raramente, da due livelli verso il basso); questo è il motivo per cui questa struttura del repository si è evoluta come è avvenuto.
Nella struttura ideale sopra, questo sistema di dipendenza nidificato si rompe. Lib A
e Lib B
entrambi dipendono da Utility Wrapper
, che ora è al loro livello. Non vogliamo rendere Utility Wrapper
un sottomodulo sia di Lib A
sia di Lib B
, perché questo porterà a molti dati ridondanti quando Distro
è clonata (per non parlare dei mal di testa durante il debug).
Inoltre, c'è una possibilità che Lib B
dipenda da Lib A
, anche se questo varia tra le librerie.
Pur facendo un primo tentativo di dividere le librerie, ho dovuto ricorrere al lavoro su singole librerie all'interno di un repository di distribuzione, quindi il livello Distro
potrebbe risolvere le dipendenze e comprendere le directory e il collegamento (usiamo CMake per tutti di questo, se cambia qualcosa).
Domanda
Qual è il modo migliore per organizzare questi repository, in modo che Lib A
possa essere sviluppato / testato indipendentemente da Distro
, anche se richiede Utility Wrapper
e, possibilmente, alcune altre librerie allo stesso livello?