Controle de Versão Distribuído

Você sabe “O que é Controle de Versão“, e por quê é importante no desenvolvimento de software?

Controle de versão é um sistema que registra alterações em um arquivo ou conjunto de arquivos ao longo do tempo, para que você possa, se necessário, recuperar e manipular versões específicas ao longo do tempo. Em geral é utilizado em arquivos de código-fonte de software que possuam controle de versão, embora na realidade você possa fazer isso com quase qualquer tipo de arquivo em um computador.

Assista o vídeo deste conteúdo

Se você é um designer gráfico ou web designer ou programador, e quer manter todas as versões de uma imagem ou layout ou programa – o que você certamente deveria querer, um sistema de controle de versão (VCS – Version Control System) é a ferramenta correta a ser usada.

  • Ele permite que você reverta para qualquer estado anterior determinados arquivos ou um projeto inteiro,
  • compare as mudanças ao longo do tempo,
  • veja quem modificou pela última vez algo que pode estar causando um problema,
  • quando e quem introduziu um problema,
  • e muito mais.

Usar um VCS também significa que se você estragar tudo ou perder arquivos, pode facilmente recuperar com muito pouco trabalho.

Podemos citar três estratégias diferentes de sistemas que podem ser utilizadas para controlar versões de arquivos ou projetos, são elas:

  • sistemas locais de controle de versão
  • sistemas centralizados de controle de versão
  • sistemas distribuídos de controle de versão

Sistemas Locais de Controle de Versão

O método de controle de versão de muitas pessoas é copiar os arquivos para outro diretório – talvez um diretório com carimbo de tempo.

Esta abordagem é muito comum porque é simples, mas também é incrivelmente propensa a erros. É fácil esquecer em qual diretório você está e, acidentalmente, sobrescrever o arquivo errado ou copiar arquivos que não deveria.

Para lidar com este problema, programadores há muito tempo desenvolveram os VCS locais que possuem um banco de dados simples o qual mantêm todas as alterações nos arquivos sob controle de revisão.

Na figura de exemplo, o arquivo representado pelo ícone verde, tem suas várias versões referenciadas dentro do banco de dados de versão. Tudo isto sendo controlado no computador local.

Controle de Versão Local

Uma das ferramentas VCS Locais mais populares foi um sistema chamado RCS, que ainda é distribuído com muitos computadores atualmente.

Até mesmo o popular sistema operacional Mac OS X inclui o comando rcs quando você instala as Ferramentas de Desenvolvimento.

O RCS funciona mantendo conjuntos de alterações (ou seja, as diferenças entre os arquivos) em um formato especial no disco rígido; ele pode, em seguida, re-criar qualquer arquivo como era em qualquer ponto no tempo, para isto adicionando todas as suas alterações.

Sistemas Centralizados de Controle de Versão

A próxima questão importante que as pessoas encontram é a necessidade delas colaborarem com desenvolvedores em outros sistemas ou projetos.

Para lidar com este problema, os Sistemas Centralizados de Controle de Versão (CVCS) foram desenvolvidos.

Estes sistemas, tais como o Subversion e o Perforce, têm um único servidor que contém todos os arquivos de controle de versão, e um número de clientes que usam arquivos a partir desse local central.

Por muitos anos, este foi a estratégia padrão da indústria de desenvolvimento de software para o controle de versão de programas.

Na figura de exemplo a seguir, o controle de versão é centralizado em um computador na rede, o servidor central de VCS.

Controle de Versão Centralizado

Neste computador central fica o banco de dados com as versões dos arquivos.

Cada pessoa que necessita trabalhar com um determinado arquivo, deve realizar um checkout do mesmo para o seu computador, e, após alterá-lo, realizar um checkin retornando as mudanças para o servidor central.

Esta configuração oferece muitas vantagens sobre o controle de versão local. Por exemplo: todo mundo sabe, até certo ponto o que todos os envolvidos no projeto estão fazendo.

Os administradores têm controle refinado sobre quem pode realizar quais alterações; sendo também muito mais fácil de administrar um servidor centralizado do que lidar com bancos de dados locais em cada computador “cliente”.

No entanto, esta configuração também tem algumas desvantagens graves.

O mais óbvio é o ponto único de falha que o servidor centralizado representa. Se esse servidor apresentar problemas por uma hora, durante este período ninguém poderá colaborar ou salvar as alterações de versão para o que quer que eles estejam trabalhando.

