Domanda

Quando ho iniziato a utilizzare sistemi di controllo di revisione come CVS E SVN, non ho capito bene i concetti di "tronco", ramificazione, fusione e tagging.Ora sto iniziando a comprendere questi concetti e a cogliere davvero l'importanza e il potere che stanno dietro ad essi.

Quindi sto iniziando a farlo correttamente.O almeno così penso...Questo è quello che ho capito finora:L'ultima versione rilasciata/stabile del tuo codice dovrebbe trovarsi in /trunk/ mentre le versioni beta o le versioni all'avanguardia si trovano nella directory /branches/ come directory diverse per ogni versione beta e quindi unite nel trunk al momento del rilascio.

È questa una visione troppo semplicistica delle cose?Quali layout di repository consigliate?Se fa la differenza, sto usando Subversion.

È stato utile?

Soluzione

Vedi queste due domande su SO per ulteriori informazioni:

Altri suggerimenti

Quello che faccio e che normalmente vedo come standard è:

Il trunk dovrebbe contenere la tua linea di sviluppo principale, la tua versione instabile.Dovresti creare rami di rilascio per le tue versioni.

Qualcosa di simile a:

/trunk (qui stai sviluppando versione 2.0) /branches/rb-1.0 (questo è il ramo di rilascio per 1.0) /branches/rb-1.5

Quando trovi un bug nella 1.5, lo risolvi nel ramo RB e poi uniscilo al trunk.

Lo consiglio anche questo libro.

Eric ha un'eccellente serie di articoli sull'uso del controllo del codice sorgente e sulle migliori pratiche organizzative.Il capitolo 7 tratta delle filiali (e sì, consiglia le directory /trunk/ e /branches/ suggerite).

Utilizzo Perforce da molto tempo e quindi i miei commenti potrebbero essere un po' incentrati su Perforce, ma i principi di base si applicano a qualsiasi software SCM che abbia una ramificazione decente.Sono un convinto sostenitore dell'utilizzo di pratiche di sviluppo ramificate.Ho un "main" (noto anche come "mainline") che rappresenta la base di codice da ora all'eternità.L'obiettivo è che questo sia, per la maggior parte del tempo, stabile e, se la situazione diventasse critica, potresti tagliare una versione in qualsiasi momento che rifletta l'attuale funzionalità del sistema.Quei fastidiosi venditori continuano a chiedere...

Gli sviluppi avvengono nei rami ramificati da MAIN (normalmente, occasionalmente potresti voler diramare da un ramo dev esistente).Integra da MAIN ai tuoi rami di sviluppo il più spesso possibile, per evitare che le cose divergano troppo, oppure puoi semplicemente preventivare un periodo di integrazione più lungo in un secondo momento.Integra la tua nuova funzionalità in MAIN solo quando sei sicuro che uscirà in una prossima versione.

Infine, hai una linea RELEASE, che offre l'opzione di rami diversi per versioni diverse.Sono disponibili alcune scelte a seconda delle capacità di etichettatura del software SCM e di quanto potrebbero essere diverse le revisioni principali/minori.Quindi potresti optare, ad esempio, per un ramo di rilascio per ogni rilascio minore, o solo per il numero di rev principale.Il tuo chilometraggio può variare.

Generalmente, dirama da MAIN per rilasciare il più tardi possibile.Le correzioni di bug e le modifiche dell'ultimo minuto possono andare direttamente in RELEASE per una successiva integrazione in MAIN, o in MAIN per un'integrazione immediata.Non esiste una regola fissa: fai ciò che funziona meglio.Se, tuttavia, sono presenti modifiche che possono essere inviate a MAIN (ad es.da un ramo dev, o "piccole modifiche" da parte di qualcuno su MAIN), quindi eseguire la prima soluzione.Dipende da come lavora il tuo team, quali sono i cicli di rilascio, ecc.

Per esempio.Avrei qualcosa del genere:

//MYPROJECT/MAIN/... - the top level folder for a complete build of all the product in main.
//MYPROJECT/DEV/ArseKickingFeature/... - a branch from MAIN where developers work.
//MYPROJECT/RELEASE/1.0/...
//MYPROJECT/RELEASE/2.0/...

Un progetto non banale avrà probabilmente più rami DEV attivi contemporaneamente.Quando uno sviluppo è stato integrato in MAIN in modo che ora diventi parte del progetto principale, elimina il vecchio ramo DEV il prima possibile.Molti ingegneri tratteranno un ramo DEV come il proprio spazio personale e lo riutilizzeranno per funzionalità diverse nel tempo.Scoraggia questo.

Se, dopo il rilascio, devi correggere un bug, fallo nel ramo di rilascio corrispondente.Se il bug è stato precedentemente corretto in MAIN, integralo in MAIN, a meno che il codice non sia cambiato così tanto in MAIN, la correzione è diversa.

Ciò che differenzia realmente le linee di codice sono le politiche utilizzate per gestirle.Ad esempio, quali test vengono eseguiti, chi esamina prima/dopo una modifica, quale azione viene eseguita se una build si interrompe.In genere le politiche, e quindi i costi generali, sono più forti nei rami di rilascio e più deboli in DEV.C'è un articolo Qui che attraversa alcuni scenari e si collega ad altre cose utili.

Infine, consiglio di iniziare con una struttura semplice e di introdurre solo quelli di sviluppo e rilascio aggiuntivi secondo necessità.

Spero che questo aiuti e che non sia troppo ovvio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top