Como migrar a partir de um repositório Subversion complicado para um sistema de controle de versão distribuído?

StackOverflow https://stackoverflow.com/questions/839683

Pergunta

Vamos supor que temos um repositório Subversion que se parece com

/original/0.1
/original/0.2
/variantA/trunk
/variantA/branches/who/branch_for_xxx
/variantA/branches/she/branch_for_yyy
/variantB/trunk
/variantB/branches/who/branch_for_zzz
(... 30 or 40 alike)

onde varianta e variantB são garfos do software original.

Eu estou procurando um método para migrar este repositório em um sistema de controle de versão distribuído: um método

  • não necessariamente wigh um único comando
  • para qualquer um dos sistemas de controle de versão distribuído conhecidos
  • fazer as DVCS pensar neles ramos: /official/{0.1,0.2} árvores, / varianta / tronco de árvore, ...
  • fazer as DVCS cientes da relação herança dessas árvores
Foi útil?

Solução

Se você considerar Git como um possível candidato DVCS, o script ruby svn2git faz o que você precisa.

Mais detalhes na pergunta: < strong> a clonagem de um repositório SVN Non-standard com Git-Svn

Outras dicas

Mercurial vem com uma extensão de conversão que deve fazer o que quiser. Veja as converter detalhes de extensão no site do Mercurial.

Para Git, consulte as instruções em http://github.com/guides/import- de-subversão

A última vez que eu fiz isso manualmente, eu usei os comandos abaixo. (Este foi para um projeto que não use tags ou ramos. Usando svn2git poderia produzir melhores resultados do que git-svn se você tiver tags ou ramos).

cat "mysvnusername = Me Myself <me.myself@somewhere.com>" >> authors.txt

svnserve --daemon --foreground --root <SVN-REPO-PARENT-DIR>
git svn clone --stdlayout --authors-file=authors.txt --no-metadata svn://localhost/<SVN-REPO-NAME>

# push to a public repo and clone from there, to get push/pull working easily
cd <SVN-REPO-NAME>
git remote add origin git@github.com:mygithubusername/<GIT-REPO-NAME>.git
git push origin master
cd ..
rm -rf <SVN-REPO-NAME>

git clone git@github.com:mygithubusername/<GIT-REPO-NAME>.git

Mas desde que você tem um SVN layout de repositório não-padrão, você precisará especificar o --trunk, --tags e --branches parâmetros em vez de --stdlayout para git svn clone .

Para representar toda a história herança de seu repositório, você pode tentar reorganizar seu repositório para que em vez de uma hierarquia não-padrão, você teria um layout padrão plana repositório:

/branches/original-0.1
/branches/original-0.2
/branches/variantA-trunk
/branches/variantA-who-branch_for_xxx
/branches/variantA-she-branch_for_yyy
/branches/variantB-trunk
/branches/variantB-who-branch_for_zzz
...

Isso deve tornar mais fácil para ferramentas de importação para entender o repositório. Então, quando eles foram importados, você pode reorganizar-los melhor dentro do novo repositório.

Além disso, eu ouvi que Git 1.6.x suportes clonagem profunda, de modo que você pode dar aos parâmetros git svn clone como --branches=branches/*/* que vai olhar profundamente na hierarquia para ramos. Consulte este post para um exemplo de usá-lo.

$ bzr svn-import --layout trunk1 svn-root-url bzr.repo

Deve fazer a coisa certa. Você precisa ter o bzr-svn plugin instalado, a fim de ser capaz de fazer isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top