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.

Esta versão do GitHub Enterprise será descontinuada em Esta versão do GitHub Enterprise foi descontinuada em 2020-01-22. No patch releases will be made, even for critical security issues. For better performance, improved security, and new features, upgrade to the latest version of GitHub Enterprise. For help with the upgrade, contact GitHub Enterprise support.

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