Reprise du clone git-svn

117

J'ai commencé à cloner un dépôt SVN en utilisant l'opération de clonage de git-svn. Après environ 6 heures d'importation (c'est un gros dépôt), mon ordinateur est allé dormir sur moi. Existe-t-il un moyen de reprendre l'opération sans refaire tout le travail initial?

Brandon Yarbrough
la source

Réponses:

156

La git svn fetchcommande de reprendre a git svn cloneest confirmée par plusieurs sources:

(Incidemment, si lors de l'étape de clonage initiale, votre connexion meurt ou si vous devez l'arrêter, pour reprendre le clone, il vous suffit d'exécuter la commande ci-dessus pour reprendre le téléchargement de l'historique).

Il semble y avoir une fuite de mémoire git-svn. La taille du git-svnprocessus a augmenté lentement et après environ deux semaines, il était de 1,2 Go de taille résidente, auquel cas le système d'exploitation a refusé de le laisser bifurquer.
Le fait est que c'était une bénédiction déguisée.
J'ai pu reprendre le clone interrompu avec un simple " git svn fetch", et il a fonctionné beaucoup plus rapidement avec le tas maintenant radicalement plus petit.
Cela a si bien fonctionné, en fait, que j'ai pris l'habitude d'interrompre et de redémarrer le processus chaque soir et chaque matin. Quelques jours plus tard, c'était fait.

Vous commencez vos aventures git-svnen clonant un référentiel Subversion existant:

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

L' -sindicateur suppose que votre référentiel utilise la convention «trunk, branches, tags». Sinon, vous devez spécifier manuellement les répertoires qui représentent les branches et les balises, si vous voulez que Git les sache.

Cela prendra beaucoup de temps, car il récupérera chaque révision de SVN et s'engagera localement. Si pour une raison quelconque il s'arrête, vous pouvez reprendre avec git svn fetch.

VonC
la source
1
Je pense que certaines des options de ligne de commande fournies doivent git svn cloneégalement être fournies (le cas échéant) à git svn fetch. Par exemple, j'avais défini -r HEADpour git svn cloneobtenir uniquement la révision HEAD SVN. Pour reprendre, j'ai couru git svn fetch, qui a commencé à importer toutes les révisions.
amolbk
Cela a tout recommencé depuis la première révision ... J'ai 10 000 commits! Des réflexions sur la façon de reprendre là où elle s'était arrêtée?
Nathan JB
@ NathanJ.Brauer pas sur le dessus de ma tête. Vous pourriez poser une nouvelle question (avec le système d'exploitation, la version git et la version svn utilisées, et un lien vers cette réponse pour le contexte)
VonC
1
J'ai accidentellement tué ma connexion réseau pendant git svn clone, interrompant le processus. L'exécution de git svn clonenouveau semblait reprendre le clonage en cours. Quelqu'un d'autre a fait ça?
Kehlan Krumme
1
@Kehlan Apparemment, si vous considérez la réponse de zan-xhipe ci
VonC
17

J'ai trouvé un article de blog qui a fourni ce qui (je l'espère) est une réponse correcte.

Apparemment, l'exécution git svn fetchcomplète efficacement l'opération de clonage. En espérant!

Brandon Yarbrough
la source
7
vous devrez utiliser git svn rebaseaprès la récupération pour terminer l'opération et avoir la branche principale reflétant le tronc
Romuald Brunet
Pourriez-vous fournir un lien vers le billet de blog pour référence future?
jmanning2k
6

Comme VonC, CaptainAwesomePants et Archi l'ont tous dit, git svn fetchça fait l'affaire. J'étais en train de faire un git svn clone url... --authors-file=path/to/fileet le clone a échoué car l'un des auteurs n'était pas dans le fichier des auteurs. J'ai ajouté l'auteur au fichier et j'ai couru git svn fetchet il a continué là où il s'était arrêté et en regardant le journal git plus tard, il semble qu'il ait utilisé l'auteur nouvellement ajouté pour remplacer le nom de l'auteur du commit, donc tout était doux.

Tom Saleeba
la source
5

À partir d'au moins git 2.1.0, vous pouvez reprendre en réémettant simplement git svn clone

Cependant, cela dupliquera certaines entrées dans votre .git / config, supprimez-les et tout ira bien

zan-xhipe
la source
From at least git 2.1.0...Une idée si cette fonctionnalité existait sur git 1.9.1?
CivFan
Désolé, je n'ai plus de référentiels svn pour essayer cela.
zan-xhipe
git svn fetcha causé une incompatibilité de somme de contrôle pour moi - et a été impossible à réinitialiser car il n'y avait apparemment pas de HEAD: / - mais cela fonctionne bien, il suffit de supprimer le svn-remote.fetchde.git/config
OLL