2009-04-22 9 views
5

Ho iniziato a usare il bazar dopo un lungo campeggio nel campo svn. Ho avuto anche esperienze precedenti con cvs e ho usato tag occasionalmente.Qual è il punto di tag nel bazar?

Con svn, una volta rilasciata una versione, si esegue una copia svn del trunk in tag, ad esempio svn copy trunk tag/1.2.0. Nel bazar ho creato la stessa struttura del repository, ma l'assenza di un'opzione di copia bzr e la presenza del tag bzr mi hanno fatto riflettere.

Il fatto è che trovo i tag difficili da usare o inutili. Se uso i tag, fondamentalmente ho il mio trunk come unica directory e quando raggiungo un traguardo, lo taggano. Continuo quindi a sviluppare e taggare nuovamente quando viene raggiunto un nuovo traguardo. Questo complica le seguenti attività:

  • confrontando una nuova versione contro una vecchia versione in modo ricorsivo (con la svn simile approccio: diff --brief -r)
  • fix dei bug una vecchia versione, e creare nuova versione con la sua patchversion è aumentato (con l'approccio svn-like: svn copia 2.0.0 2.0.1, quindi aggiungi la correzione alla 2.0.1 e la commit)
  • ottenendo la versione desiderata senza doverla controllare (se si controlla l'intero albero in svn-like, hai tutte le versioni e rami, e lo fai solo una volta)

Di conseguenza, uso la stessa struttura di svn repo in bzr e eseguo una copia fisica del trunk ogni volta. Ciò significa che non vedo alcun reale utilizzo del comando di tag bzr in questo accordo. perché dovrei taggare l'intera revisione del repository con un numero di versione, se ne contiene tutti per ogni revisione?

Qualcuno potrebbe indicarmi cosa sto facendo male nell'utilizzare e capire i tag per un repo bzr?


Modifica

Quindi, per quanto vedo il concetto è quello di avere diversi rami bzr (rami indipendenti, provenienti dal tronco tramite ramo bzr) per ogni release. È come svn, solo che non inserisci la directory root nel repository. Io ancora non vedo un motivo particolare per i tag, a parte il fatto che, se si dispone di dire foo-1.0.0 foo-1.0.1 foo-2.0.0 foo-2.1.0 tronco

e presumendo di aver sempre taggato i rilasci prima della ramificazione, il trunk avrà i tag per tutti loro, mentre foo-2.0.0 avrà foo-1.0.0 tra i suoi tag, ma non foo-1.0.1 perché è derivato da foo-1.0.0.

Ancora non vedo la necessità di avere e utilizzare i tag. Il mio tag è implicito nel nome della directory che ho scelto per quel ramo. Non mi interessa davvero un particolare numero di versione, mi interessa solo che si trovi in ​​una directory specifica.

risposta

12

Cosa sono i tag in bzr?

I tag sono solo una maniglia facile da ricordare per una revisione particolare. Piuttosto che tentare di ricordare [email protected], o revno 19721, è possibile fare riferimento al vostro tag:

bzr export -r tag:foo-1.0.0.0 release-foo-1.0.0.0.tar.gz trunk/ 

Come potrei gestire le emissioni nella bzr?

Sembra come se si sta trattando i vostri comunicati come linee separate di sviluppo (aka: rami), quindi vi consiglio di codifica vostro tronco, in modo da sapere dove germogliò da e la creazione di rami di rilascio separati:

bzr tag -r 1234 -d trunk/ foo-1.0.0.0 
bzr branch -r 1234 trunk/ release-1.x 

Quando fate le vostre correzioni per le versioni 1.x, li fanno nel ramo di release-1.x, codifica ogni punto di rilascio:

bzr tag -r 1255 -d release-1.x/ foo-1.0.0.1 
bzr export -r tag:foo-1.0.0.1 release-foo-1.0.0.1.tar.gz release-1.x/ 

vostra struttura di directory potrebbe essere simile a questo:

fooproj/ 
    release-1.x/ 
    release-2.x/ 
    trunk/ 
+0

Sì, ma non vedo alcun senso facilmente ricordare una revisione specifica, se non ho motivo di averne bisogno. le revisioni sono incrementali, ma l'unico fatto particolare che hanno è che sono ordinate in tempo. Ordinare in rilascio è diverso, dato che posso rilasciare 2.0.1 dopo che 3.0.0 è uscito. –

+0

I tuoi tag sembrano quasi GUID. :) – Luke

+0

Sì, hanno freddo solo 1.0, 2.0, ecc. Sono stato portato via con segmenti di versione significativi, e mi piace usare foo ogni volta che ne ho la possibilità, così l'ho buttato dentro;; o) – vezult

8

Bene, in pratica, non si dovrebbe provare a copiare la struttura della directory SVN. Non ho idea del perché SVN sia così, ma fondamentalmente i tag sono solo un marker in un punto nel tempo nel tuo repository bzr. Quando si desidera diff contro un tag, può essere fatto come

bzr diff -r tag:TAG_NAME 

Così ogni volta che si sta facendo un comunicato, solo tag e essere sulla buona strada. Niente di speciale come spostare qualcosa in una cartella specifica o altro.

Si consiglia di iniziare a utilizzare rami separati anziché tag per le cose a cui si desidera tornare, ad esempio la riga 2.0.x del codice, in modo da avere un ramo per 2.0.x e quindi tag come 2.0.0 e 2.0.1 in esso.

Inoltre, controllare http://bazaar-vcs.org/Specs/Tagging

1

Le etichette in svn sono più simili a rami svn. Hai descritto il flusso di lavoro che ha mappato bene ai rami bzr. Tag permette di avere un ramo con puntatori alle vostre uscite, quindi chiunque può ottenere esattamente rilasciato la versione da tronco:

bzr tronco ramo foo-1.0 -r tag: 1.0