Controle de versões – Breve introdução
Conceito
Sistemas de controle de versões são muito utilizados por desenvolvedores de softwares ao redor do mundo, basicamente permite que um desenvolvedor ou uma equipe mantenha um ou mais arquivo em um repositório onde se possam recuperar versões anteriores do(s) mesmo(s) a qualquer tempo. Provavelmente todas as pessoas que lidam com arquivos em microcomputadores, de uma forma ou de outra, fazem, mesmo que inconscientemente, uso de controle de versões. Imaginemos, por exemplo, um advogado que esteja elaborando uma complexa defesa para um cliente, em determinado ponto se dá por satisfeito, imprime a mesma, mas dias depois novos fatos surgem e ele percebe que precisaria alterar parte considerável do documento, mas gostaria de manter o documento original para uma eventual necessidade caso os novos fatos não possam ser comprovados. O que a maioria das pessoas fazem para solucionar este problema é fazer as alterações no arquivo e salva-lo com um nome diferente, por exemplo, digamos que arquivo original tenha nome “defesa_cliente_x.doc”, fazemos as alterações neste arquivo e o salvamos com o nome “defesa_cliente_x_2.doc”. Desta forma mantemos o controle sobre as duas versões, a versão original e a versão para a possibilidade da comprovação dos novos fatos. Para desenvolvedores de softwares o controle manual das versões pode ser tornar quase impossível, pois os arquivos fontes são alterados com muita freqüência e a qualquer momento pode-se necessitar de uma versão de um determinado arquivo (entre muitos). Isto ainda é mais problemático quando os arquivos precisam ser compartilhados, imagine a confusão que não seria ter um arquivo ou vários arquivos repetidos dezenas de vezes com nomes diferentes em uma pasta.
Vantagens de um sistema VCS
A grande vantagem de um sistema de controle de versões automático é que as versões dos arquivos são armazenadas em um local apropriado para isto, fora da área de trabalho do usuário e que pode ser disponibilizado a qualquer um que se queira que tenha acesso aos arquivos, com um sistema vcs podemos ter os seguintes recursos:
- Backup e Restore. Os arquivos podem ser salvos logo após serem editados de forma transparente gerando uma nova versão. Desta forma pode-se ter acesso a qualquer versão no tempo. Se for necessário recuperar uma versão de um dos arquivos que foi salvo em 01/01/200, sem problema, se ele foi atualizado no sistema vcs nesta data, ele estará lá, mesmo que na sua área de trabalhão você esteja vendo apenas a versão atual.
- Sincronização. Permite sincronização de versões compartilhadas de arquivos, ou seja, permite que uma equipe faça atualizações nos arquivos e cada um possa ter a versão mais atualizada.
- Facilidade para “voltar atrás”. Se por um motivo qualquer surja a necessidade de se compilar uma versão anterior do sistema, é muito fácil recuperar os fontes desta versão.
- Acompanhamento das mudanças. À medida que se vai atualizando os arquivos pode-se (na verdade, deve-se) fazer anotações sobre as alterações, explicando onde e porque das mudanças (note que estas anotações não são armazenadas nos arquivos em si, mas no sistema vcs) Tornando mais compreensível a apresentação da evolução de um arquivo no tempo.
- Sandboxing, ou proteção contra si mesmo. Digamos que você tenha feito uma grande mudança e não esteja seguro do resultado, você pode gravar estas mudanças em uma área temporária e manter, através de tags, versões temporárias para testes até decidir a incorporação definitiva das mudanças ou não.
Jargão
Para trabalhar com um sistema vcs é necessário conhecer alguns termos:
Setup
- Repositório (repo): Base de dados onde são armazenados os arquivos.
- Servidor: O computador onde é armazenado o repositório.
- Cliente: O computador que se conecta ao repo.
- Área de trabalho: Diretório local do usuário onde são feitas as mudanças.
- Trunk: A pasta principal para o código no repositório.
Ações básicas
- Add: Adicionar um arquivo ao repositório pela primeira vez.
- Revision: A versão do arquivo (v1, v2, v3, etc.).
- Head: A última revisão no repositório.
- Check out: Retirada (download) de arquivos do repositório.
- Check in: Entrega (upload) de arquivos do repositório (quando alterados). Os arquivos recebem um novo número de revisão e as pessoas podem se quiser fazer um Chek out nos mesmos.
- Checkin Message: Mensagem descrevendo as alterações.
- Changelog/History: Lista de alterações feitas no arquivo desde a sua criação.
- Update/Sync: Sincronizar os arquivos na área de trabalho com a última versão do repositório.
- Revert: Reverter os arquivos na área de trabalho (descartando-os) para a última revisão no repositório.
Ações avançadas
- Branch: Criar uma cópia separada de um arquivo/pasta para um uso específico e/ou particular (Identificação de erros, testes, etc). Branch pode ser tanto um verbo (”branch the code”) quanto um substantivo (”Qual branch?”).
- Diff/Change/Delta: Procurar diferenças entre dois arquivos. Útil para visualizar mudanças entre duas revisões.
- Merge (ou patch): Aplicara as alterações feitas em um arquivo em outro, para atualizá-lo. Por exemplo, a aplicação de funcionalidades de um branch para outro.
- Conflict: Quando mudanças pendentes em um arquivo contradizem outras. (nenhuma das alterações não podem ser aplicadas).
- Resolve: Corrigir alterações contraditórias e fazer chekging da versão correta.
- Locking: “Obter o contole” de um aruquivo não permitindo que mais ninguém o altere até que um unlock seja feito. Alguns vcs se utilizam deste recursos para evitar conflitos.
- Quebrando o lock: Forçar o unlock em um arquivo permite a edição do memso. Isto pode ser necessário no caso de alguem fazer um lock de um arquivo e sair de férias ou, por algum motivo, abandonar o projeto.
November 4th, 2008 at 11:55 pm
[...] a utilizar algum software de controle de [...]
October 14th, 2009 at 6:33 pm
[...] http://www.cosmoverbal.net/subversion/controle-de-versoes-breve-introducao [...]