2012-02-07 24 views
7

Sto usando git-svn per funzionare contro il repository svn. Il layout è standard, e ho creato il repository locale con:Come sincronizzare le filiali remote con trunk usando git-svn

$ git svn clone -s http://mysvnrepo 
(master)$ 

ho bisogno di lavorare su un telecomando (SVN) branch - MyBranch, così ho creato una filiale locale per tenere traccia della distanza uno:

(master)$ git checkout -b localMyBranch remotes/MyBranch 
(localMyBranch)$ 

continuo a lavorare e impegnarsi per la sezione locale come vado, e di tanto in tanto mi dcommit:

(localMyBranch)$ git svn dcommit 

Nel frattempo altre persone stanno lavorando sul tronco, e di tanto in tanto mi voglio unire indietro i cambiamenti dal tronco al mio ramo per tenerli sincronizzati. È lì che mi sento davvero confuso, dato che non sono riuscito a trovare una buona informazione su come eseguirlo. Finora so che devo fare:

(localMyBranch)$ git svn dcommit 
(localMyBranch)$ git checkout master 
(master)$ git svn rebase 

E adesso? Ho letto che questo non è il modo giusto per andare:

(master)$ git checkout localMyBranch 
(localMyBranch)$ git rebase master 

come sta andando a rovinare le informazioni di unione per svn.

Quindi qual è il modo migliore per "rebase" il mio ramo svn remoto al trunk remoto, preservando le informazioni di unione per svn?

risposta

7

Si desidera creare un ramo di lavoro locale per gestire l'unione. La chiave è che è necessario un ramo che non stia monitorando attivamente un ramo svn remoto.

Prova questo:

(localMyBranch)$ git checkout -b merge_work 
(merge_work)$ git merge master 
(merge_work)$ git checkout localMyBranch 
(localMyBranch)$ git rebase merge_work 

e viceversa per fonde il contrario.

EDIT

Se si utilizza git-svn 1.7.7 o superiore, v'è una impostazione di dire git-svn per popolare la proprietà mergeinfo sul repository remoto di configurazione:

git config --global svn.pushmergeinfo true 
+0

Grazie. Conserverà le informazioni di fusione da svn POV? –

+0

Sì, se si configura git per farlo. Modificherò la risposta per includere il comando per farlo. –

+0

@ jordan002: Funziona davvero? Sono abituato a fare la risposta [this] (http://stackoverflow.com/a/4908930/158074), ma in questo modo sembra essere più semplice. Inoltre, la prima riga dovrebbe probabilmente essere 'git checkout -b merge_work', giusto? – rsenna