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.