L'intera confusione deriva dalla semantica diversa che MS usa per "Numero di build" e in particolare "Revision". I termini significano solo cose diverse.
La maggior parte delle persone (me compreso) usa uno schema di numerazione della versione semantica dove si ottiene un numero BUILD più alto ogni volta che si deve creare un nuovo build per qualunque ragione Per noi, un hotfix è considerato solo un altro cambiamento di codice e la parte BUILD aumenta automaticamente con ogni esecuzione di CI. I moduli con lo stesso MAJ.MIN.REV sono considerati intercambiabili e il BUILD ti dice quale è il più recente.
L'incremento della REVISIONE, tuttavia, indica un nuovo ramo di rilascio permanente, ecco perché lo posizioniamo prima di COSTRUIRE. Lo svantaggio di questo approccio è che potremmo ottenere la seguente sequenza di eventi:
- commit numero 4711: Alice ha aggiunto la funzione A
- CI produce build 1.2.3.100
- commit numero 4712: Bob ha modificato la funzione B
- commit numero 4713: Alice ha risolto la caratteristica A (la "correzione")
- CI produce build 1.2.3.101
Comepuoivedere,l'hotfixnonèl'unicamodificacontenutanellabuildsuccessiva,anchelamodificadiBobdiventapartediquellabuild.Sevuoistabilizzareilramoattuale,potrestiincorrereinproblemiperchénonpuoimaiesseresicurocheBobabbiaaggiuntoomenounsaccodibug.
MSutilizzaentrambiiterminiinmododiverso.IlnumeroBUILDnonvieneincrementatoautomaticamente,mapuòessereconsideratocomeunasortadiramodirilascio,perbloccareilcodiceutilizzatoperunaparticolareversionedelcodice.LaREVISIONEindicaulteriorimodifiche"hot" applicate a quel ramo BUILD. La sequenza sarebbe quindi la seguente:
- commit numero 4711: Alice ha aggiunto la funzione A a trunk / master
- Carl crea un ramo di build
1.2.100
- CI produce build 1.2.100.0
- commit numero 4712: Bob ha modificato la funzione B in trunk / master
- commit numero 4713: Alice ha risolto la caratteristica A nel ramo
1.2.100
- CI produce build 1.2.100.1
IltermineREVISIONEpuòriferirsia
- unaprodottorevisione(ècosìchelamaggiorpartedellagentelousa)
- unarevisionediunaparticolarebuildgiornaliera(questoèciòcheMSfa)
Ladifferenzachiavetraidueprocessiè,indipendentementedalfattosesidesideraomenolapossibilitàdiapplicareglihotfixallebuildCIequindi,aquelpuntodelprocesso,vienecreatoilramo.Questoaspettodiventaimportantequandosidesideraessereingradodiselezionareunaparticolarebuildinqualsiasimomentodopochetuttiitestsonoriuscitiepromuovereesattamentequellaversioneallasuccessivaversioneufficialedelprodotto.
NelnostrocasolostrumentoCIcreauntagdirepository,quindiabbiamosempreleinformazioninecessariepronteperl'uso,quandonecessario.ConSVNdiventaancorapiùsemplice,perchétageramivengonoimplementatiesattamentenellostessomodo:untagnonèaltrocheunramosituatosotto/tags
.
Vedianche
DallasezioneDomandefrequentisu Strategia di diramazione TFS :
In what branch should I fix the P1 (hotfix) ticket?
The P1 should be fixed in the branch that is closest to the code base running in Production. In this case the P1 should be fixed in the Prod branch. By applying the fix in any other branch and rolling out the changes to production you risk releasing semi-finished or untested code from the subsequent iterations.
Now you may argue if it is safe to work directly against the Prod branch, think again, a P1 that requires immediate attention should not be a fundamental problem in the system. In case it is a fundamental problem it should be added to the Product backlog as it may require further analysis and discussion with the customer.
Un'altra buona lettura è la guida alla ramificazione di TFS