2012-03-21 10 views
8

Ho appena scoperto che anche se la sezione rebase in git help svn diceCome eseguire svn fetch + rebase in un'unica operazione?

Questo recupera revisioni dal genitore SVN della testa corrente e rebases la corrente (non impegnati a SVN) lavorare contro di esso.

(il corsivo è mio) che non significa che rebaseinclude un git svn fetch. A parte il nome, c'è un modo per eseguire un comando singolo git svn per fare entrambi i?

Il motivo che voglio fare questo è che ho solo di scrittura su un ramo, quindi voglio rebase quello e ho spesso letto altri rami, quindi voglio fetch quelli.

+0

Non ho esperienza con 'git svn' ma l'ordinario' git pull' può essere configurato per usare 'rebase' invece di' merge' e in questo modo entrambi i passaggi si desidera. Pubblicherei una risposta se sapessi come farlo con 'git svn' - basta cercare un equivalente di' git config branch.autosetuprebase always'. –

+0

Significa. Prova. In primo luogo si recupera e poi si ribalta. –

+2

No, non lo è. 'git svn rebase' fa * not * preleva nuovi rami dal telecomando, mentre' git svn fetch' fa. L'ho appena provato – l0b0

risposta

8

Sono anche un po 'sorpreso di sentire che questo è in realtà il modo in cui si comporta. Ma, per rispondere alla tua domanda, è sufficiente definire un alias:

git config --global alias.refetch '!git svn fetch && git svn rebase'

Poi git refetch dovrebbe fare quello che vuoi.

+0

Abbastanza giusto; sembra che non ci sia un modo standard per farlo. – l0b0

+0

perché sulla Terra vuoi recuperare tutti i reposli svn solo per rebase uno solo? –

+0

@ l0b0: Non esiste un modo standard per farlo perché non è un modo standard di usare 'git svn'. 'git svn rebase' è progettato per ottenere il tuo ramo corrente fino al suggerimento di Subversion, quindi ignora qualsiasi altro ramo di Subversion nel nome di ottenere rapidamente una copia di lavoro utile. 'git svn fetch' aggiorna tutto dal repository Subversion, e quindi è spesso un'operazione molto più lenta. Sono davvero confuso su ciò che stai effettivamente cercando di ottenere che significa che devi essere in grado di farlo. –

-3
git pull --rebase 

È inoltre possibile configurarlo in modo da rebases di default. Quindi è possibile:

git pull 

UPDATE:

oops. Hai bisogno di più caffè ...

Tutto quello che posso pensare è per lo script che cosa avete bisogno ..

+0

pull da svn repo? –

+0

@AdamDymitruk: Questo è * non * su vanilla 'git' - Riguarda' git svn'. – l0b0

19

Penso che tu stia confondendo git rebase e git svn rebase. Le mosse precedenti si commettono sul tuo attuale HEAD su alcune revisioni che hai specificato, mentre il secondo sposta il tuo HEAD attuale sulla punta del ramo di Subversion su cui ti trovi.

git svn rebasefa includono un git svn fetch --parent, vale a dire che permette di scaricare qualsiasi nuova Subversion impegna sul ramo che si Attualmente sei su, ma ora non Subversion commette da qualsiasi altro ramo (contrasto con una pianura git svn fetch, che recupera da tutti i rami).

ho il sospetto che non si vuole fare una full git svn fetch quando si esegue una git svn rebase, come vorrà dire che sarà molto più a lungo prima di ottenere una copia di lavoro utilizzabile. Se vuoi regolare git svn fetch, ti consiglio di impostare un cron job che eseguirà il recupero in background per te.

+0

sei così giusto –

+0

Piuttosto un vecchio post ma lo trovo comunque pertinente. ASSOLUTAMENTE desidero ottenere tutti gli aggiornamenti delle filiali prima di eseguire un re gn svn rebase. Perché? Perché ho avuto molti problemi durante la fusione se non lo faccio. È troppo facile dimenticare di recuperare ogni ramo che vuoi unire prima di unire e fare questo: 'git svn rebase && git checkout master && git merge feature 'prima di rendersi conto troppo tardi che non hai aggiornato i rami giusti da SVN. Se si sta utilizzando git svn per supportare una ramificazione migliore, è consigliabile SEMPRE 'git svn fetch' tutto prima di rebasing. Se non si esegue 'git svn dcommit' su tutto. –

+0

Se ci sono troppe ramificazioni nel repository SVN e ci vuole per sempre, rimuovere il '*' dalla linea di configurazione 'branches:' e gestire solo i rami su cui si lavora normalmente. Se stai facendo una combinazione 'master -> dev -> feature', è facile gestire solo quei rami usando i caratteri jolly e il file git config. In questo modo quando si 'git svn fetch' non si ottengono rami non necessari. 'git svn rebase' ha completamente distrutto il mio git e svn repo in passato perché non svn preleva i rami prima della mano. Non si traduce bene per me. Potrei essere in minoranza qui. –

Problemi correlati