2011-09-27 12 views
109

Sono di fronte a un problema particolare con SVN merge. Voglio unire da un ramo dev al tronco. Abbiamo più rami di sviluppo che tagliano il tronco allo stesso tempo.Unione di un ramo nel tronco

sto fondendo uno di quei rami per tronco con questo comando:

svn merge trunk branch_1 

vedo cambiamenti che non fanno parte di questo ramo, ottenendo fuse in tronco. Cosa sto sbagliando?

SVN Versione:

Subversion client a riga di comando, la versione [email protected]

+6

So che questa non è una risposta, ma se si dispone di diversi rami attivi contemporaneamente, allora si sarebbe probabilmente meglio trasferito a mercuriale o git. Ps: Non sono un fanatico, ho lavorato con svn per ~ 7 anni ;-) – zerkms

+2

Che vantaggio offre? Perché passare a git o mercurial è una scelta migliore? –

+3

perché git e mercurial hanno * molto meglio * il supporto delle filiali. Vantaggi: non farai queste domande e avrai meno grattacapi sulla creazione e sul mantenimento dei rami (attualmente sto lavorando a un progetto con> 1000 rami, in svn è stato un inferno lavorare con loro) – zerkms

risposta

198

La sintassi svn merge è errata.

Si desidera checkout una copia di lavoro di trunk e quindi utilizzare l'opzione svn merge --reintegrate:

$ pwd 
/home/user/project-trunk 

$ svn update # (make sure the working copy is up to date) 
At revision <N>. 

$ svn merge --reintegrate ^/project/branches/branch_1 
--- Merging differences between repository URLs into '.': 
U foo.c 
U bar.c 
U . 

$ # build, test, verify, ... 

$ svn commit -m "Merge branch_1 back into trunk!" 
Sending  . 
Sending  foo.c 
Sending  bar.c 
Transmitting file data .. 
Committed revision <N+1>. 

Vedere la SVN book chapter on merging per maggiori dettagli.


Nota che, al momento è stato scritto, questa è stata la risposta giusta (ed è stato accettato), ma le cose si sono spostati su. Vedere la risposta di Topek, e http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate

+3

- l'opzione di reintegrazione non è obbligatoria, la diramazione (in 1.6) può essere unita con * qualsiasi destinazione * qualsiasi numero di volte –

+1

Davvero? Senza rischiare di rimandare gli stessi changeset? Potete fornire un link per corroborare le prove di questo per favore. – Neutrino

+0

'--reintegrate' non è obbligatorio ma consigliato in questo caso. Ho provato a farlo senza '--reintegrate' e ho finito con centinaia di conflitti. Con '--reintegrate', nessun conflitto e tutto è andato bene! – tibo

15

Eseguire un aggiornamento svn nel bagagliaio, prendere nota del numero di revisione.

dal tronco:

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName 

È possibile controllare in cui il ramo è stato tagliato dal tronco facendo una svn log

svn log --stop-on-copy 
+0

Dato che ci sono più rami di sviluppo che sono vivi allo stesso tempo, anche questo non funzionava per me, questo comando stava estraendo anche le modifiche da altri rami. Potrebbe essere questo un problema con il client SVN di SLik? –

+0

Anche se questo non è inaccurato, ci sono modi più semplici per unire le versioni più recenti di 'svn' (come ad esempio l'unico OP sta usando). – blahdiblah

58

Se i punti di directory di lavoro al tronco, allora si dovrebbe essere in grado di fondere il vostro ramo con:

svn merge https://HOST/repository/branches/branch_1 

essere sicuri di essere a emettere questo comando nella root directory del bagagliaio

+2

ha funzionato per me meglio di altre opzioni, grazie. –

+6

A partire da SVN 1.8. Questa è la risposta esatta. Vedi http://subversion.apache.org/docs/release-notes/1.8.html#auto- reintegrate – GreenAsJade

+2

Questo! Perché complicare le cose? BACIO. Molto semplice; quindi sintassi. – ahnbizcad

1

La sintassi è sbagliato, dovrebbe invece essere

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)> 
+0

Non funziona. – user1911

Problemi correlati