2012-04-19 16 views
16

Domanda breve: qual è l'equivalente git-svn di svn up -r r1130 da aggiornare solo a un commit numerato (con il numero svn)?Posso git svn rebase ad una certa revisione svn? (Simile a svn up -r ...)

Sto utilizzando git-svn in modo che sia possibile utilizzare git e gestire (molti) rami locali del repository svn del mio team. Ho una versione del software che hock up per lavorare con una particolare configurazione hardware. Da quando ci ho lavorato per l'ultima volta, il repository svn è passato oltre un punto stabile, ottimo per questo lavoro. Voglio aggiornare il ramo locale a una revisione numerata che rappresenta il commit stabile. Potrei farlo in SVN con svn up -r r1130, ma preferisco Git.

Continuo a dimenticare come ho fatto questo in passato e trovandomi a cercare SO e le pagine di aiuto cercando di trovare il modo migliore. Forse c'è un diverso Q & A che mi manca?

È abbastanza semplice controllare la revisione precedente su un albero pulito, ma quando sto trasportando i commit sulla cima dell'albero, la "testa di riavvolgimento per ripetere il lavoro su di esso ..." parte che Di solito amo significa che andrò ad un punto nell'albero prima che i miei cambiamenti venissero aggiunti!

Per ora, sto andando a git svn rebase e poi rebase in modo interattivo per escludere i commit che non voglio, ma ho difficoltà a credere che questo sia il migliore o anche un buon modo per farlo.

risposta

18

Preferisco rebase perché git-svn dovrà rebase le modifiche comunque prima di un dcommit. Prova a modificare:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b master_r1241   # Create a new brach matching it 
git checkout hwTesting     # Merge previously created changes 
git rebase master_r1241    # rebase on top of not quite up-to-date master branch 

Si potrebbe fare questo in un solo passaggio anche: (potrebbe sempre tornare utilizzando reflog o rebase --abort se le cose vanno terribilmente sbagliato).

git checkout hwTesting     # Checkout feature branch 
git rebase `git svn find-rev r1241` # rebase on top of not quite up-to-date master branch 
+0

Ho finalmente avuto la possibilità di provare questo e la versione in una sola fase di questo è esattamente quello che stavo cercando. Grazie! – sage

1

Non sembra esserci un modo per farlo in un solo passaggio. Tuttavia, è possibile trovare facilmente l'id di commit git corrispondente per un dato numero di revisione svn. Prova questo:

git svn find-rev rN 

dove N è il numero di revisione che si desidera. Successivamente, usa git checkout per verificare quel punto specifico nella cronologia.

+0

Questo è un comando utile che è generalmente utile, ma se mi trovo in un ramo che ha nuovi impegna e I 'git svn rebase' quel ramo, allora ripete i miei nuovi impegna in cima alla svn commit in questione. Il tuo comando controllerà il * svn commit * non modificato, cioè senza le mie modifiche confermate in cima. Forse potrei fare questo, quindi creare un nuovo ramo in quel punto e infine unire questo nuovo ramo nel mio ramo delle funzionalità? – sage

+0

Buon punto ... Penso che di solito tendo a git svn rebase solo sui rami di rilevamento ...in questo modo i miei rami di funzionalità sono intatti fino a quando non sono pronti per essere integrati con la linea principale. Ho preso la tua domanda per chiedere come aggiornare e POI passare a una revisione specifica nei nuovi commit. –

0

Lascerò questo come riferimento, poiché la risposta accettata lo menziona. Utilizza l'opzione di rebase a una sola riga, anche se ...


Ecco cosa sto facendo per ora. Questa volta Sto aggiornando da r1130 (indicato nella domanda) per r1241:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b hwTesting_r1241  # Create a new brach matching it 
git merge hwTesting_r1130    # Merge previously created changes 

Questo mi dà lo più quello che voglio, ma genera un altro ramo ogni volta che aggiorno. Sembra che ci dovrebbe essere un modo per dire a git di unire solo i commit su master fino a quello restituito da git svn find-rev r1241.