Skip to main content

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.

Estrutura do diretório

Cada referência, ou instantâneo rotulado 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 última versão estável de um projeto.
  • O trabalho de recursos ativos é desenvolvido em subdiretórios em branches.
  • Quando um recurso é concluído, o diretório de recursos é mesclado em trunk e removido.

Os projetos do Git também são armazenados em um único diretório. No entanto, o Git oculta os detalhes das referências armazenando-as 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 Git armazena todo o histórico de todos os branches e de todas as tags no diretório .git.
  • A última versão estável está contida no branch-padrão.
  • O trabalho de recurso ativo é desenvolvido em branches separados.
  • Quando um recurso é concluído, o branch de recurso é mesclado no branch-padrão 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 que é 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 externo SVN. No Git, ele é chamado de submódulo 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.

Para obter mais informações, confira "Submódulos de Ferramentas do Git" na documentação do Git.

Preservar o histórico

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

O GitHub dá suporte aos clientes do Subversion, o que poderá produzir alguns resultados inesperados se você estiver 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. Se você acidentalmente fez commit de dados confidenciais, temos um artigo que ajudará você a removê-los do histórico do Git.

Observação: o suporte ao Subversion será removido com a versão 3.13 do GitHub. Para saber mais, confira o blog do GitHub.

Leitura adicional