Esistono standard di settore o best practice su come gestire una base di codice in rapida evoluzione?
I tipi di applicazioni che sto sviluppando hanno sempre un aspetto personalizzato. Quindi ci sarà sempre del codice scritto che è specifico del cliente per ogni progetto.
Il metodo che stiamo usando ora è il seguente:
Diversi progetti "CORE" sono isolati l'uno dall'altro, ogni progetto principale è una libreria di classi che è in grado di funzionare da solo o con dipendenze da altri moduli core.
Tutti questi moduli core sono documentati (Sandcastle) e pacchetti NuGet creati per loro, che vengono offerti tramite un feed NuGet privato.
Quando un cliente acquista il software, creiamo un progetto specifico per il cliente che implementa il codice su misura che richiedono e carica i pacchetti NuGet dalle librerie principali, se necessario. La creazione di questo progetto è ciò che viene fornito al cliente e ogni progetto del cliente ha il proprio repository Git.
Questo ha funzionato bene per circa un anno, ma credo che aggiungendo funzionalità alle librerie di base il numero di pacchetti di nuget stia crescendo abbastanza rapidamente.
Esiste un metodo migliore per organizzare il codice, assicurandosi che non ci sia una versione separata dello stesso codice in giro?
So in questo post StackOverflow che afferma che:
Google manages to keep the source code of all its projects, over 2000, in a single code trunk containing hundreds of millions of code lines, with more than 5,000 developers accessing the same repository.
Ma questo sembra che ci crei problemi, a causa di dispiegamenti su misura.
Qualche idea o commento su ciò che sto facendo male?
Modifica
I problemi che prevedo di seguire con Google sono principalmente relativi alla gestione dei rilasci e alla creazione di problemi. Utilizziamo l'integrazione continua, in modo che ogni commit di una build venga attivato e il test venga eseguito automaticamente. Se usiamo un repository onnicomprensivo, non sono sicuro di quale sarà l'effetto sul build e sui server di test. Dovrà costruire ogni progetto dei clienti?
O ci sarebbe una filiale per cliente? In questo caso è meglio di un repo per cliente?