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:
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 |
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