Pergunta

Eu tenho um repositório de subversão com o seguinte layout:

svnrepo/projectA/trunk
svnrepo/projectA/tags
svnrepo/projectA/branches
svnrepo/projectB/trunk
svnrepo/projectB/tags
svnrepo/projectB/branches


que eu gostaria de mudar para um repositório mercurial com um layout revisado:
HGREPO/Projecta
HGREPO/ProjectB

Qual a melhor maneira para fazer isto? Alguns dos meus pensamentos são:

Opção 1

Reorganize os caminhos na subversão (usando o movimento SVN) para um formato intermediário:

svnrepo/trunk/projectA
svnrepo/trunk/projectB
svnrepo/tags/projectA
svnrepo/tags/projectB
svnrepo/branches/projectA
svnrepo/branches/projectB

Em seguida, HG converte no svnrepo/tronco. Isso vai confundir a importação de HG?

opção 2HG converte cada um dos projetos/tronco em repositórios HG separados. Em seguida, mescle -os em um único repo HG (usando HG init, hg pull -f Projecta, etc). Eu acho que isso perderá os nomes e tags do ramo no primeiro projeto importado.

Foi útil?

Solução

Em mercurial, armazenar bases de código não relacionadas no mesmo repositório é uma má ideia porque vai

  • Complica significativamente a fusão. As mesclações dependerão das alterações feitas para tudo Projetos, em vez de apenas o projeto que você está tentando se fundir.
  • Causa Over -se de armazenamento e checkout - Mercurial, até onde eu sei, não suporta a verificação de apenas subdiretórios de um repositório. Você teria que ramificar todos os projetos de uma só vez.

A solução é converter seu repositório de subversão única em vários repositórios mercuriais. A maioria das ferramentas de conversão suporta isso.

Outras dicas

Cada projeto deve estar em seu próprio repositório HG (para poder obter ou marcar apenas um projeto específico).

Lembre-se do que o diretório que você vê no Subversão (tronco, tags, ramos) não existirá em nenhum VC moderno (d), onde galhos e tags são cidadãos de primeira classe (ou seja, metadados diretamente gerenciados pela ferramenta), em oposição como simples diretório resultante de um Cópia barata (em svn).

Isso significa que, quando você converte um repositório SVN, não deve armazenar diretamente nenhum diretório "tronco", "tags" ou "ramifica" na história do repo HG.

Você prefere usar um ferramenta como hgsubversion Para importar seu repositório SVN (como apenas "repo/projeto") para um repo HG dedicado ao Projeto. Ele manterá tags e ramificações do projeto ORIGNAL SVN e as converterá em objetos HG.
A partir de sua documentação:

Todas as atualizações usando hgpullsvn são feitos no ramo nomeado a partir do último componente do URL SVN (por exemplo, se o URL SVN for svn://server/myproj/branches/feature-ZZZ, hgpullsvn criará e usará o ramo nomeado 'feature-ZZZ')


Se você não deseja "converter", mas "sincronizar", Tonfa recomendar hgsubversion, embora "esteja atualmente em estado de fluxo devido à pesada refatoração":

Agora é não Pronto para uso da produção. Você só deve estar usando isso se estiver pronto para invadi -lo e mergulhar nos internos da Mercurial e/ou Subversão.

Desde hgsvn também permitir alguma sincronização através hgpushsvn e hgpullsvn... eu ficaria com hgsvn por enquanto.

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