Artigo do tipo Teórico
Recursos especiais neste artigo:
Conteúdo sobre arquitetura.
Autores: Gustavo Zanatta Bruno e Gustavo Alexandre Sousa Santos

Análise Comparativa entre os Sistemas de Controle de Versão Distribuídos Git e Mercurial
Um sistema de controle de versão (SCV) é um software que tem a finalidade de gerenciar as diferentes versões que são produzidas durante o processo de elaboração de um documento qualquer. Estes softwares são muito utilizados para auxiliar a tarefa de desenvolvimento de software, sendo empregados para controlar as diferentes versões — histórico e desenvolvimento — dos códigos-fontes e também da documentação. Este artigo apresenta a análise de desempenho dos sistemas de controle de versão distribuídos Git e Mercurial com relação ao tempo gasto na execução de dez commits para diferentes tipos de arquivo (imagem, vídeo, 3D e executável) e o espaço de armazenamento consumido pelo repositório em disco.


Em que situação o tema é útil

Os resultados apresentados neste trabalho são úteis para direcionar na escolha de um sistema de controle de versão mais adequado conforme alguns tipos específicos de arquivos binários, no contexto em que o usuário necessita de uma abordagem de versionamento distribuído. Por exemplo: desenvolvimento de jogos, edição de vídeos, edição de imagens, geração de releases, entre outros.

Gerência de configuração de software é a área da Engenharia de Software utilizada para controlar a evolução de sistemas de software. Sistemas de Gerência de Configuração (SGC) inicialmente representavam sistemas com a finalidade de controlar a evolução de sistemas complexos, que surgiram entre o final da década de 70 e início dos anos 80, e que tiveram um bom amadurecimento durante a década de 90. Dentro desse contexto e visando efetuar um melhor e maior controle sobre a evolução do software, os SGC utilizam-se principalmente de sistemas de controle de versão (SCV).

Sistemas de controle de versão são imprescindíveis ao bom desenvolvimento de software, principalmente em grandes projetos, que demandam grandes equipes e consequentemente, promovem um alto volume de modificações. Existem dois tipos definidos de sistemas de controle de versão: centralizados(SCVc) e distribuídos (SCVd).

Nos SCVc, os desenvolvedores trabalham em um único repositório central que está localizado em um diretório diferente daquele em que as alterações são feitas, que pode ser chamado de "cópia de trabalho", diretório pessoal onde ficam cópias do projeto: uma para cada colaborador.Esse repositório pode ser acessado atravésda SSH,ou por algum sistema de protocolo.O repositório central deve estar disponível sempre que for necessário confirmar suas alterações para assim submetê-las.As confirmações de alteração podem ser feitas de uma forma simples, onde todos tenham acesso, ou pode-se ter um mecanismo de autenticação através de senha, por exemplo. A partir disso, mudanças e alterações devem ser submetidas no repositório por cada desenvolvedor. No entanto, alterações simultâneas podem gerar conflitos quando uma pessoa altera o mesmo arquivo em que outra pessoa está trabalhando. Sendo assim, uma maneira de evitar que isso aconteça é, antes de enviar qualquer alteração para o repositório, a partir da sua "cópia de trabalho", é garantir que a mesma esteja atualizada contendo as mudanças realizadas pelos outros desenvolvedores. Um dos SCVc mais popularmente utilizados na prática é o Subversion.

Alguns acreditam que os Sistemas de Controle de Versão devem principalmente permitir que desenvolvedores possam trabalhar de forma assíncrona e independente e, em seguida, sincronizar e obter as alterações a partir dos outros desenvolvedores e vice-versa. O desenvolvimento da comunidade de software livre deve-se em grande parte a essa abordagem descentralizada, baseando-se em colaboração e compartilhamento de código e informações entre desenvolvedores. Esse tipo de sistema distribuído érelativamente recente.Ele oferece algumas vantagens significativas sobre a abordagem mais tradicional e tem algumas características que o distancia dos sistemas centralizados. Por exemplo, cada desenvolvedor possui o seu próprio repositório com uma cópia de trabalho, sendo que as operações de atualização podem ser efetuadas apenas localmente num determinado momento e, futuramente, submetidas ao repositório. Ou seja, o código que um desenvolvedor tem em seu computador pode ser completamente diferente daquele que está no repositório central ou na cópia de trabalho de outro desenvolvedor.

...
Quer ler esse conteúdo completo? Tenha acesso completo