Sfondo:
Stiamo utilizzando una gestione agile del progetto e seguiamo gli sprint per lo sviluppo. Stiamo utilizzando un singolo repository in bitbucket.org che utilizza mercurial. Il repository ospita 3-4 prodotti. Ci sono molti progetti con 4 soluzioni per ogni prodotto. Ci sono alcuni progetti specifici per il prodotto e alcuni progetti condivisi.
Non possiamo fare cambiamenti nella struttura delle cartelle, visto che abbiamo già un server di team city che sta facendo build automatizzati che funzionano bene. Ma sono aperto se è davvero fondamentale per gestirlo.
Processo corrente
Il nostro processo attuale può essere descritto come segue:
- durante lo sviluppo, usiamo hgFlow start e finish features (develop branch)
- per le versioni, iniziamo i rilasci, li rendiamo stabili, finiamo i rilasci (il nuovo ramo di sviluppo da sviluppare)
- per hotfix iniziamo l'hotfix (una nuova hotfix dal ramo di rilascio) e la finiamo (si fondono per lo sviluppo e l'impostazione predefinita)
Problemi
Ecco alcuni dei problemi con questo processo:
- quando iniziamo il rilascio, ci sono altri 3 codici di prodotto che non sono pronti per essere rilasciati, è presente anche nel rilascio e al termine del rilascio, passa all'impostazione predefinita indesiderata.
- quando cambiamo progetti condivisi in fase di sviluppo, influisce sulle versioni aperte e dobbiamo correggerle
- quando cambiamo progetti condivisi in release, influisce sui prodotti precedentemente rilasciati
ci sono così tanti altri problemi tecnici che abbiamo scoperto e abbiamo immediatamente smesso di usare hgFlow, e proprio ora facendo la cartella manualmente diff per avviare / finire il rilascio e gli hotfix.
Alcune delle opzioni che ho pensato
- Crea un singolo repository per ospitare il codice sorgente di ciascun prodotto eccetto il prodotto condiviso
- Crea un singolo repository per ciascun progetto condiviso
- Mantenere separatamente HgFlow e tag ecc.
Questo è troppo lavoro, ad esempio, quando voglio iniziare il rilascio, devo andare al prodotto e ad ogni progetto condiviso interessato per iniziare una nuova versione. Lo stesso vale per lo sviluppo regolare, per una singola funzione, se voglio cambiare prodotto e progetto condiviso, devo creare funzionalità in tutti i progetti.
Come gestirlo meglio?
Aggiornamento - 9 feb 2016 I nostri prodotti sono basati su .net, stiamo usando bitbucket per l'hosting, il mercurial e l'albero dei sorgenti con HgFlow per le operazioni di sviluppo.