Close

Git convert: A step in migration from SVN to Git

O próximo passo na migração do SVN para o Git é importar o conteúdo do repositório SVN para um novo repositório do Git. Isso vai ser feito com o utilitário git svn que está incluso na maioria das distribuições do Git e, em seguida, os resultados vão ser limpos com svn-migration-scripts.jar.

Esteja ciente de que o processo de conversão pode levar um tempo significativo para repositórios maiores, mesmo realizando a clonagem a partir de um repositório SVN local. Como referência, a conversão de um repositório de 400 MB com 33.000 commits no principal levou cerca de 12 horas para ser concluída.

Para repositórios de tamanho razoável, as etapas a seguir devem ser executadas no computador local do lead de migração. No entanto, se você tiver um repositório SVN muito grande e quiser reduzir o tempo de conversão, é possível executar o git svn clone no servidor do SVN em vez de na máquina local do lead de migração. Isso vai evitar a sobrecarga da clonagem por meio de uma conexão de rede.


Clonar o repositório SVN


O comando git svn clone transforma o tronco, as ramificações e as marcações em seu repositório SVN em um novo repositório do Git. Dependendo da estrutura do seu repositório SVN, o comando precisa ser configurado de forma diferente.

Migração do Git: comando git svn clone
bancos de dados
Material relacionado

Como mover um Repositório do Git completo

Logotipo do Bitbucket
VER SOLUÇÃO

Aprenda a usar o Git com o Bitbucket Cloud

Layouts SVN padrão

Se o projeto SVN usa o layout de diretório padrão /trunk, /branches e /tags, você pode usar a opção --stdlayout em vez de especificar a estrutura do repositório de forma manual. Execute o seguinte comando no diretório ~/GitMigration directory:

git svn clone --stdlayout --authors-file=authors.txt
 <svn-repo>/<project> <git-repo-name>

Onde <svn-repo> é o URI do repositório SVN que você quer migrar e, <project> é o nome do projeto que você quer importar e <git-repo-name> é o nome do diretório do novo Repositório do Git.

Por exemplo, se você estivesse migrando um projeto chamado Confluence, hospedado em https://svn.atlassian.com, você poderia executar o seguinte comando:

git svn clone --stdlayout --authors-file=authors.txt https://svn.atlassian.com/Confluence ConfluenceAsGit

Layouts SVN não padrão

Se o repositório SVN não tiver um layout padrão, vai ser preciso informar as localizações do seu tronco, ramificações e marcações usando as opções de linha de comando --trunk, --branches e --tags. Por exemplo, se você tiver ramificações armazenadas nos diretórios /branches e /bugfixes, o seguinte comando seria utilizado:

git svn clone --trunk=/trunk --branches=/branches 
 --branches=/bugfixes --tags=/tags --authors-file=authors.txt 
 <svn-repo>/<project> <git-repo-name>

Inspecionar o novo repositório do Git


Após o término do git svn clone (que pode demorar um pouco), você vai ver um novo diretório chamado <git-repo-name> em ~/GitMigration. Esse é o repositório convertido do Git. Você deve conseguir acessar o < git-repo-name> e executar qualquer um dos comandos padrão do Git para explorar seu projeto.

Ramificações e marcações não são importadas para o novo repositório do Git como você pode esperar. Você não vai ver nenhuma das suas ramificações do SVN na saída do git branch, nem nenhuma das suas marcações do SVN na saída do git tag. Mas, se executar git branch -r, você vai ver todas as ramificações e marcações do seu repositório SVN. O comando git svn clone importa suas ramificações do SVN como ramificações remotas e importa as marcações do SVN como ramificações remotas prefixadas com tags/.

Migração do Git: estrutura do repositório do Git clonado

Esse comportamento facilita certos procedimentos de sincronização bidirecional, mas tentar fazer uma migração unidirecional do Git pode ser muito confuso. É por isso que nosso próximo passo é converter as ramificações remotas em ramificações locais e marcações reais do Git.

Limpar o novo repositório do Git


O script clean-git incluso no svn-migration-scripts.jar transforma as ramificações do SVN em ramificações locais do Git e as marcações do SVN em marcações do Git completas. Observe que esta é uma operação destrutiva e não vai ser possível mover os commits do repositório do Git de volta ao repositório SVN.

Se você estiver seguindo este guia de migração, isso não é um problema, pois ele defende uma sincronização unidirecional do SVN para o Git (o repositório do Git é considerado como somente leitura até depois da etapa Migrar). No entanto, se você está planejando fazer commit nos repositórios do Git e do SVN durante o processo de migração, não execute os comandos a seguir. Essa é uma tarefa avançada e não é recomendada para o projeto típico.

Para ver o que pode ser limpo, execute o comando a seguir em ~/GitMigration/< git-repo-name>:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Isso vai exibir todas as alterações que o script quer fazer, mas na verdade não vai implementar nenhuma delas. Para realizar essas alterações, é preciso usar a opção --force, assim:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force

Agora você deve ver todas as suas ramificações do SVN na saída do git branch, junto com suas marcações do SVN na saída do git tag. Isso significa que você converteu com sucesso seu projeto do SVN em um repositório do Git.

Resumo


Nesta etapa, você transformou um repositório do SVN em um novo repositório do Git com o comando git svn clone e, em seguida, limpou a estrutura do repositório resultante com o svn-migration-scripts.jar. Na próxima etapa, você vai aprender como manter esse novo repositório do Git sincronizado com quaisquer novos commits realizados no repositório do SVN. Esse processo vai ser semelhante à conversão, mas há algumas considerações importantes sobre o fluxo de trabalho durante esse período de transição.


Compartilhar este artigo
Próximo tópico

Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Pessoas colaborando usando uma parede cheia de ferramentas

Blog do Bitbucket

Ilustração do DevOps

Caminho de aprendizagem de DevOps

Demonstrações de funções no Demo Den com parceiros da Atlassian

Como o Bitbucket Cloud funciona com o Atlassian Open DevOps

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up