Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.

Diferenças entre o Subversion e o Git

Os repositórios do Subversion (SVN) são semelhantes aos do Git, mas com várias diferenças em relação à arquitetura dos projetos.

Neste artigo

Estrutura do diretório

Cada referência ou instantâneo etiquetado de um commit em um projeto é organizado em subdiretórios específicos, como trunk, branches e tags. Por exemplo, um projeto do SVN com dois recursos em desenvolvimento pode ter esta aparência:

  sample_project/trunk/README.md
  sample_project/trunk/lib/widget.rb
  sample_project/branches/new_feature/README.md
  sample_project/branches/new_feature/lib/widget.rb
  sample_project/branches/another_new_feature/README.md
  sample_project/branches/another_new_feature/lib/widget.rb

Um fluxo de trabalho do SVN fica assim:

  • O diretório trunk representa a versão estável mais recente de um projeto.
  • O trabalho de recurso ativo é desenvolvido com subdiretórios em branches.
  • Quando um recurso é concluído, o diretório dele passa por merge em trunk e é removido.

Os projetos do Git também são armazenados em um único diretório. No entanto, o Git obscurece os detalhes das referências armazenando-os em um diretório .git especial. Por exemplo, um projeto do Git com dois recursos em desenvolvimento pode ter esta aparência:

  sample_project/.git
  sample_project/README.md
  sample_project/lib/widget.rb

Um fluxo de trabalho do Git fica assim:

  • Um repositório do Git armazena o histórico completo de todos os branches e tags dentro do diretório .git.
  • A versão estável mais recente está dentro do branch master.
  • O trabalho de recurso ativo é desenvolvido em branches separados.
  • Quando um recurso é concluído, o branch dele passa por merge em master e é excluído.

Ao contrário do SVN, a estrutura de diretórios no Git permanece a mesma, mas o conteúdo dos arquivos é alterado de acordo com o branch que você possui.

Incluir subprojetos

Um subprojeto é um projeto desenvolvido e gerenciado em algum lugar fora do projeto principal. Normalmente, você importa um subprojeto para adicionar alguma funcionalidade ao seu projeto sem precisar manter o código por conta própria. Sempre que o subprojeto é atualizado, você pode sincronizá-lo com o projeto para garantir que tudo esteja atualizado.

No SVN, um subprojeto é chamado de SVN externo. No Git, ele é chamado de submódulo do Git. Embora conceitualmente semelhantes, os submódulos do Git não são mantidos atualizados de forma automática. É preciso solicitar explicitamente que uma nova versão seja trazida para o projeto.

Veja a seguir alguns recursos externos que explicam as diferenças em detalhes:

Preservar o histórico

O SVN está configurado para pressupor que o histórico de um projeto nunca é alterado. O Git permite modificar alterações e commits anteriores usando ferramentas como git rebase.

O GitHub oferece suporte a clientes do Subversion, o que pode produzir alguns resultados inesperados se você está usando o Git e o SVN no mesmo projeto. Se você tiver manipulado o histórico de commits do Git, esses mesmos commits permanecerão para sempre no histórico do SVN. Caso tenha feito commit acidentalmente em alguns dados confidenciais, temos um artigo para ajudar você a removê-lo do histórico do Git.

Leia mais

Pergunte a uma pessoa

Não consegue encontrar o que procura?

Entrar em contato