2010-05-24 14 views
18

Abbiamo avuto un ramo SVN recentemente che è stato unito al trunk e sono necessari ulteriori lavori su quell'area funzionalità/funzionale. Ho suggerito di usare lo stesso ramo ma mi è stato detto che non dovresti riutilizzare un ramo una volta che è stato integrato nel tronco (è stato fornito un riferimento nei documenti SVN, non riesco a trovarlo ora). Questo suggerisce che un ramo è abbastanza inutile una volta che ci si unisce al tronco, quindi la mia domanda è una volta che un ramo non è più necessario, dovrebbe semplicemente essere eliminato o mantenuto?Cosa dovresti fare con i vecchi rami SVN?

risposta

17

Quando si integra un ramo, lo spostamento da branches/ a branches/integrated/. Mantiene pulito branches/ così facile da trovare il lavoro corrente, ma rende anche facile scavare vecchi rami per vedere quali modifiche sono state apportate senza dover fare un sacco di archeologia del numero di revisione.

+1

L'ho chiamato rami-cimitero. –

+1

Ho usato "attico". –

+2

Per divertirmi, uso anche il commento sul commit di 'Pruned old branches' –

1

Dopo un periodo di tempo in cui il progetto è terminato, elimino i vecchi rami.

È possibile riutilizzare i nomi delle filiali, ma perché? I nomi sono economici. Non chiamare il tuo ramo "lavoro" ma diventa più specifico come "data-conversion-phase-1".

+0

cosa succede se elimini un ramo e poi provi a crearne un altro con lo stesso nome? nel nostro caso ne avevamo uno con (pensavo) un nome specifico come "conversione dei dati", non sapendo che avremmo mai avuto una fase-2! –

+0

I rami (il vecchio che hai eliminato e quello nuovo che hai creato con lo stesso nome) sono distinti e non condividono la cronologia delle revisioni. Sono solo simili nel nome, ma potrebbero anche essere stati assegnati nomi distinti quando si ottiene lo stesso effetto. –

+0

È possibile riutilizzare i nomi dei rami. Cerco solo di non farlo. Nel tuo caso, farei la "conversione dei dati" e poi, quando ho scoperto che la seconda fase doveva accadere, rendila "data-conversion-phase-2". –

0

Mi raccomando contro l'eliminazione di vecchi rami a meno che non stiano causando problemi. In realtà non ti risparmia spazio e ti consente di guardare facilmente le vecchie versioni, se necessario.

Riutilizzare un ramo dopo che è stato unito a tronco è quasi certamente una cattiva idea.

+1

sì, riutilizzare un nome di ramo è come riutilizzare calze di ieri – shfx

5

SVN 1.5 ha introdotto la proprietà "mergeinfo", che consente di reinserire facilmente i rami sul trunk mentre supporta gli aggiornamenti ripetuti delle filiali. Ciò consente di creare un ramo, aggiornare periodicamente il ramo dal tronco e infine reintegrare il ramo nel tronco (svn merge --reintegrate). Questo è utile ad esempio quando crei un ramo per correggere un bug o per sviluppare una funzionalità.

Il modo in cui mergeinfo è implementato non consente di eseguire una reintegrazione successiva, quindi questo è il motivo per cui si consiglia di non riutilizzare il ramo.

Questo è problematico per "rami di rilascio" quando si desidera sviluppare le correzioni di bug sul ramo di rilascio e effettuare il reintegro periodico nel trunk.

Se si desidera riutilizzare un ramo, il solito schema è quello di creare una nuova copia (filiale) con lo stesso nome:

  1. eliminare il ramo
  2. commettere
  3. ricreare il ramo (ramificazione in un percorso con lo stesso nome)
  4. commettere
  5. lavori per la nuova filiale

Quando si "ricrea" il ramo, nel passaggio 3, mergeinfo viene ripristinato, quindi è possibile reinserirsi in futuro senza problemi.

Torna alla tua domanda: "quindi la mia domanda è una volta che una filiale non è più necessaria, dovrebbe semplicemente essere cancellata o conservata?" Manterrei il ramo, quindi sarebbe visibile nella revisione HEAD. La scomparsa dei rami è confusa ("hey, abbiamo creato un ramo per la release 0.1 la scorsa settimana?" "Hmm, non ricordo ... controlla la cronologia dei repository")

Per quanto riguarda il riutilizzo del ramo, vorrei utilizzare la convenzione per non riutilizzare mai un ramo e, se è necessario "aggiungerne qualcosa", ricrearlo. Ma a mio parere è molto più chiaro usare un nome di ramo diverso. Probabilmente puoi usare una convenzione di denominazione per identificare i rami. Ad esempio, l'originale sarebbe branch/Issue-1 e successivi rami di estensione/Issue-1.0, branches/Issue-1.1, ecc.

Riferimenti di mergeinfo.

http://blogs.open.collab.net/svn/2008/07/subversion-merg.html http://blogs.open.collab.net/svn/2009/11/where-did-that-mergeinfo-come-from.html

0

La buona pratica, mentre lo sviluppo di un grande progetto, è dare un nome alle filiali che utilizzano nomi delle attività di progetto strumento di monitoraggio: ad esempio "DEV-1512", "SERV-512", o bugtracker biglietti: "BUG-5142", ecc.

Quando l'attività è completata, attiva e in esecuzione sul server di produzione, rimuovere il ramo. Puoi sempre unire indietro.

PS. Imagine runung svn ls su $ repo/rami con 9999 rami;)

+0

Posso vedere completamente il vantaggio di includere il numero di tracciamento, ma avrei anche qualcosa di descrittivo. FEAT-132-image-blur-function, solo per evitare di dover cercare quei numeri per gli altri membri del team. –

4

From Wikipedia: "Una volta che un ramo è stato tagliato o in qualsiasi altro modo rimosso dalla sorgente, è più comunemente indicato come un bastone"

Quindi penso che dovresti creare una directory "bastoni" allo stesso livello dei rami

+1

+1 per intelligenza – Kyle