De que se trata o artigo: Aborda os conceitos de um sistema de controle de versões através da implementação e configuração de um repositório servidor e das estações de trabalho utilizando a ferramenta Open Source TortoiseSVN.


Em que situação o tema é útil:
Este artigo apresenta soluções para os problemas relacionados ao desenvolvimento de grandes projetos de software e principalmente em conjunto com vários desenvolvedores. Com um sistema de controle de versões implantado pode-se garantir o registro de toda a evolução do projeto, além de permitir reconstruir uma revisão específica de um arquivo sempre que desejado.

Resumo DevMan: Este artigo visa auxiliar o aprimoramento da estrutura da equipe de desenvolvimento, com a finalidade de gerenciar diferentes versões no desenvolvimento de software, históricos e desenvolvimento de códigos fonte e documentação, o que possibilita vários desenvolvedores trabalharem em paralelo sobre os mesmos arquivos sem que um sobrescreva o código do outro.

O controle de versão, ou versionamento, é uma prática comum na Engenharia de Software para manter o código fonte atualizado no contexto da equipe de desenvolvimento.

Sistemas de controle de versões são ferramentas de apoio aos desenvolvedores cuja principal função é controlar as modificações realizadas em um arquivo de projeto. Ainda possuem um mecanismo automatizado para identificar e controlar as modificações realizadas nos arquivos de um projeto ao longo do tempo, garantindo integridade e rastreabilidade das modificações. O controle de versões é visto como uma extensão natural do processo de desenvolvimento, permitindo que se possam realizar modificações paralelas e de forma coerente e padronizada, especialmente se tratando de equipes geograficamente dispersas.

O repositório é o componente principal do sistema de controle de versões. É o seu núcleo, composto por uma sequência de revisões armazenadas ao longo do tempo. Em geral, o usuário só interage diretamente com o repositório durante operações de leitura. A escrita no repositório é realizada por intermédio de outro componente denominada cópia de trabalho.

Cada revisão do repositório representa o estado completo do documento ou projeto em um determinado instante no tempo. Para um software, isso significa que uma revisão contém toda a árvore de diretórios e os arquivos no estado em que se encontravam naquele momento.

O CVS (Concurrent Version System), um conhecido sistema de controle de versões, foi inicialmente baseado em um sistema de controle de versões bastante simples, chamado RCS (Revision Control System), capaz de trabalhar apenas com arquivos individuais, e não projetos inteiros, como o Subversion (SVN), um outro importante e conhecido sistema de controle de versões. Hoje, esse modelo adotado pelo CVS já está obsoleto.

Após criadas, as revisões são imutáveis, pois fazem parte do histórico do projeto. Algumas ferramentas permitem alterar ou remover revisões antigas, mas não é um procedimento natural de um sistema de controle de versões.

Cada revisão está ligada à sua revisão diretamente ancestral e geralmente é armazenada como "uma fotografia" do momento (Figura 1).

Fotografias em sistemas nos estilos CVS e SVN

Figura 1. “Fotografias” em sistemas nos estilos CVS e SVN

A cópia de trabalho é uma cópia usável do projeto contido no repositório, em uma determinada revisão. Por padrão, obtém-se uma cópia de trabalho da última revisão, pois é sobre ela que o desenvolvedor prossegue com o desenvolvimento do projeto.

O processo de obtenção de uma cópia de trabalho é chamado de checkout. Sobre a cópia de trabalho, o desenvolvedor realiza as modificações no projeto, de forma semelhante a como faria sem o sistema de controle de versões. O sistema conhece o estado da cópia de trabalho original e, através dela, é possível reconhecer onde foram realizadas alterações.

Algumas operações precisam ser informadas explicitamente ao sistema de controle de versões, como adição, remoção e cópia de arquivos.

A submissão, ou commit, consiste em registrar o estado atual da cópia de trabalho com suas alterações de volta ao repositório. Uma nova revisão é criada como resultado da submissão. Após a submissão, a cópia de trabalho já é considerada como sendo derivada da nova revisão e o desenvolvedor pode continuar fazendo novas alterações e novas submissões normalmente.

Ramificações ocorrem quando, por um motivo qualquer, o desenvolvimento do projeto em uma determinada revisão precisa seguir um rumo diferente da linha de desenvolvimento principal. Quando uma ramificação ocorre, duas ou mais revisões possuem uma única revisão ancestral. O desenvolvedor pode, portanto, submeter alterações para qualquer uma das revisões.

As ramificações podem ser explícitas ou implícitas. Ramificações explícitas ocorrem quando você informa ao sistema de controle de versões para bifurcar a linha de desenvolvimento em determinado ponto. Essa pratica é de grande utilidade para manter versões legadas de software (por exemplo, lançar uma versão 1.1 do programa com uma pequena correção em relação à versão 1.0, enquanto o desenvolvimento principal segue em direção à versão 2.0), implementar novos recursos que podem causar períodos de instabilidade no código, ou fazer experiências sem afetar a linha principal de desenvolvimento.

Ramificações implícitas ocorrem quando o desenvolvimento se ramifica de uma forma natural, sem um procedimento especial junto ao controle de versões. Por exemplo, dois ou mais desenvolvedores obtém cópias de trabalho da mesma última revisão do repositório, e fazem alterações em suas cópias simultaneamente. Nesse caso, cada cópia de trabalho representa uma ramificação implícita, que o controle de versões não participa até o momento da submissão.

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