Retomando o clone git-svn

117

Comecei a clonar um repositório SVN usando a operação de clone do git-svn. Após cerca de 6 horas de importação (é um grande repositório), meu computador dormiu comigo. Existe uma maneira de retomar a operação sem refazer todo o trabalho inicial?

Brandon Yarbrough
fonte

Respostas:

156

O git svn fetchcomando para retomar um git svn cloneé confirmado por várias fontes:

(Aliás, se durante a etapa inicial de clonagem sua conexão morrer ou você precisar interrompê-la, para retomar o clone, você só precisa executar o comando acima para retomar o download do histórico).

Parece haver um vazamento de memória git-svn. O tamanho do git-svnprocesso cresceu lentamente e depois de cerca de duas semanas ele estava com o tamanho residente de 1,2 GB, ponto em que o sistema operacional se recusou a deixá-lo bifurcar.
Acontece que foi uma bênção disfarçada.
Consegui retomar o clone interrompido com um simples " git svn fetch", e ele correu muito mais rápido com o heap agora radicalmente menor.
Isso funcionou tão bem, de fato, que adquiri o hábito de interromper e reiniciar o processo todas as noites e todas as manhãs. Alguns dias depois, foi feito.

Você começa suas aventuras git-svnclonando um repositório Subversion existente:

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

O -ssinalizador assume que seu repositório usa a convenção "trunk, branches, tags". Se não, você deve especificar manualmente quais diretórios representam branches e tags, se você quiser que o Git saiba sobre eles.

Isso levará muito tempo, pois irá buscar todas as revisões do SVN e submeter localmente. Se por algum motivo ele parar, você pode continuar com git svn fetch.

VonC
fonte
1
Acho que algumas das opções de linha de comando fornecidas git svn clonetambém precisam ser fornecidas (conforme aplicável) para git svn fetch. Por exemplo, eu configurei -r HEADpara git svn cloneobter apenas a revisão HEAD SVN. Para retomar git svn fetch, executei , que comecei a importar todas as revisões.
amolbk
Isso reiniciou tudo desde a primeira revisão .... Eu tenho 10.000 commits! Alguma ideia de como retomar de onde parou?
Nathan JB
@ NathanJ.Brauer não está no topo da minha cabeça. Você poderia fazer uma nova pergunta (com o sistema operacional, versão git e versão svn usados, e um link de volta para esta resposta para contexto)
VonC
1
Eu acidentalmente matei minha conexão de rede durante git svn clone, interrompendo o processo. Correr git svn clonenovamente parecia retomar o clone em andamento. Alguém mais fez isso?
Kehlan Krumme
1
@Kehlan Aparentemente sim, se você considerar a resposta de zan-xhipe abaixo
VonC
17

Encontrei uma postagem no blog que forneceu (espero) uma resposta correta.

Aparentemente, a execução git svn fetchefetivamente conclui a operação de clonagem. Esperança!

Brandon Yarbrough
fonte
7
você terá que usar git svn rebaseapós a busca para completar a operação e ter o branch master refletindo o tronco
Romuald Brunet
Você poderia fornecer um link para a postagem do blog para referência futura?
jmanning2k
6

Como VonC, CaptainAwesomePants e Archi disseram git svn fetchque resolve o problema. Eu estava fazendo um git svn clone url... --authors-file=path/to/filee o clone falhou porque um dos autores não estava no arquivo de autores. Eu adicionei o autor ao arquivo e executei git svn fetche ele continuou de onde parou e olhando para o log do git mais tarde, parece que ele usou o autor recém-adicionado para substituir o nome do autor do commit, então tudo foi legal.

Tom Saleeba
fonte
5

Pelo menos a partir do git 2.1.0, você pode retomar apenas reemitindo git svn clone

No entanto, isto irá duplicar algumas entradas no seu .git / config, remova-as e tudo ficará bem

zan-xhipe
fonte
From at least git 2.1.0...Alguma ideia se esse recurso existia no git 1.9.1?
CivFan
Desculpe, não tenho mais repositórios svn para tentar isso.
zan-xhipe de
git svn fetchcausou uma incompatibilidade de soma de verificação para mim - e foi impossível redefinir porque aparentemente não havia HEAD: / - mas isso funciona bem, só tive que remover o svn-remote.fetchde.git/config
OLL