Ho impostato un repository SVN in questo modo:
- tronco
- rami
- SVS
- QA
- DevelopmentTeam
- programmer1
- projectA
- ProjectB
- programmer2
- projectC
- projectD
- programmer3
- PROJECTE
- projectF
- projectG
- projectH
Ogni programmatore può avere più progetti che sono rami e possono essere uniti al loro ramo "programmatore".
Tutti i rami dei programmatori vengono uniti al ramo DevelopmentTeam
dal Manager, dove le modifiche vengono testate con i progetti di altri programmatori.
Una volta completato il test, il ramo DevelopmentTeam
viene unito al ramo QA
, dove viene eseguito il test QA
.
Una volta completato il test QA
, il ramo QA
viene unito al ramo UAT
, dove viene eseguito UAT
.
Una volta che UAT
è completo, le modifiche vengono unite a trunk
.
Ora, diciamo che ho un programmatore che lavora su due rami di progetto. Li completano nello stesso giorno e ciascuno viene unito al ramo DevelopmentTeam
, quindi QA
, quindi UAT
. Tuttavia, durante l'UAT, si scopre che sono necessarie alcune modifiche. Quindi il programmatore torna al suo ramo di progetto, apporta le modifiche, commette, quindi ricomincia la fusione della linea. Il problema è che i nuovi "conflitti" devono essere gestiti ad ogni unione.
Ho usato SVN per diversi anni, quindi capisco branching, tag, merging, commit, ecc. Ma, penso di aver bisogno di una lezione di "organizzazione" (per mancanza di un termine migliore).
Gli sviluppatori di note funzionano in rami separati invece che in trunk condivisi (ovvero "unstable") perché sto provando a configurare un sistema in cui il trunk esista come codice di "produzione" base. Qualunque cosa nel bagagliaio è considerata "live". Quindi i rami Dev, QA e UAT sono per ogni livello di test (il QA è il sito Web QA, l'UAT è il sito Web UAT).