Nel mio lavoro abbiamo più prodotti .. prodotto A, prodotto B, ... questi prodotti fanno riferimento a più componenti. componenteA, componenteB .. ci sono anche componenti condivisi sharedA, sharedB ... etc .. che sono condivisi da più componenti, più prodotti o da un prodotto e un componente.
Al momento stiamo spostando tutte queste cose per separare i repository Git, tuttavia, abbiamo difficoltà a trovare un modo per configurare i repository in modo che tutto rimanga gestibile.
Abbiamo due problemi che rendono difficile l'impostazione dei repository.
-
Ci sono molte dipendenze. Quando voglio lavorare su ProductA ho bisogno di avere il codice sorgente per ProductA, componentA, componentB e sharedComponentC sul mio computer, dal momento che potrei cambiare il codice in tutti loro. Per ProductB ho bisogno di componentA, sharedComponentC e ... questo rende difficile scegliere cosa memorizzare in quale repository.
-
Dire componentA è una libreria di interfaccia, questa libreria di interfaccia è utilizzata da ProductA e ProductB. Per ProductA ha bisogno di funzionare normalmente, ma in ProductB è necessario mostrare un pulsante in più. Abbiamo molte di queste piccole differenze nei componenti dovremmo creare un ramo per prodotto e talvolta integrare i rami per assicurarci che abbiano le stesse nuove funzionalità? Forse svilupparsi su un ramo "generale" e spingere i cambiamenti in ogni ramo "piccola differenza"? È brutto avere un sacco di rami attivi in un progetto?
Esistono regole empiriche che aiutano a decidere come suddividere il software su più repository? Quali sono i buoni modi per lavorare su un software che si trova in più repository o strumenti che aiutano in questo senso? Qual è l'impostazione corretta del repository per i componenti con molte piccole differenze? Alla fine queste sono tutte la stessa domanda. Qual è una buona strategia di repository per più componenti interconnesse con piccole differenze?
Altre informazioni che potrebbero essere d'aiuto. Sviluppiamo esclusivamente su Windows, il 99% del codice che scriviamo è C #, l'altro 1% è C ++ / CLI. Tutti i nostri sviluppatori hanno accesso a Visual Studio 2013 Pro. Siamo disposti ad acquistare software per aiutarci con questo problema, ma siamo una piccola azienda, quindi non abbiamo budget infiniti:).
Naturalmente una parte dei problemi che stiamo avendo sono dovuti a (cattive) decisioni di progettazione in passato. (Nessuna decisione di progettazione può tutelare completamente contro lo sviluppo futuro del tuo software / azienda;)) Stiamo lavorando per cambiarlo. Ma per il momento vorremmo decidere una strategia di repository moderna che renda le cose un po 'più gestibili.