Se o disco rígido do banco de dados central for corrompido, e backups apropriados não forem mantidos, você perde absolutamente tudo – toda a história do projeto, exceto imagens pontuais que desenvolvedores possam ter em suas máquinas locais.

Sistemas VCS locais sofrem com esse mesmo problema, isto significa que sempre que você tem toda a história do projeto em um único local, existe o alto risco de perder tudo.

Sistemas Distribuídos de Controle de Versão

É neste ponto que Sistemas Distribuídos de Controle de Versão (DVCS) entram em cena. Atualmente pode-se afirmar que estes sistemas se confundem com a explicação sobre “o que é controle de versão”.

Em um VCS, como: Git, Mercurial, Bazaar ou Darcs, os clientes não somente usam o estado mais recente dos arquivos: eles duplicam localmente o repositório completo.

Clique aqui e leia este artigo no blog, que ensina o Git básico.

Desta maneira, se qualquer servidor morrer, e diversas pessoas estiverem colaborando por meio de um sistema distribuído de controle de versão, qualquer um dos repositórios de clientes podem ser copiado de volta para o servidor para restaurá-lo.

Podemos afirmar que cada clone de repositório é, de fato, um backup completo de todos os dados.

Na figura de exemplo a seguir, o controle de versão possui um repositório central, onde todos os clientes colaboram enviando suas alterações e recuperando as mudanças dos demais colaboradores.

Controle de Versão Distribuído

Porém, como está demonstrado em cada computador, o banco de dados de versão é duplicado entre os diversos colaboradores, de forma a apresentar distribuidamente diversas cópias dentre todos os colaboradores.

Além disso, muitos desses sistemas trabalham muito bem com vários repositórios remotos, tal que você possa colaborar em diferentes grupos de pessoas de maneiras diferentes ao mesmo tempo dentro do mesmo projeto.

Isso permite que você configure vários tipos de fluxos de trabalho que não são possíveis em sistemas centralizados, como, por exemplo, modelos de trabalho hierárquicos.

Este post apresentou uma visão geral sobre o que é controle de versão e suas diferentes abordagens por sistemas. Ele é livremente baseado no livro Pro Git.


Para aprender Versionamento de Software e Controle de Versão na prática, leia os artigos do blog que ensinam Git:

  • Controle de Versão – O que é?
    Você sabe “O que é Controle de Versão“, e por quê é importante no desenvolvimento de software? Controle de versão é um sistema que registra alterações em um arquivo ou conjunto de arquivos ao longo do tempo, para que você possa, se necessário, recuperar e manipular versões específicas ao longo do tempo. Em geral é… Continue a ler »Controle de Versão – O que é?
  • Diferença de TAG e BRANCH em GIT
    As ferramentas de versionamento de software adotam, em geral, as nomenclaturas dos conceitos de suas áreas de aplicação. Dois conceitos frequentemente encontrados, porém com pequenas diferenças de aplicação conceitual nos softwares de controle de versão são: TAG e BRANCH. Para esclarecer seu uso, pergunto, você saberia dizer qual a diferença conceitual e de usabilidade de… Continue a ler »Diferença de TAG e BRANCH em GIT
  • Git – Dicas Rápidas
    Em qualquer ferramenta utilizada e mesmo dominada no dia-a-dia, seja em desenvolvimento de software, ou qualquer outra área, sempre vai apresentar um conjunto de opções, comandos ou características que são extremamente úteis, porém necessitam ser consultados com dicas rápidas todas as vezes que é necessária sua utilização, Git não é uma exceção. Este artigo tem… Continue a ler »Git – Dicas Rápidas
  • O que é Gerenciamento de código fonte
    Gerenciamento de código fonte (do Inglês Source Code Manegement – SCM) é usado para rastrear modificações em um repositório de código fonte de um projeto de desenvolvimento de software. O SCM monitora o histórico de mudanças em execução em uma base de código e ajuda a resolver conflitos ao mesclar atualizações de vários programadores. SCM… Continue a ler »O que é Gerenciamento de código fonte

Mantenha-se atualizado

Não esqueça de me seguir no Twitter e assinar o Canal Mazer.dev no Youtube para receber atualizações de novos artigos, vídeo aulas e cursos gratuitos em desenvolvimento e engenharia de software.

2 comentários em “Controle de Versão – O que é?”

  1. Pingback: O que é Gerenciamento de código fonte - Versionamento de Software- MAZER.DEV

  2. Pingback: Git Básico - introdução e comandos essenciais - MAZER.DEV

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *