Como eu posso clonar um repositório svn que mudou os layouts com o git mantendo o histórico completo?

5

Problema

Eu quero clonar um repositório svn com git-svn. O problema é que os layouts alterados do repositório do subversion estão em r1235 .

Específicos

Da revisão 1 a 1234, foo usou o layout padrão da pasta svn com:

  • / trunk / src
  • / tags / version / src

Na revisão 1235, o autor adicionou bar ao repo. Para fazer isso, eles reestruturaram o repositório principal, fazendo com que o layout da pasta fosse assim:

  • / trunk / foo / src
  • / trunk / bar / src
  • / tags / version / foo / src
  • / tags / version / bar / src

Meta

Eu quero um novo repositório git que tenha o histórico de foo como se nunca tivesse sido reorganizado para incluir bar .

Documentação relevante

Trabalhar com layouts não padrão é discutido na documentação do git-svn.

Se todo o histórico for desnecessário (ou se eu quiser apenas bar ), posso obter o que desejo do r1235 em:

  • git svn init --stdlayout http://path.to/repo
  • edite repo/.git/config adicionando /foo aos caminhos relevantes (ou /bar )

'

[svn-remote "svn"]
   url = http://path.to/repo
   fetch = trunk/foo:refs/remotes/trunk
   branches = branches/*/foo:refs/remotes/*
   tags = tags/*/foo:refs/remotes/tags/*

'

  • git svn fetch -r 1235:HEAD

Minhas tentativas

  • git svn clone -r 1:1234 --stdlayout http://path.to/repo
  • edite repo/.git/config como acima
  • git svn fetch -r 1235:HEAD

Resultado

O último comando parece ter êxito porque r1235 - HEAD é baixado. No entanto, git log mostra apenas confirmações até 1234 . O diretório de trabalho também parece ser a revisão antiga.

    
por Cameron Tacklind 23.01.2013 / 09:40
fonte

1 resposta

2

Você fez apenas git svn fetch , então agora precisa verificar a última revisão .

Qualquer um de git svn rebase (hm, estou menos certo com este após a mudança de caminho, mas normalmente é o que você usa; ele inclui busca), git reset --hard trunk (forçosamente descarta alterações locais), git rebase trunk (re -aplicou mudanças locais confirmadas) ou git merge --ff-only trunk (verifique se não há alterações locais) deve fazer e desde que você não tem alterações locais ainda são equivalentes.

    
por 23.01.2013 / 09:59
fonte

Tags