Sono un appaltatore che ha recentemente iniziato con una ditta.
Il team è composto da 3 sviluppatori di 2 sviluppatori di livello junior e mid level, con un altro allo stesso livello a partire presto, e io stesso (6 anni xp). Per entrambi gli sviluppatori esistenti è il loro primo lavoro fuori dall'università / college, e non hanno mai avuto uno sviluppatore esperto che supervisionava il loro lavoro prima.
Non esiste una politica di controllo della versione esplicita. Gli sviluppatori eseguono tutto lo sviluppo sul trunk e quindi si distribuiscono alla produzione direttamente dalle loro macchine di sviluppo. Il team esistente non ha familiarità con la ramificazione.
Sto cambiando tutto questo e introducendo CI, TDD test / staging / server di produzione, ecc. insieme a un criterio di controllo della versione per complimentarmi con questo.
Il sistema di controllo del codice sorgente è TFS, che non ho mai usato prima. È configurato come un repository gigante.
Ho scritto alcune indicazioni per loro, ma c'è qualcos'altro che dovrei aggiungere / modificare, tenendo presente l'esperienza del team?
Version Control Policy
Development is done on the trunk
If a change is estimated to take more than a week then it should be done on a branch, with regular merges from the trunk into the branch to stop the two going out of sync.
Release branches created for production code. That branch should only contain stable code. We can either have one release branch that gets updated from the trunk once per sprint, or we can make a separate release branch for each week.
If a urgent bug fix affecting production code needs to be made, then it gets made on the release branch, and merged back into the trunk.
If we adopt the one release branch strategy then the trunk gets merged into the release branch once per sprint towards the end of the sprint.
If we adopt the seperate branch per release strategy, then the trunk NEVER gets merged into the Release branch
In some scenarios it may be necessary to make the bug fix twice on different branches, if branches have diverged too much. If we are doing short sprints then this shouldn’t happen too often.
Ho in programma di avere tre server. Ambiente di test che esegue sempre il codice più recente nel repository. Un ambiente di gestione temporanea che sta eseguendo la versione più recente candidata per la staging / testing del codice Release Candidate e le finalità UAT e l'ambiente di produzione.
Il motivo per cui ho intenzione di fare questo è che finora il client ha fatto solo un software interno. Il nuovo progetto è per un cliente multimediale di alto profilo e la mia sensazione è che il team abbia bisogno di adottare un modello di sviluppo più professionale rispetto a quello che fanno al momento.
Per esempio al momento, un utente può telefonare al team con una segnalazione di bug. Gli sviluppatori individuano e risolvono il bug, eseguono un test rapido per il test del bulbo oculare sulle proprie macchine e quindi si avviano direttamente alla produzione. Nessun test automatico o altro.
Con il senno di poi penso che il ramo della funzione sia un passo troppo lontano e lo rimuoverò.
Quindi essenzialmente si tratta di a) nessuna ramificazione) b) un ramo di rilascio e il tronco, e c) un ramo di rilascio per rilascio e il tronco.
Ero inclinato verso quest'ultimo. Il mio pensiero iniziale sarebbe che avrei sia un release candidate che un rilascio per essere pubblicati su server separati (UAT / Produzione) allo stesso tempo, ma in realtà il trunk è il candidato al rilascio in qualsiasi momento, quindi un ramo per il rilascio è incline al pazzo. Il mio unico pensiero sarebbe se non volessimo che i nostri stakeholder vedessero il codice di sviluppo, quindi potremmo aver bisogno di un ramo di rilascio separato, ma YAGNI e tutto questo .....