A mais fácil, rápida e melhor forma de organizar seus projetos

Um sistema de controle de versões (SCV) ou Version Control System (VCS) é uma importante ferramenta para desenvolver e gerenciar projetos com conteúdo digital (códigos-fonte, arquivos de texto, imagens, entre outros tipos). Um SCV facilita a gestão das modificações em um projeto, salvando as diferentes versões desenvolvidas ao longo do seu progresso.

Figura 1 - Projetos colaborativos.
Figura 1 – Projetos colaborativos.

Benefícios do controle de versão

O controle de versões é opcional para projetos individuais, mas se torna essencial para projetos em grupos. Imagine fazer um projeto com mil, duas mil atualizações e salvar cada versão separadamente. Esse seria um controle manual de versões, o mais comum e também o mais problemático de todos. Inevitavelmente, chegará o momento em que o desenvolvedor se encontrará perdido em meio a tantas versões e arquivos, ocorrendo erros comuns como:

■ Sobrescrever um arquivo errado.
■ Dificuldade em saber quais foram as alterações feitas em cada versão.
■ Perda de arquivos.

Isso são apenas alguns exemplos dos inúmeros problemas que podem ocorrer em seu trabalho com a utilização de um controle de versões manual. Se pareceu difícil ter um controle adequado dos seus arquivos sendo apenas um desenvolvedor, imagine quando tivermos dez pessoas trabalhando ao mesmo tempo no mesmo arquivo, é como se multiplicássemos os problemas por dez. Vejamos um exemplo simples (Figura 2) :

Benny, Anni, Frid estão desenvolvendo um programa para um dispositivo móvel responsável por coletar, armazenar informações e enviar estas informações por e-mail ou mensagem. Este programa é composto por três módulos principais: [1] interface gráfica para o usuário inserir as informações, [2] banco de dados para armazenamento das informações inseridas pelo usuário e [3] sistema de comunicação para envio das informações armazenadas por e-mail. Benny ficou responsável por escrever o código do módulo [1], enquanto que Anni e Frid ficaram responsáveis por desenvolver os códigos dos módulos [2] e [3], respectivamente.

À medida que o projeto progride, os três desenvolvedores escreveram diversas versões para seus respectivos módulos. Por exemplo, Benny implementou 8 (V1,V2…V8) modificações no código do seu módulo até chegar em uma versão funcional, Anni produziu 6 versões (V1,V2….V6) do seu módulo e Frid obteve a primeira versão do sistema de comunicação após 15 dias de trabalho (e várias adições, correções e testes no código-fonte).

 

Figura 2 - Comparativo entre fluxos do projeto sem SCV e com SCV.
Figura 2 – Comparativo entre fluxos do projeto sem SCV e com SCV.

 

Se o projeto não empregou SCV, é possível que a manutenção do projeto se torne complicada:
■ Quais versões dos módulos estão aptas para integração no programa final?
■ O que acontece se uma versão ou trecho de código foi apagado inadvertidamente?
■ Como voltar rapidamente a uma versão do projeto quando a versão atual não estiver funcionando adequadamente?
■ Como fazer a integração do projeto sem estragar o módulo desenvolvido pelo colega?
■ Como fazer tudo isso sem precisar ficar salvando manualmente cada arquivo em um local separado?

Funcionamento e estrutura
O funcionamento do controle de versões pode ser dividido em duas partes, repositório e espaço de trabalho. O repositório armazenará todo o histórico de evolução do projeto, registrando toda e qualquer alteração feita em cada item modificado. Já o espaço de trabalho é onde se localiza o trabalho direto do desenvolvedor, uma vez que o mesmo não trabalha diretamente nos arquivos do repositório. Ele possui uma cópia em sua área de trabalho, que é monitorada para identificar mudanças realizadas, uma área isolada e individual em relação as demais.

Dois comandos são essenciais para a sincronização, são eles: o download e o upload. Com o upload teremos o envio do projeto que estava contido na área de trabalho do desenvolvedor (origem), podendo ser feitos comentários sobre alterações no projeto, para o repositório (destino). No upload também são feitas revisões sobre a atualização do projeto, como horário, data e autor, fazendo um histórico organizado do projeto, considerando que o desenvolvedor poderá acessar os uploads anteriores, caso seja desejado. Com o upload podemos enviar à central o projeto atualizado para que todos os membros possam baixá-la.

Tipos de controle de versão
Dentro do controle de versões temos dois tipos, são eles: o controle de versões centralizado e distribuído.

O centralizado oferece muitas vantagens, principalmente se comparado contra um gerenciamento manual do projeto. Por exemplo, cada desenvolvedor do projeto sabe o que o outro está fazendo. Os administradores têm controle total sobre quem pode fazer o que, além de ser muito mais fácil administrar um Controle de Versões Centralizado (CVC) do que lidar com bancos de dados locais sobre cada cliente/desenvolvedor.

Já com o controle de versões distribuído (CVD) você vai além, pois os desenvolvedores do projeto não dependem primordialmente do servidor central. No CVD não são feitas apenas cópias das últimas versões dos arquivos, mas sim cópias completas do repositório. Caso um servidor falhe, qualquer um dos devolvedores é capaz de recolocar no servidor os arquivos perdidos, como uma forma de restaurar o progresso perdido.

E você, utiliza algum tipo de sistema de controle de versões? Veja qual é o melhor para seu projeto no próximo artigo desta série.

Referências:

1. Conceitos básicos sobre sistema de controle de versões
2. Primeiros passos sobre controle de versão (Git)
3. Sistema de controle de versão (Wikipedia)
4. Análise comparativa entre SCVs
5. Os 6 melhores SCVs open-source