SdevLab – Artigo | O que é um Sistema de Controle de Versões?

Fala galera!

Depois de um longo período de inatividade volto a escrever, e hoje o que trago para vocês é um artigo sobre Sistema de Controle de Versões. Primeiro eu ia escrever sobre GitHub, mas falar sobre GitHub sem falar sobre Git não seria muito legal. E falar sobre Git sem falar sobre Sistema de Controle de Versões também não. Então, vamos ao post!

Sistema de Controle de Versões

Um sistema de controle de versões é um sistema que faz o registro de versões de um arquivo. Porque isto é importante? Imagine uma equipe de desenvolvimento que trabalha em um projeto. Um dos membros desta equipe trabalha remotamente (o que é muito comum hoje em dia) e faz uma alteração no código deste projeto. Como ele pode garantir que a equipe que trabalha na sede da empresa vai ter a versão mais recente do código? E se um dos membros da equipe altera erroneamente o código do projeto e tudo para de funcionar, como voltar rapidamente para a versão anterior ao erro? Estas perguntas podem ser respondidas com a mesma resposta, utilizando um sistema de controle de versões. Com ele a equipe pode tanto garantir que todos possuam uma mesma fonte do código que trabalham, quanto a recuperação de uma versão estável no caso de uma eventualidade durante o desenvolvimento.

O exemplo da equipe de desenvolvimento é uma maneira fácil de explicar o que é e para que serve um sistema de controle de versões. Porém, ele não foi feito exclusivamente para trabalhar com arquivos de código fonte de um projeto. Um controle de versões pode ser usado para trabalhar com qualquer tipo de arquivo.

Mas pensando sobre os dois parágrafos acima, poderíamos chegar a seguinte questão: No exemplo da equipe de desenvolvimento, se eu fizesse um organização baseada em cópias das pastas do projeto eu poderia resolver a parte de voltar a versão estável no caso de um erro, não poderia? A resposta é sim, é uma alternativa muito simples para resolver o problema, muito utilizada pela sua simplicidade, mas existe o porém de ser muito suscetível a erros, além disso, a questão do colaborador que trabalha remotamente ainda ficaria sem solução. Por hora deixemos de lado o desenvolvedor que trabalha remotamente e vamos focar na questão de somente manter versões dos arquivos.

Para lidar com a questão de versionamento, ha muito tempo atrás desenvolvedores criaram o Sistema de Controle de Versões, que era um sistema que mantinha um banco de dados atualizado com dados de revisões dos arquivos de um projeto. Isto resolvia o problema quando somente uma pessoa trabalhava no projeto em questão, mas, e quanto a projetos colaborativos?

Para resolver esta questão surgiram os Sistemas de Controle de Versão Centralizados, entre eles estão os famosos CVS e Subversion (SVN). Estes sistemas possuem uma fonte centralizada (repositório) onde vários colaboradores podem pegar versões recentes de algum arquivo (checkout), e/ou atualizar algum arquivo em que tenham trabalhado (update), além de poder gravar na versão comum do projeto (a que todos recebem quando fazem um checkout) quando a alteração realizada é valida (commit), via software cliente.

É chegada a hora de voltar a questão que foi deixada de lado (desenvolvedor que trabalha remotamente). Uma vez que este sistema de controle de versões fica em um servidor, este pode ser colocado online, resolvendo assim a questão de colaboradores remotos. Antes de começar a trabalhar, o desenvolvedor faz um checkout do projeto, e antes de ir embora faz um commit ou update, dependendo do que foi desenvolvido durante o dia. Assim quando outra pessoa for trabalhar no projeto, ela continua onde de onde o último desenvolvedor a dar um commit parou.

Por muitos anos este sistema foi utilizado, porém nem tudo são flores. Se algo ruim acontece com o servidor onde fica hospedado nosso sistema, podemos dizer adeus ao nosso projeto. Se o problema não for tão sério, por exemplo uma interrupção temporária do servidor, não perderíamos o projeto mas teríamos um longo período de inatividade da equipe, com a falta de acesso ao repositório de arquivos.

Finalmente, para resolver este último obstáculo (exceto este problema, tudo ia muito bem no mundo do desenvolvimento, no que se refere à esta questão) surgiram os Sistemas de Controle de Versão Distribuídos. Aqui o colaborador não faz somente um checkout para obter a última versão de um arquivo. Ele espelha o repositório do servidor. A vantagem disso é que se acontece alguma coisa ruim com o servidor, onde todos os dados fossem perdidos, qualquer colaborador poderia restaura-lo. Cada checkout que você faz, é um backup completo do servidor.

Um exemplo de sistema de controle de versões distribuído é o Git, que será tema do próximo post.

Até lá!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s