2010-04-20 22 views
105

Ho iniziato a clonare un repository SVN usando l'operazione clone di git-svn. Dopo circa 6 ore di importazione (è un grande repo), il mio computer è andato a dormire su di me. C'è un modo per riprendere l'operazione senza ripetere tutto il lavoro iniziale?Ripresa clone git-svn

risposta

140

Il comando git svn fetch per riprendere un git svn clone è confermato da diverse fonti:

(Per inciso, se durante il clone iniziale passo la tua connessione muore o è necessario smetti allora di riprendere il clone devi solo eseguire il comando sopra per riprendere il download della cronologia).

Sembra che ci sia una perdita di memoria in git-svn. La dimensione del processo git-svn è cresciuta lentamente e dopo circa due settimane era a 1.2 GB di dimensione del residente, a quel punto l'OS si è rifiutato di lasciarlo andare.
La cosa è, questa era una benedizione sotto mentite spoglie.
Sono stato in grado di riprendere il clone interrotto con un semplice "git svn fetch", ed è stato eseguito molto più velocemente con l'heap ora radicalmente più piccolo.
Questo, ha funzionato così bene, in effetti, che ho preso l'abitudine di interrompere e riavviare il processo ogni sera e ogni mattina. Qualche giorno dopo è stato fatto.

Si inizia con le vostre avventure git-svn clonando un repository Subversion esistente:

git svn clone url://path/to/repo -s 

Il -s bandiera presuppone che y il nostro repository utilizza la convenzione "trunk, branches, tags". In caso contrario, è necessario specificare manualmente quali directory rappresentano rami e tag, se si desidera che Git ne venga a conoscenza.

Questo richiederà molto tempo, poiché recupera ogni singola revisione da SVN e esegue il commit localmente. Se per qualsiasi motivo si interrompe, è possibile riprendere con git svn fetch.

+1

Penso che alcune delle opzioni della linea di comando fornite a 'git svn clone' devono anche essere fornite (come applicabile) a' git svn fetch'. Ad esempio, ho impostato '-r HEAD' per' git svn clone' per ottenere solo la revisione HEAD SVN. Per riprendere, ho eseguito 'git svn fetch', che ha iniziato a importare tutte le revisioni. – amolbk

+0

Tutto è iniziato dalla prima revisione .... Ho 10.000 commit! Qualche idea su come * riprendere * da dove era stato interrotto? –

+0

@ NathanJ.Brauer non sulla cima della mia testa. Potresti fare una nuova domanda (con il sistema operativo, la versione git e la versione svn usate e un link a questa risposta per il contesto) – VonC

14

Ho trovato a blog post quello che ha fornito (spero) una risposta corretta.

Apparentemente, l'esecuzione di git svn fetch completa effettivamente l'operazione di clonazione. Ecco sperando!

+7

dovrete usare 'git svn rebase' dopo il recupero per completare l'operazione e avere il ramo master che riflette il tronco –

+0

Potrebbe fornire un collegamento al post del blog per riferimento futuro? – jmanning2k

5

Come hanno detto VonC, CaptainAwesomePants e Archi git svn fetch. Stavo facendo un git svn clone url... --authors-file=path/to/file e il clone non è riuscito perché uno degli autori non era nel file degli autori.Ho aggiunto l'autore al file e ho eseguito git svn fetch e ha continuato da dove era stato interrotto e guardando il log git più tardi, sembra che abbia usato l'autore appena aggiunto per sostituire il nome dell'autore del commit in modo che tutto fosse dolce.

+0

qui! grazie per il tuo post! –

3

Da almeno git 2.1.0 si può riprendere semplicemente riemissione git svn clone

Tuttavia questo sarà duplicare alcune voci nel vostro .git/config rimuovere quelli e tutto andrà bene

+0

'Da almeno git 2.1.0 ...' Qualche idea se questa funzione esistesse su git 1.9.1? – CivFan

+0

Scusa se non ho più repository svn per provare questo. –

+0

'git svn fetch' ha causato una mancata corrispondenza del checksum per me - ed era impossibile ripristinarlo perché apparentemente non c'era HEAD:/- ma funziona bene, dovevo semplicemente rimuovere' svn-remote.fetch' da '.git/config ' – OLL