Repositório de subversão dividido em múltiplos repositórios mercuriais?
-
25-09-2019 - |
Pergunta
Estamos migrando da subversão para o Mercurial e encontramos uma colisão no processo de conversão SVN-> HG. No momento, nosso repo SVN único mantém código para alguns "projetos" distintos e gostaríamos de dividi -los no processo de migração. Nosso repo SVN é organizado como:
.
|-- proj1
| |-- branches
| |-- tags
| `-- trunk
`-- proj2
|-- branches
|-- tags
`-- trunk
E gostaríamos de simplesmente fazer proj1
e proj2
seus próprios repositórios HG. Gostaríamos de, é claro, não ter histórico específico para proj1
aparecer em proj2
também o log. Agora, quando hg convert
A conversão, ela apenas lê todos os arquivos de maneira bastante importante, nem mesmo distinguindo ramos dos troncos.
Qual é o processo de filtragem por diretório e reconhecer ramificações de SVN em hg convert
?
Solução
Eu tenho funcionado agora, graças ao Página do Wiki Convertextension!
Eu tentei o método de Ry4an, mas ele veio com as desvantagens de ter que converter primeiro o repositório SVN em um repositório mercurial intermediário antes de dividir tudo, e que ramos, tronco e tags não estavam sendo reconhecidos porque existem dois projetos cada um com seus próprios Ramos, tronco e tags.
Descobri que especificando manualmente os ramos, o diretório de troncos e tags funcionou muito bem para converter um projeto de SVN em Mercurial em um momento:
hg \
--config convert.svn.trunk=proj1/trunk \
--config convert.svn.branches=proj1/branches \
--config convert.svn.tags=proj1/tags \
convert --authors authors.txt original-svn-dir hg-proj1
Isso cuidará de reconhecer ramos, tags e tronco SVN e filtro apenas para proj1
revisões ao mesmo tempo. Então, eu apenas repeti para proj2
.
Outras dicas
Outra maneira de resolver seria usar o svnadmin dump e o svndumpfilter para dividir o repo SVN em um novo repositório SVN por projeto, conforme descrito na documentação do SVN.Repositórios de divisão filtrando o histórico do repositório
Isso é feito facilmente usando a extensão 'convert', como você sugeriu. Aqui está o procedimento:
- faça um
hg convert SVNREPO all-in-one-mercurial-repo
de svn ao mercurial com tudo - fazer múltiplas
hg convert --filemap projectfilemap.txt all-in-one-mercurial-repo project-repo
comandos - um por projeto
Esses mapas de arquivo têm neles linhas como:
exclude proj1
rename proj2 .
Isso o Filemap usou ao extrair apenas o repositório do Projeto Two do repositório Mercurial All-in-One. Pode ser necessário listar cada arquivo individual nesses mapas, mas acho que os diretórios estão bem.
Há outra pergunta aqui, então, onde eu respondi praticamente a mesma coisa e colada em um exemplo completo, mas isso deve ser suficiente para você ir.