Conversão de CVS para SVN e reorganização de filiais
Pergunta
Estou convertendo do repositório CVS existente para o repositório SVN.O repositório CVS tem poucos braces e eu gostaria de renomear os ramos durante a conversão.
A conversão desejada é assim:
CVS branch SVN branch
HEAD -> branches/branchX
branchA -> trunk
branchB -> branches/branchB
branchC -> branches/branchC
Ou seja, CVS HEAD torna-se uma ramificação normal e CVS branchA torna-se um tronco SVN.
Os repositórios CVS e SVN estarão na mesma máquina Linux.
Como isso poderia ser feito?
Além disso, a conversão onde CVS branchA se torna tronco SVN e todas as outras ramificações CVS são ignoradas pode ser suficiente.
Solução
Estou especialmente interessado em preservar o histórico de commits.Se eu renomear e mover ramificações no SVN após a conversão, o histórico será preservado?
Sim.O Subversion também mantém registro das alterações na estrutura de diretórios, e todo o histórico da versão é preservado mesmo se um arquivo for movido na árvore.
Eu recomendo converter o repositório com cvs2svn, incluindo ramificações e tags.Quando o repositório estiver no Subversion, você poderá mover as ramificações e tags como desejar.Isso também mantém o histórico das tags e ramificações reais que estão sendo renomeadas, o que pode ser interessante em um contexto histórico posterior.
Outras dicas
Já faz um tempo que não faço uma conversão CVS -> SVN, e provavelmente ainda mais desde que fiz uma com uma estrutura de ramificação não trivial.Como o SVN pode mover-se pelas árvores de diretórios com bastante facilidade, você pode fazer toda a conversão primeiro e depois classificar a estrutura de troncos/ramos inteiramente dentro do SVN.
Se você chegar a esse ponto e estiver movendo árvores de diretórios inteiras dentro do SVN, provavelmente será melhor se você fizer commit após cada etapa de renomeação/mover árvore.Apenas algo para ter em mente.
As ramificações do Subversion são diretórios, então você pode simplesmente mover as ramificações após a conclusão da importação e nenhum histórico será perdido.
Algumas informações adicionais para apoiar a resposta aceita:
cvs2svn não permite conversão de trunk para branch ou de branch para trunk
então mover as coisas depois de convertido para svn é o melhor caminho a percorrer.
É possível mover os diretórios trunk e branch após a conversão, mas isso exigiria um commit SVN pós-conversão explícito que permanecerá em seu histórico SVN, tornando a exploração do histórico um pouco mais complicada.
Mas você pode realmente dizer ao cvs2svn para armazenar o tronco e as ramificações nos caminhos SVN que você deseja usando o comando --symbol-hints=symbol-hints.txt
opção de linha de comando ou (se você estiver usando um arquivo de opções para sua conversão) o SymbolHintsFileRule('symbol-hints.txt')
regra de estratégia de símbolo, onde symbol-hints.txt
é um arquivo contendo linhas como as seguintes:
. .trunk. trunk branches/branchX .
. branchX branch trunk .
Observe que algumas mensagens de commit geradas automaticamente pelo cvs2svn (por exemplo, para a criação do branch) mencionarão o nome original do branch.
Embora seja possível mover-se pelas ramificações após a conversão ser feita, pode ser melhor configurar o arquivo de configuração cvs2svn para especificar exatamente o nome que você deseja para cada uma das ramificações existentes.Um dos benefícios disso é que o FishEye compreenderá o resultado muito melhor.
Estou especialmente interessado em preservar o histórico de commits.Se eu renomear e mover ramificações no SVN após a conversão, o histórico será preservado?