Publicidade

Mostrando postagens com marcador SVN. Mostrar todas as postagens

Comparação entre Subversion, Mercurial e Git




Suponha que uma empresa tenha decidido migrar seus projetos comerciais do Subversion para uma ferramenta de controle de versão distribuído (DVCS). Os candidatos possíveis são o Mercurial e o Git. O próximo passo é fazer uma análise comparativa para decidir qual o mais adequado.

A definição dos critérios de comparação depende muito do perfil do projeto. Projetos comerciais têm necessidades diferentes dos projetos open source. A hospedagem externa (Github , Bitbucket, Google Code etc.), por exemplo, não será um fator decisivo na escolha se o repositório oficial do projeto for mantido internamente na empresa.

Para determinar quais os critérios mais relevantes, é preciso primeiro definir o perfil do projeto. O perfil de um projeto comercial típico que usa Subversion pode ser descrito como:
  • Possui, no máximo, algumas dezenas de desenvolvedores, todos com acesso ao repositório pela rede local.
  • As equipes são formadas, em sua maioria, por desenvolvedores juniores com pouca ou nenhuma capacitação em Subversion e pouco conhecimento de inglês.
  • Os desenvolvedores juniores trabalham apenas no trunk usando apenas operações básicas como add, commit e update.
  • Os projetos evitam usar ramos para não ter de fazer mesclagem. Casos de mesclagem são executados por coordenadores/líderes de projeto, que são nível pleno ou sênior.
  • O ambiente de desenvolvimento é Windows.
O repositório central fica armazenado em um servidor na própria empresa.

De acordo com esse perfil, serão apresentados uma série de artigos comparando o Subversion (servindo de referência), Mercurial e o Git de acordo com os seguintes critérios:
  • Desempenho. É desejável que a ferramenta tenha o melhor desempenho possível. Contudo, só será um fator decisivo se houver uma diferença muito grande entre as ferramentas.
  • Funcionalidades. Ter muitas funcionalidades é interessante. Mas também só será decisivo se houver muita diferença entre os candidatos.
  • Complexidade. Quanto mais complexa a ferramenta, mais difícil de aprender e usar. Influencia a produtividade e também aumenta a chance de haver erros de operação durante atividades cotidianas de controle de versão.
  • Ramificação e Mesclagem. A mesclagem deve ser uma operação elementar se possível. A ramificação deve atender a todos os tipos de ramos possíveis e desejáveis.
  • Similaridade com o Subversion. Quanto mais próximo do Subversion for o fluxo de trabalho, comandos e modelo mental, menor será o esforço de transição para a nova ferramenta.
  • Funcionamento no Windows. É importante que a ferramenta funcione bem no ambiente de desenvolvimento. De preferência, com interfaces gráficas e plugins para as IDEs usadas.

    Versões Usadas Nas Comparações

    No momento em que este artigo foi escrito, as versões mais atuais das ferramentas analisadas eram:

    Subverion 1.7.5
    Mercurial 2.2.1
    Git 1.7.10


    No Ubuntu, as versões mais atuais podem ser obtidas através de ppas do Ubuntu, conforme os comandos abaixo:
  • $ sudo add-apt-repository ppa:dominik-stadler/subversion-1.7
  • $ sudo add-apt-repository ppa:mercurial-ppa/releases 
  • $ sudo add-apt-repository ppa:git-core/ppa 
  • $ sudo apt-get update $ sudo apt-get install subversion mercurial git 
O Mercurial não vem com os comandos fetch e rebase habilitados por padrão. Como eles serão usados em algumas comparações, é necessário ajustar a configuração conforme o comando abaixo:

$ sudo echo ' 
fetch = 
rebase = ' >> /etc/mercurial/hgrc.d/hgext.rc

Desempenho

A análise de desempenho entre o Subversion, Mercurial e o Git se baseia em um estudo de caso que simula operações cotidianas de controle de versão. O objetivo é definir se as variações nos tempos de execução são grandes o suficiente para ser usadas como critério de escolha.

As operações consideradas no estudo de caso são:
  1. Criação/clonagem de um repositório.
  2. Adição de arquivos
  3. Consolidação
  4. Visualização do estado, histórico e das diferenças
  5. Mesclagem (Merge)
  6. Comunicação entre repositórios (pull, fetch e push)

    O estudo de caso está automatizado por um script em bash. As operações manipulam apenas alguns arquivos por vez, pois é o que acontece nas consolidações comumente realizadas por desenvolvedores.

    O acesso ao repositório do Subversion é apenas local. Um repositório remoto dificultaria a replicação da experiência e adicionaria fatores não controlados como velocidade da rede à medição. Caso haja algum repositório remoto disponível para testes, o script fornecido pode facilmente ser modificado para acessá-lo e as medições ser refeitas.
Análise

