Riprendo git-svn clone


117

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 rifare tutto il lavoro iniziale?

Risposte:


156

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

(Per inciso, se durante la fase di clonazione iniziale la tua connessione muore o devi interromperla, per riprendere il clone devi solo eseguire il comando sopra per riprendere il download della cronologia).

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

Inizi le tue avventure git-svnclonando un repository Subversion esistente:

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

Il -sflag presume che il tuo repository utilizzi la convenzione "trunk, branch, tags". In caso contrario, devi specificare manualmente quali directory rappresentano rami e tag, se vuoi che Git li sappia.

Questo richiederà molto tempo, poiché recupererà ogni singola revisione da SVN e si impegnerà localmente. Se per qualsiasi motivo si interrompe, puoi riprendere con git svn fetch.


1
Penso che alcune delle opzioni della riga di comando fornite git svn clonedebbano essere fornite (se applicabile) anche a git svn fetch. Ad esempio, avevo impostato -r HEADper git svn cloneottenere solo la revisione HEAD SVN. Per riprendere ho eseguito git svn fetch, che ha iniziato a importare tutte le revisioni.
amolbk

Questo ha ricominciato tutto dalla prima revisione ... ho 10.000 commit! Qualche idea su come riprendere da dove si era interrotto?
Nathan JB

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

1
Ho accidentalmente git svn cloneinterrotto la mia connessione di rete durante , interrompendo il processo. git svn cloneSembrava di nuovo correre per riprendere il clone in corso. Qualcun altro l'ha fatto?
Kehlan Krumme

1
@Kehlan A quanto pare, se si considera la risposta di zan-xhipe di seguito
VonC

17

Ho trovato un post sul blog che ha fornito quella che (spero) sia una risposta corretta.

Apparentemente, l'esecuzione in modo git svn fetchefficace completa l'operazione di clonazione. Spero!


7
dovrai usare git svn rebasedopo il recupero per completare l'operazione e avere il ramo master che riflette il tronco
Romuald Brunet

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

6

Come hanno detto VonC, CaptainAwesomePants e Archi git svn fetchfa il trucco. Stavo facendo un git svn clone url... --authors-file=path/to/filee il clone è fallito perché uno degli autori non era nel file degli autori. Ho aggiunto l'autore al file ed è corso git svn fetche ha continuato da dove era stato interrotto e guardando il log di git in seguito, sembra che abbia usato l'autore appena aggiunto per sostituire il nome dell'autore del commit, quindi tutto è stato dolce.


5

Almeno da git 2.1.0 puoi riprendere semplicemente riemettendo git svn clone

Tuttavia questo duplicherà alcune voci nel tuo .git / config, rimuoverle e tutto andrà bene


From at least git 2.1.0...Qualche idea se questa funzionalità esistesse in git 1.9.1?
CivFan

Spiacente, non ho più repository svn su cui provarlo.
zan-xhipe

git svn fetchha causato una mancata corrispondenza del checksum per me - ed era impossibile ripristinarlo perché apparentemente non c'era HEAD: / - ma funziona bene, ho dovuto rimuovere svn-remote.fetchda.git/config
OLL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.