Este artigo apresenta um modelo de implementação em Linux para controle e versionamento de arquivos. Após explicar os conceitos envolvidos, é destacado o procedimento de instalação e alguns exemplos de uso.
Todo sistema de controle de versão tem que resolver o mesmo problema fundamental em ambientes onde documentos devem ser compartilhados entre várias pessoas: Como permitir que os usuários tenham acesso às informações garantindo que não se atrapalhem mutuamente, sem impedir o trabalho ou sobrescrever acidentalmente as alterações enviadas por outros. Qualquer tentativa de controle em compartilhamentos depara basicamente com os dois modelos a seguir:
A solução travar-modificar-destravar
Muitos sistemas de controle de versão usam o modelo travar-modificar-destravar (lock-modify-unlock, em inglês) destinado a evitar o problema de autores terem seus trabalhos sobrescritos por terceiros. Nesse modelo, os arquivos no repositório podem ser consultados por todos, porem cada arquivo podem ser editado por uma pessoa de cada vez. Essa ação de exclusividade é conseguida através de travas, onde as demais pessoas só poderão alterar o arquivo quando primeiramente este for liberado pela pessoa que estava usando.
A solução copiar-modificar-fundir
Nesse modelo cada usuário contata o repositório e cria uma cópia de trabalho (working copy, em inglês) pessoal - uma réplica local dos arquivos e diretórios do repositório. Os usuários trabalham então em paralelo, modificando suas cópias particulares. Finalmente, as cópias particulares são enviadas ao repositório central e fundidas em uma nova versão final. O sistema de controle de versão frequentemente auxilia na fusão, mas o ser humano é o responsável de fazê-la funcionar corretamente.
Quando utilizar um ou outro modelo
Para arquivos binários (imagens, documentos em formato proprietário, áudio e banco de dados) o modelo mais indicado é o travar-modificar-destravar.
O modelo copiar-modificar-fundir é indicado para arquivos em formato texto, como código fonte de programas e documentos com conteúdo aberto, como texto simples sem formação e arquivos XML e seus correlatos.
Apesar do primeiro modelo parecer um entrave quando disponibilizado em um ambiente colaborativo (uma pessoa deveria esperar para que a outra terminasse a alteração para poder trabalhar na última versão), através de um simples processo pode-se resolver facilmente essa questão. Devemos lembrar que o objetivo é o controle de versionamento e não conferência onde é disputado o mesmo espaço de trabalho com os demais.
Mesmo que o CVS e o Subversion, sendo os principais sistemas abertos para controle de versão, trabalhem principalmente no modelo copiar-modificar-fundir, ambos reconhecem a necessidade de se travar um arquivo ocasionalmente e também oferecem mecanismos para isso.
[3] Comentário enviado por lnxrhel em 26/08/2007 - 17:24h
Bem esclarecedor o artigo. Já utilizo o SubVersion para o controle de versionamento de software na empresa, é uma ferramenta excelente tanto para o versionamento de software tanto quanto o controle de documentos diversos.