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 proj2també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?

Foi útil?

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:

  1. faça um hg convert SVNREPO all-in-one-mercurial-repo de svn ao mercurial com tudo
  2. 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.

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