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