2009-10-12 12 views
31

Spesso ho il caso di voler lavorare su un repository SVN immediatamente. Ma un ordinario git svn clone [url] clona anche l'intera cronologia. Quindi voglio accelerare le cose. La prima parte è di recuperare solo l'ultima revisione nel tuo repository Git. Lo faccio in questo modo:Git svn clone: ​​Come rinviare il recupero della cronologia delle revisioni

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

git svn clone -r$REV:HEAD $URL $PROJECT_FOLDER 

(maggiori informazioni in questo articolo StackOverflow:.. "How to git-svn clone last n revisions from svn"

questo modo sono in funzione e di poter lavorare immediatamente, ma senza copia locale della storia

la domanda è, come faccio poi recuperare la storia dal repository svn?

e preferibilmente, questo può essere fatto in pezzi di, diciamo 1000 revisioni (in ordine inverso). Qualsiasi aiuto qui sarebbe molto apprezzato :)

+0

Ho trovato la seguente soluzione http://stackoverflow.com/a/2348596/429476 –

risposta

21

Ho scoperto come può essere fatto. Il trucco è non utilizzare git svn clone. Utilizzare invece git svn init e git svn fetch singolarmente. Modificato l'esempio:

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

mkdir $PROJECT_FOLDER 
cd !$ #goes into dir named $PROJECT_FOLDER 
git svn init -s $URL #-s implies --stdlayout with /trunk /tags /branches 
git svn fetch -r $REV 

# hack, hack, hack 

# or update history (fetch 50 revisions back each loop 
for ((r=$REV; r>0; r-=50)); 
do 
    git svn fetch -r $r:HEAD 
done 
+3

questo non sembra funzionare per me, restituisce solo quando provo a fare git svn fetch -r 1000: HEAD – Verhogen

+0

Non fa nemmeno per me, così come la soluzione proposta da Rob Crawford in basso. Per me, la domanda iniziale rimane senza risposta. – sthiers

+2

@verhogen - 'git svn fetch -r 1000: HEAD' significa" recupera tutte le revisioni a partire da rev 1000 fino all'attuale HEAD ". Se hai, ad esempio, 800 revisioni nel tuo SVN, questo non recupera nulla. Se avessi revisioni di 50k, otterresti molto più di quanto volevi. –

0

git svn fetch sembra "ricordare" le revisioni è visto in precedenza. Ho avuto successo con le gamme facendo:

git svn fetch -r 0:100 
git svn fetch -r 100:200 
git svn fetch -r 4500 
git svn rebase 
git svn fetch -r 200:300 

Presi le revisioni più recenti e poi ha iniziato "compilazione" le lacune. Sembra che funzioni bene.

Jesper - se il repository non ha una revisione 1000, non c'è niente da recuperare. Assicurati che i numeri di revisione che stai utilizzando siano validi!

+1

non sicuro di ciò che questo compie. ha successo, ma un log git non ti mostrerà nulla di più del tuo iniziale fetch e forward. –

5

Nessuna delle risposte suggerite funzionerà. git svn fetch con una revisione recupererà solo le versioni più recenti di quelle già clonate. Potresti essere in grado di utilizzare git svn reset per tornare a una revisione precedente e recuperare da lì, ma dopo dovrai eseguire un po 'di lavoro sporco per "innestare" le tue nuove revisioni sull'albero completo (SHA1 di una revisione SVN in git dipende dall'intera parentela della revisione). Se sei a portata di mano con i bisturi, git ti offre, fallo.

È molto più semplice evitare il problema.

  • Fare un clone iniziale delle ultime revisioni, in modo da poter lavorare immediatamente;
  • Avvia un altro clone della cronologia completa in un'altra directory/repository git;
  • Lavora nella tua cronologia parziale quanto vuoi;
  • Al termine del clone completo, utilizzare un approccio come http://www.sanityinc.com/articles/relocating-git-svn-repositories/ per copiare il lavoro dal repository parziale a quello completo.

Quindi, questa è una risposta parziale: come è possibile recuperare la cronologia? Prendilo in un altro repository e copia quello di cui hai bisogno. Può essere fatto in pezzi di 1000 in ordine inverso? Con il bisturi e tanta pazienza, lo potrebbe essere, ma è improbabile che ne valga la pena.Il pieno recupero in esecuzione supererà il sovraccarico di tutte quelle prime revisioni prese da ciascun blocco che si è git svn fetch, e la correzione diventerà noiosa.

Problemi correlati