Come posso clonare un repository svn che ha modificato i layout con git mantenendo la cronologia completa?

5

Problema

Voglio clonare un repository SVN con git-svn. Il problema è che il repository subversion ha cambiato layout in r1235 .

Specifiche

Dalla revisione 1 alla 1234, foo ha utilizzato il layout della cartella svn standard con:

  • / trunk / src
  • / tag / version / src

Alla revisione 1235, l'autore ha aggiunto bar al pronti contro termine. Per fare ciò hanno ristrutturato il master repository rendendo il layout della cartella simile a questo:

  • / trunk / foo / src
  • / trunk / bar / src
  • / tag / version / pippo / src
  • / tag / version / bar / src

Obiettivo

Voglio un nuovo repository git con la cronologia di foo come se non fosse mai riorganizzato per includere bar .

Documentazione pertinente

Lavorare con layout non standard è discusso nella documentazione di git-svn.

Se l'intera cronologia non è necessaria (o se voglio solo bar ), posso ottenere quello che voglio da r1235 su:

  • git svn init --stdlayout http://path.to/repo
  • modifica repo/.git/config aggiungendo /foo ai percorsi pertinenti (o /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

I miei tentativi

  • git svn clone -r 1:1234 --stdlayout http://path.to/repo
  • modifica repo/.git/config come sopra
  • git svn fetch -r 1235:HEAD

Risultato

L'ultimo comando sembra avere successo perché r1235 - HEAD viene scaricato. Tuttavia, git log mostra solo commit fino a 1234 . Anche la directory di lavoro sembra essere la vecchia revisione.

    
posta Cameron Tacklind 23.01.2013 - 09:40
fonte

1 risposta

2

Hai fatto solo git svn fetch , quindi ora devi controllare l'ultima revisione .

Qualsiasi di git svn rebase (hm, sono meno sicuro di questo dopo il cambio di percorso, ma normalmente è quello che usi, include il recupero), git reset --hard trunk (scarta forzatamente le modifiche locali), git rebase trunk (re -applica modifiche locali impegnate) o git merge --ff-only trunk (controlla che non ci siano modifiche locali) dovrebbe fare e dato che non hai ancora modifiche locali sono equivalenti.

    
risposta data 23.01.2013 - 09:59
fonte

Leggi altre domande sui tag