2013-03-21 11 views
19

Utente di SVN così lungo, ma abbastanza inesperto in ramificazioni/tagging, e quando ho il sospetto, non lo sto davvero utilizzando correttamente o al massimo del suo potenziale.Strategia SVN utilizzando le diramazioni e fusione delle modifiche dal tronco al ramo

Ho il mio baule su cui lavoro aggiungendo nuove funzionalità, ecc. Questo codice è utilizzato in più siti Web, dove creiamo un ramo fuori dal tronco per progetto.

Ogni ramo di solito ha modifiche specifiche per quel progetto, e tutto ciò che pensiamo sarà riutilizzabile viene aggiunto al bagagliaio, e realizzato in modo che la funzione possa essere attivata e disattivata nei vari progetti.

Attualmente quando apportiamo modifiche al trunk e desideriamo tali modifiche in un ramo pre-datato, devo passare e fondere manualmente alcune revisioni nel ramo e riprenderle. Non ideale, e facile perdere cose.

Quindi, la mia domanda ... c'è un modo per aggiornare il mio ramo con TUTTE le modifiche dal trunk e gestirle come se si trattasse di un aggiornamento standard del trunk con conflitti?

Ho visto sul reinserimento del ramo sul tronco, ma a causa del modo in cui sto usando i rami in questo caso, questo non è davvero qualcosa che voglio fare.

+0

Usi svn dalla riga di comando o usi un gui come TortoiseSVN? –

+5

Quindi, sono stato un utente SVN praticamente da quando esiste. E sebbene tu possa combattere con SVN per farlo fare qualcosa di quello che vuoi, devo essere sincero: git è molto meglio in questo. È progettato attorno a ciò di cui stai parlando (ma pensa "ancora più rami"). Se vuoi fare un sacco di fusioni e tracce di branch, convertirò il tuo repository SVN in un repository git e andrò da lì. Sarai più felice (so che sono molto più fiducioso nel sapere che le mie patch sono applicate ovunque dopo aver convertito un progetto SVN di 10 anni per git) –

+0

Io uso una combinazione di smartsvn (probabilmente più questo) e riga di comando – Horse

risposta

22

Sì, è possibile. In sostanza, è necessario eseguire svn merge da una copia pulita di lavoro del vostro ramo (quello senza modifiche locali):

$ pwd 
/home/user/mybranch 
$ svn status # Does not display anything 
$ svn update # Make sure your local copy is up to date. 
Updating '.': 
At revision X. 
$ svn merge url/to/repository/trunk 
Updates, additions, deletions and conflicts. 
$ #handle conflicts. 
$ svn commit -m "Merging changes from the trunk". 

Vedi Keeping a Branch in Sync dal libro SVN.

La prima unione potrebbe introdurre molti conflitti, soprattutto se il ramo è stato biforcato molto tempo fa, ma le fusioni di quest'ultimo andranno senza intoppi, soprattutto se ci si confonde spesso.

+0

funziona perfettamente !! grazie – gnuyoga

+0

Ho fatto quello e dopo, quando ho provato ad aggiornare il tronco dal brach, tutte le nuove classi aggiornate dal camion erano in conflitto. Ho fatto qualcosa di male? O deve accadere in questo modo? – Sertage

Problemi correlati