Recentemente ho iniziato a mettere il mio codice sotto controllo di versione (in laboratorio sto lavorando, sotto SVN, e i miei codici in github (ovviamente con git)). Prima di usare il controllo della versione, facevo qualcosa del genere. Ho avuto una cartella con il nome della libreria, all'interno di molte cartelle con il numero di versione. Ogni volta che volevo iniziare a lavorare su una versione più recente, eseguivo una copia dell'ultima versione, cambia il nome nella nuova versione e inizio all'implementazione.
Questo tuttavia sembra ridondante quando la cartella viene messa sotto controllo di versione. A parte la ridondanza, se qualcuno vuole ottenere l'ultima versione, scaricherà tutte le versioni se solo import
s / clone
s.
Ora vedo molti modi per farlo con il controllo della versione, ma dal momento che sono nuovo, non so quale sarebbe più gestibile.
Metodo 1: utilizzo dei tag
Se ho capito i tag correttamente, avresti il tuo ramo principale, hai commesso qualsiasi cambiamento hai ottenuto e taggali con una versione. Quindi, quando vuoi ottenere una copia funzionante, ottieni quella con un determinato tag. (correggimi se sbaglio)
Metodo 2: versioni di ramificazione
In questo metodo, il ramo principale sarebbe il ramo di sviluppo. Ogni tanto viene creata una versione stabile (diciamo v1.2.0
), si crea un ramo per quella versione e non ci si impegna mai. In questo modo, se vuoi scaricare una certa versione, ottieni il codice da quel ramo. Sebbene abbia affermato che non ci si è mai impegnati, potrebbe essere possibile eseguire correzioni di bug e eseguire il commit sul ramo di una vecchia versione per mantenere in esecuzione la versione precedente. Ad esempio se la versione corrente è v2.0
, ma ci sono persone che vogliono usare v1.2
, puoi ottenere un altro ramo da v1.2
, ovvero v1.2.1
e commettere le correzioni di errori, o semplicemente mantenere la versione stessa come v1.2
e commetti solo le correzioni dei bug.
Quindi i rami dovrebbero assomigliare a questo:
v1.2.1 v1.2.2
/ /
v1.0.0 v1.2.0--------- v2.0.0
/ / /
-------------------------------------- dev
In questo modo hai filiali per ogni aggiornamento della versione secondaria. (Si noti che nel grafico sopra, v1.2.1 e v1.2.2 o creato dopo v2.0.0 è stato rilasciato, quindi non facevano parte dello sviluppo tra v1.2.0 e v2.0.0. Consideralo come supporto per le versioni precedenti)
Metodo 3: sviluppo ramificato
Questo metodo è l'opposto del precedente. Il ramo principale sarebbe l'ultima versione stabile. Ogni volta che stai lavorando su una nuova versione, crei un ramo (per lo sviluppo), lavori sul tuo codice e quando è stabile, uniscilo con il ramo principale.
In questo caso, i rami dovrebbero assomigliare a questo:
________ ____ ________________ _____ dev
/ \/ \/ \/
---------------------------------- latest_version
Probabilmente questo deve essere fatto insieme ai tag giusto?
La domanda!
Ad ogni modo, la mia domanda è che in base alla tua esperienza, quale di questi metodi si dimostra più pratico? C'è un metodo migliore conosciuto là fuori (che forse non ho capito io stesso)? Come sono comunemente fatte queste cose?