Resumo
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.
A idéia consiste em organizar um repositório central onde os usuários de uma rede local podem colocar
arquivos e determinar as operações a serem feitas para o controle da versão. Este documento é um
trabalho de aula do concentrado de Linux Avançado, sendo meu objetivo criar maior intimidade com o
uso do sistema Linux.
Este artigo pode ser uma idéia inicial para um trabalho mais completo, onde um portal em PHP poderia
servir as páginas para os usuários controlarem seus documentos, tipo como faz o Share Point da M$.
Introdução
Controle de versão é a arte de gerenciar mudanças em informações. Ele tem sido uma ferramenta útil
para programadores, que gastam seu tempo fazendo mudanças pequenas em software. Mas a utilidade
do software de controle de versão se estende muito além dos limites do mundo do desenvolvimento de
software. Em qualquer lugar que você encontrar pessoas usando computadores para gerenciar
informações que mudam com freqüência, há espaço para utilizarmos controle de versão na coleção de
arquivos.
Portanto não é destinado apenas aos programadores de sistemas de computador, mas aos que utilizam
arquivos em geral e necessitam de um controle adicional para as alterações realizadas. Para
exemplificar, utilizaremos o sistema chamado Subversion neste artigo.
O que é Subversion?
Subversion é um sistema de controle de versão livre/open-source, com objetivo de gerenciar arquivos e
diretórios ao longo do tempo. Esses arquivos ficam armazenados em um repositório central sob o
cuidado desse sistema. Esse repositório se parece muito com um servidor genérico de arquivos, exceto
que todas as mudanças feitas em seu conteúdo são devidamente registradas. Além de você ter sempre a
versão mais atual disponível, o sistema permite recuperar versões antigas dos seus dados, examinar o
histórico para saber que modificações foram feitas ou ainda, quem executou a alteração.
Conceitos de compartilhamento de arquivos
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.
Instalando o Subversion
O Subversion foi construído sobre uma camada de portabilidade chamada APR - a biblioteca Apache
Portable Runtime. A biblioteca APR provê todas as interfaces que o sistema necessita para funcionar
em diferentes sistemas operacionais: acesso ao disco, acesso à rede, gerenciamento de memória e assim
por diante.
Mesmo sendo o Subversion capaz de usar o Apache como um de seus programas de servidor de rede,
sua dependência sobre a APR não significa que o Apache seja um componente obrigatório. A APR é
uma biblioteca standalone utilizável por qualquer aplicação. Isso significa, entretanto, que assim como
o Apache, os clientes e servidores de Subversion rodam em qualquer sistema operacional onde o
servidor Apache httpd é capaz de rodar: Windows, Linux, todos os sabores de BSD, Mac OS X,
Netware, entre outros.
O modo mais fácil de obter o Subversion é baixando um pacote binário construído para o seu sistema
operacional. O website do Subversion freqüentemente tem esses pacotes disponíveis para download. O
site geralmente contém pacotes de instaladores gráficos para usuários de sistemas operacionais
Microsoft.
Se você roda um clone do sistema operacional Unix, pode usar o seu sistema nativo de distribuição de
pacotes (RPMs, DEBs, árvore de ports, etc.) para obter o Subversion mais atual. Tenho um ambiente
Fedora e o pacote Subversion pode ser selecionado diretamente nos pacotes disponíveis no CD para
instalação.
Para algumas plataformas existe também um cliente gráfico (a exemplo o TortoiseSVN) que pode ser
integrados ao shell, facilitando a manipulação dos arquivos e do repositório do Subversion. Mesmo o
servidor sendo Linux, os clientes podem ser de várias plataformas, e seu acesso é garantido aos
recursos do repositório.
Conceitos e informações relevantes
Repositório - Caminho da rede (ou do servidor local) que armazena os arquivos e garante o
funcionamento do controle de versão sobre eles.
Cópia de trabalho - É uma pasta local, contendo uma coleção de arquivos. Você pode realizar qualquer
alteração, editar seu conteúdo como bem entender. Você estará trabalhando na sua própria cópia, sua
área de trabalho pessoal. Nenhuma alteração realizada por outras pessoas no mesmo arquivo do
repositório do Subversion é feita na sua pasta nem as alterações realizadas por você são disponíveis
para as demais pessoas sem sua ordem expressa para isso.
Para disponibilizar a versão do documento na qual você trabalhou para as demais pessoas ou
simplesmente garantir a versão que você acabou de trabalhar esteja sob controle do Subversion, você
deve comandar que o Subversion publique seu arquivo com as mudanças realizadas localmente por
você para o repositório. Existe também um comando que disponibiliza a última versão do arquivo no
repositório para que você possa trabalhar localmente.
Preparação do repositório
Para melhor organizar, preparamos uma pasta para hospedar o repositório no servidor (ou micro local)
e em seguida, comandamos a criação escolhendo o nome que desejamos dar para o mesmo. Usamos o
nome 'teste', conforme abaixo:
# mkdir /svn
# mkdir /svn/repos
# mkdir /svn/users
# mkdir /svn/permissions
# svnadmin create /svn/repos/teste
Preparação da cópia de trabalho (Workingcopy)
Para a cópia de trabalho, devemos criar uma pasta e associar o repositório a ela, conforme abaixo:
# mkdir /trabalho
# cd /trabalho
Para repositório local (se você esta usando no mesmo computador):
# svn checkout file:///svn/repos/teste
Para repositório remoto (se você esta usando acesso ao Subversion pelo Apache):
# svn checkout http://servidor/repos/teste
Após a criação da cópia de trabalho é criada uma pasta chamada 'teste' igual a que está no repositório,
com todos os arquivos que existem lá. Apesar de não termos nada gravado no repositório ainda, uma
pasta chamada .svn/ passa a existir dentro da cópia de trabalho. Essa pasta é necessária para controle do
Subversion e não pode ser alterada ou apagada. Ela pode aparecer oculta em alguns sistemas, mas
estará lá o tempo todo.
Para trabalhar nos arquivos:
# cd /trabalho/teste
# ls -la
Exemplos de uso
Na pasta de trabalho temos a pasta 'teste' e você pode gravar o que bem entender nela, como uma pasta
normal do seu computador, porém deve avisar ao Subversion o nome do arquivo que fará parte do
repositório central ou indicar * caso deseje que todos os arquivos da cópia de trabalho sejam
adicionados ao repositório usando o comando abaixo:
# svn add arq1.txt
# svn add arq2.txt
ou
# svn add *
Você acaba de avisar quais arquivos deseja que o Subversion tenha controle de versão, ainda não
estarão disponíveis para os demais usuários nem estarão seguros. Para verificar quais arquivos serão
enviados, comande:
# svn status
Onde a situação do arquivo é apresentada na seguinte codificação:
• A (novo para ser adicionado)
• ? (ainda não versionado)
• D (deletado)
• M (modificado localmente)
• C (conflito entre versões para ser resolvido)
Para enviar para o repositório a versão atual dos arquivos locais que foram alterados, é necessário
informar um log, que será usado para explicar o motivo das alterações para quem consultar o
repositório diretamente. Isso tem a função de documentar a revisão que será gerada no repositório.
comande:
# svn commit --message "primeira versão"
Para garantir que você está trabalhando na última versão do arquivo, comande a atualização dos
arquivos locais para pegar as últimas versões do repositório e gravar localmente.
# svn update
Para melhorar o uso do Subversion, você ainda pode contar com comandos adicionais específicos para
trabalhar com o repositório ou mesmo com os arquivos locais.
Segue abaixo o ciclo básico de trabalho usando o Subversion:
Atualiza sua cópia de trabalho:
# svn update
Realiza as mudanças:
# svn add
ou
# svn delete
ou
# svn copy
ou
# svn move
Examina as mudanças:
# svn status
# svn diff
# svn revert
Junta outras mudanças do repositório dentro da cópia de trabalho:
# svn update
# svn resolved
Confirmar as alterações:
# svn commit -message "porque da alteração"
Conclusões
O Subversion tem ganho muito espaço no meio open-source e também nas empresas desenvolvedoras
de software. Se olharmos a integração disponível com o Apache e o PHP, temos tudo o que precisamos
para implementar um sistema eficiente e barato em Linux para controle de documentos, independente
da plataforma dos clientes que irão fazer uso dela.
Minha praia de programação não é em Linux, porém esse portal para controle de documentos seria uma
ferramenta e tanto para disponibilizar em um projeto futuro.
Referência:
• Installing SubVersion on FC 4
• SVN-BOOK - e-Book do Subversion
Download

Subversion no Linux