Mesmo o Subversion se saiu muito bem nos testes, com tempo melhores até mesmo que o Mercurial em algumas operações. Certamente os tempos de algumas operações seriam piores caso o repositório fosse remoto e houvesse requisições concorrentes de processamento. Ainda assim, provavelmente os tempos continuariam satisfatórios.

As operações do Mercurial tiveram um tempo de execução bastante uniforme. Parte desse resultado se deve ao fato de o Mercurial ser escrito em Python e, por isso, há um tempo adicional de carregamento inicial do interpretador a cada comando.

Conforme esperado, o Git é extremamente rápido. O Subversion e o Mercurial são mais lentos que o Git em décimos de segundo. Mas em termos absolutos e práticos, essa diferença é insignificante e não tem impacto na produtividade. Sendo assim, pode-se afirmar que todas as ferramentas são satisfatoriamente rápidas na execução das suas operações e, portanto, desempenho não é um critério decisivo para escolha de ferramenta.

Melhor: Empate Técnico

Funcionalidades

O objetivo deste critério é apenas analisar o número de funcionalidades existentes, sem entrar no mérito de cada uma ou se determinada funcionalidade é importante ou não para um certo modo de trabalho. Na análise da “Similaridade com o Subversion” é que esses aspectos serão melhor abordados.

O Subversion possui naturalmente menos funcionalidades que o Mercurial e o Git porque o controle de versão centralizado é um subconjunto do distribuído. Com exceção dotravamento de arquivos, que não condiz com o DVCS, as operações feitas pelo Subversion também podem ser feitas pelo Mercurial e pelo Git. Algumas operações não fariam sentido para o Subversion, como push e pull por exemplo. Mas outras talvez pudessem ser incorporadas, como o bisect.

Desde 2005, quando começaram suas atividades, o Mercurial e o Git vêm se influenciando continuamente, com um incorporando características do outro. O Mercurial, por exemplo, implementou o rebase e apontadores para revisões (bookmarks) que eram do Git. O Git, por sua vez, implementou os comandos daemon e bundle equivalentes aos comandos servee bundle do Mercurial. Atualmente, chegaram a tal ponto que ambos podem ser considerados equivalentes em termos de funcionalidades.

Por isso, número de funcionalidades também não é um critério decisivo de escolha de ferramenta.

Melhor: Mercurial e Git.

Conclusão

A escolha da ferramenta de DVCS precisa ser baseada em critérios relevantes ao perfil do projeto. Dentre o vários sugeridos, dois critérios já foram apresentados neste primeiro artigo: Desempenho e Funcionalidades. Mas, como mostraram as medições, houve empate tanto no desempenho do Subversion (com acesso a um repositório local), Mercurial e Git, quanto no número de funcionalidades do Mercurial e do Git.

Trabalhando com SVN Google Hosting + Eclipse

Tudo bem pessoal! Confesso que tenho admiração pela Google por conta dos recursos que ela disponibiliza. Um deles que descobri recentemente é o uso da SVN. Usamos uma SVN por diversos motivos. 

  1. Para ter um backup do seu projeto e garantir que ele esteja disponível em qualquer lugar que você esteja;
  2. E garantir também o acesso múltiplo ao código. Todas as alterações que são feitas por uma pessoa irão refletir para o outra.
Para explicar tudinho vai demorar um pouquinho,mas se você já conhece alguma coisa, absorva somente o necessário para o seu conhecimento.

Então vamos lá. Primeiramente vou demonstrar como colocar um projeto já existente no seu Elipse na SVN da Google.

Entre neste link da Google http://code.google.com/hosting/ e crie um projeto.Após criado a projeto aparecerá uma aba chamada Source onde você encontrará o seu Login (seu Email), sua senha e o endereço do seu projeto: https://NomeDoProjeto.googlecode.com/svn/trunk/

Agora usando o Eclipse. Siga os passos:

  1. Clique com o botão direito em cima do projeto e clique em TEAM;
  2. Clique em SHARE PROJECT... Selecione SVN;
  3. Selecione Create a new repository localtion;
  4. Nesta próxima tela informe o Endereço do projeto, seu Login(Email) e Senha que estão na aba Source do link da Google e clique em Next ->  Next ->  Next ... Até Concluir!

Feito isso, pronto. Seu projeto já está na SVN da Google!!!

Vamos a outra situação agora... Suponhamos que já tem um projeto salvo na SVN e quer apenas baixá-lo para o seu Eclipse.

Bem simples! Basta abrir o Eclipse e clicar no aba File -> Import. Procure por SVN. Em seguida siga os mesmos passos anteriores. 

  1. Selecione Create a new repository localtion;
  2. Nesta próxima tela informe o Endereço do projeto, seu Login(Email) e Senha que estão na aba Source do link da Google e clique em Next ->  Next ->  Next ... Até Concluir!
É isso aí! Espero que tenham gostado. Grande abraço e até a próxima!