Pular para o conteúdo principal

Comparação de Complexidade entre Subversion, Mercurial e Git Baseada em Quantidade de Texto de Ajuda

Como medir a complexidade do Subversion, Git e Mercurial? Uma forma simples e direta é a partir da quantidade de texto de ajuda: quanto mais simples uma ferramenta, menos linhas são necessárias para explicar seu funcionamento. Essa ideia é bem ilustrada pelo tweet abaixo:

Em outras palavras:

Invista na simplicidade e economize na explicação.

Escolha dos Comandos Mais Comuns

O Subversion, Git e o Mercurial possuem dezenas de comandos cada um. Nem todos são usados com a mesma frequência. Por isso, vamos selecionar apenas os comandos mais comuns, relacionados com tarefas cotidianas de desenvolvimento:

  • Adicionar, copiar, mover e remover arquivos
  • Visualizar estado e mudanças na área de trabalho
  • Analisar histórico
  • Consolidar e sincronizar repositório(s)
  • Criação de ramos e etiquetas

Os comandos selecionados são: add, backout, blame, branch, cat, checkout, clone, commit, copy, diff, log, merge, mv, pull, push, rebase, reset, revert, rm, show, status, update e tag.

Alguns desses comandos só funcionam em uma ou outra ferramenta. Outros têm o mesmo nome, mas executam ações diferentes. Por isso, o que importará não será cada comando individual nem o total de linhas, mas sim a média de número de linhas por comando.

A tabela a seguir mostra os números coletados:

Número de Linhas de Ajuda por Subcomando
svn hg git
add 41 66 331
backout 85
blame 72 59 392
branch 51 269
cat 41 50
checkout 65 431
clone 136 320
commit 55 92 479
copy 63 47
diff 105 94 935
log 139 143 1.850
merge 395 54 627
mv 66 47 58
pull 56 663
push 67 644
rebase 120 811
reset 352
revert 42 62 116
rm 51 63 149
show 1.083
status 138 98 215
update 97 73
tag 61 295
Total linhas 1.370 1.524 10.020
Número de comandos 14 20 19
Média linhas/comando 98 76 527
In order to use the Chart directive, you must install the "pygal" Python package.

Análise

Algumas surpresas nos resultados. Esperava-se que o Subversion fosse o mais simples por ser um controle de versão centralizado, mas não foi o que aconteceu. O Mercurial foi quem apresentou os textos de ajuda mais curtos na média, mesmo usando as versões estendidas da ajuda (hg help --verbose <subcomando>).

Os resultados indicam que os comandos do Mercurial são mais simples do que os do Subversion e do Git.

No geral, o tamanho dos textos de ajuda dos comandos do Subversion e do Mercurial foram muito próximos, com exceção do subcomando merge, que tem um texto muito mais longo no Subversion. O motivo é porque o Subversion utiliza diretórios para implementar ramificação e isso acaba gerando uma série de casos particulares na mesclagem que precisam ser melhor explicados. No Mercurial, a mesclagem é baseada em grafos e não há casos especiais a serem tratados.

Não foi surpresa o Git ficar em último lugar.

Já se sabe faz tempo que o Git é bastante complexo [1] [2] [6] [4] [5] e isso se reflete claramente nos seus textos de ajuda. Os resultados apenas confirmaram as expectativas, mas causam um certo espanto. Enquanto o Mercurial e o Subversion estão próximos, o Git está em outra ordem de grandeza em complexidade, sendo 5 vezes mais complexo que o Subversion e 7 vezes mais complexo que o Mercurial para as comandos básicos selecionados.

Comentários

Comments powered by Disqus