Domanda

SVN libro dice :

...Another way of thinking about this pattern is that your weekly sync of trunk to branch is analogous to running svn update in a working copy, while the final merge step is analogous to running svn commit from a working copy

Trovo che questo approccio molto poco pratico in grandi sviluppi, per diversi motivi, per lo più legati alla fase di reinserimento.

  1. Da SVN v1.5, la fusione è fatto rev-by-rev. Cherry-picking le aree da essere uniti noi causerebbe per risolvere i conflitti tronco-ramo due volte (una durante l'unione di revisioni tronco alla FB, e ancora una volta quando si unisce di nuovo).
  2. dimensioni Repository:. Modifiche del tronco potrebbe essere significativo per una grande base di codice, e copiare i file delle differenze (a differenza SVN copia) dal tronco altrove possono essere un grande carico di lavoro

Invece, facciamo quello che noi chiamiamo "ri-ramificazione". In questo caso, quando è necessario un pezzo significativo di modifiche del tronco, un nuovo ramo di caratteristica è aperta dal tronco corrente, e l'unione è sempre verso il basso (rami funzioni -> tronco -> rami stabili). Questo non va lungo le linee guida del libro SVN e gli sviluppatori lo vede come il dolore in più.

Come si fa a gestire questa situazione?

È stato utile?

Soluzione 2

Dopo la ricerca:

Dopo molte sessioni di brainstorming a visionmap, discussioni F2F tra cui Artyom, l'apertura di un caso libro SVN, ecc - sembra che questo non è possibile fare. Un ramo funzione non è del tutto come copia di lavoro. L'unico modo per aggiornare lavorare è ricreare un nuovo ramo, come descritto sopra.

Altri suggerimenti

  

Da SVN v1.5, la fusione è fatto rev-by-rev. Cherry-picking le aree da essere uniti noi causerebbe per risolvere i conflitti tronco-ramo due volte (uno durante l'unione di revisioni tronco alla FB, e ancora una volta quando si unisce di nuovo)

Poi si sta facendo qualcosa di sbagliato!

Vediamo:

trunk    fb
 ---------\
 r1-10    |
 r11-20   |
 r20-30   |

In generale, se si desidera che le modifiche fatte in 11-20, poi le migliori prassi è di fondere 1-20 a FB e ottenere tutto quello che c'è.

Poi, quando fb è fatto, si fondono 20-30 e quindi copia fb al tronco (senza merge!).

Se si decide di unire solo r11: 20, ok, alla fine avrete bisogno di unire r1: 10 e r20: 30 e quindi copia fb al tronco.

Non c'è modo di unire i cambiamenti due volte!

presumo che probabilmente si fa seguenti:

copy trunk->fb
merge 11:20 -> fb.
merge fb-1:30 -> trunk !!!!! WRONG

Non si può fare questo perché si dovrebbe unire 11:20 due volte. Si dovrebbe sempre fondersi codice una sola direzione.

maniera corretta:

copy trunk->fb
merge 1:20 -> fb.
merge 21:30 -> fb (now fb=trunk+feature)
copy fb -> trunk

Modifica

Così i passaggi corretti sono:

  1. Create ramo della funzione (FB) dal tronco (tronco copia per caratterizzare ramo con svn-copy)

    FB_0=trunk_0
    
  2. Il lavoro su FB.

    FB_1=FB_0 + change_a
    
  3. Unisci tutte le diffusioni a modifiche dal tronco di FB.

    trunk_1=trunk_0 + tr_change_a;
    FB_2 = FB_1 + (trunk_1 - trunk_0) == trunk_0 + change_a + tr_change_a
    
  4. Il lavoro su FB

    FB_3 = FB_2 + change_b
    
  5. Unisci tutte le diffusioni a modifiche non unite dal tronco a FB.

    trunk_2=trunk_1 + tr_change_n;
    FB_4 = FB_3 + (trunk_2 - trunk_1) == trunk_0 + change_a + change_b + tr_change_a + tr_change_b
    
  6. A questo punto abbiamo un ramo di caratteristica che consiste di tutti le nuove caratteristiche e tutti i cambiamenti in tronco. Così abbiamo appena copiare la differenza tra due rami.

    trunk_3 = trunk_2 + (FB_4 - trunk_2) = FB_4 = trunk_0 + change_a + change_b + tr_change_a + tr_change_b
    

    Ora FB cancellato come tronco ha tutte le modifiche di cui abbiamo bisogno.

    L'ultimo passo è eseguito da:

    svn merge /path/to/trunk@LatestRev /path/to/branches/fb@LatestRev .
    svn ci
    

    O in ordinaria differenza di lingua prendere tra il tronco e ramo e metterli a tronco rendendoli equivalenti.

Questo modello è descritto in http://svnbook.red-bean.com/en/1.4/svn.branchmerge.commonuses.html#svn.branchmerge.commonuses.patterns.feature

Ora, se questo non funziona per voi, allora non capisco la domanda.

Edit2: Per svn-1.5

Quando si lavora con svn-1.5 è possibile unire più semplice:

Quando si lavora sul ramo funzione basta unire le modifiche di volta in volta il tronco:

$ svn merge /path/to/trunk
Solve conflicts
$ svn ci

Sarà allineare il vostro FB con tutti i cambiamenti in tronco. Alla fine di FB si esegue questa procedura ancora una volta per assicurarsi che tutto è up-to date. La si va al tronco ed eseguire

$ svn merge --reintegrate /path/to/fb
$ svn ci

In ultimo non ci dovrebbero essere conflitti se si sta lavorando, come indicato.

Siamo una piccola azienda, quindi non sa se la nostra soluzione si applica alla vostra situazione. Quello che facciamo è una fusione rev-by-rev dal tronco al ramo stabile. Possiamo farlo in 2 modi diversi: - correzione realmente necessario, ci si fondono solo dopo aver commesso al tronco - Pericoloso correzione / modifica. Aspettiamo qualche giorno fino a quando il cambiamento è reso impermeabile in tronco e poi uniamo

Con questa fusione continuo abbiamo evitare tonnellate di conflitti.

I miei 2 centesimi.

Purtroppo tutto ciò di cui può essere pensato come hack. Aggiornamento da tronco su un ramo può portare a problemi molto seri quando riportandolo in tronco e apre la possibilità per il peggiore di tutti i conflitti, conflitti albero. Questo perché le directory non sono trattati come cittadini di prima classe. L'approccio migliore è quello di utilizzare Mercurial con la SVN estensione come il vostro client standard SVN. Esso consente di continuare a utilizzare SVN mentre ottenere il potere di gestione della cartella di Mercurial.

Poi sul lato wworkstation è possibile utilizzare un certo numero di approcci che fornisce una gamma di funzioni per soddisfare molte situazioni più sola di SVN. È possibile utilizzare l'applicazione di patch regolari, le code di patch, l'aggiornamento da una copia locale del tronco senza influenzare il tronco comune e vari altri approcci.

Questo approccio funziona intorno a tutti i lati downn di SVN. Ho dovuto passare tto a questo approccio a causa di circostanze simili. Anche se non si utilizza questo approccio immediatamente si dovrebbe almeno fare un tentativo al più presto.

Credo di avere a prendere le difese per @Artyom qui. Anch'io penso che se si deve

  

risolvere i conflitti tronco-ramo due volte

qualcosa non va. E penso che @Artyoms argomento / soluzione è abbastanza solida.

Credo che una delle cose minori @Artyom potuto scrivere più chiaro è che, alla fine, in cui si fb "copia" per trunk non si usa svn copy ma svn merge (o svn merge --reintegrate). Questo potrebbe essere il motivo per cui non si trova il modello di "copia-merge" in Patterns Branching comuni .

Come sto lottando con la comprensione che cosa state facendo fino ad ora, non sono sicuro che altro dire.

Ecco quello che ho sentito dire:

  

Invece, facciamo quello che noi chiamiamo   "Ri-ramificazione". In questo caso, quando un   significativo pezzo di modifiche del tronco è   necessario, un nuovo ramo di caratteristica è aperto   dal tronco corrente, ...

Ora avete una nuova filiale (chiamiamolo b2), che è equivalente al tronco, giusto? E , dove è il "pezzo significativo di modifiche del tronco bisogno"? Presumo in fb?

  

... e l'unione è   sempre verso il basso (Rami di funzione ->   tronco -.> rami stabili)

Ma, come avete appena creato b2 dal tronco non c'è nulla da fondersi in tronco, no? E non si uniscono le modifiche da B2 a fb o (come questo sarebbe lo stesso che la fusione tronco a FB ...). Quindi, come fare il "significativi pezzi di cambiamenti" entrare in fb? E una volta che sono lì, perché si desidera unire di nuovo al tronco (poiché questo è da dove sono venuti in primo luogo)?

In realtà i seguenti link la sezione chiamata“Monitoraggio Unisce manualmente " e / o di la sezione chiamata“Fusione di un ramo intero ad un altro " fornite nella documentazione di 1.4 SVN (lo so, non si utilizza SVN 1.4 ma credo che si applica in ogni caso) sotto Comune Branching Patterns potrebbe aiutare a chiarire alcune cose. Questi collegamenti sono "scomparsi" nella documentazione di 1.5 (probabilmente a causa della nuova opzione --reintegrate in merge).

È davvero sembra di essere la fusione delle stesse modifiche due volte e ho davvero che non si dovrebbe (necessità di) farlo.

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