Algumas pessoas têm dificuldades em absorver uma nova tecnologia apenas lendo o tipo de abordagem top down apresentada por este livro. Esta seção é uma curta introdução ao Subversion, e é projetada para dar uma excelente chance aos aprendizes bottom up. Se você prefere aprender experimentando, a demonstração a seguir é justamente o que você procura. Ao longo do caminho, nós referenciamos os capítulos relevantes deste livro.
Se você é novo ao conceito de controle de versão ou ao modelo “copiar-modificar-fundir” usado por ambos CVS e Subversion, então você deve ler Capítulo 2, Conceitos Básicos antes de continuar.
O seguinte exemplo pressupõe que você tem svn, que é o cliente de linha de comando do Subversion, e svnadmin, a ferramenta administrativa, instalados. Ele também pressupõe que você está usando Subversion 1.2 ou mais recente (execute svn --version para checar).
O Subversion armazena todos os dados sob controle de versão em um repositório central. Para começar, crie um novo repositório:
$ svnadmin create /caminho/ao/repositório $ ls /caminho/ao/repositório conf/ dav/ db/ format hooks/ locks/ README.txt
Esse comando cria um novo diretório
/caminho/ao/repositório que contém um repositório
Subversion. Esse novo diretório contém (entre outras coisas) uma
coleção de arquivos de banco de dados. Você não verá seus arquivos
sob controle de versão se você olhar dentro dele. Para mais informações
sobre criação e manutenção de repositório, veja
Capítulo 5, Repository Administration.
O Subversion não tem um conceito de “projeto”. O repositório é apenas um sistema virtual de arquivos sob controle de versão, uma grande árvore que pode conter qualquer coisa que você quiser. Alguns administradores preferem armazenar apenas um projeto em um repositório, e outros preferem armazenar múltiplos projetos colocando-os em diretórios separados. Os méritos de cada abordagem são discutidos em “Choosing a Repository Layout”. Seja qual for a escolha, o repositório apenas gerencia arquivos e diretórios, e assim fica aos humanos o interpretar certos diretórios como sendo “projetos”. Mesmo você podendo encontrar referências a projetos ao longo deste livro, tenha em mente que nós apenas estamos falando sobre algum diretório (ou coleção de diretórios) no repositório.
Neste exemplo, nós presumimos que você já tem algum tipo de
projeto (uma coleção de arquivos e diretórios) que você quer
importar para dentro do seu recém-criado repositório Subversion.
Comece organizando-os em um único diretório chamado
meuprojeto (ou qualquer outra coisa).
Por razões que serão esclarecidas adiante
(veja Capítulo 4, Ramificação e fusão), a estrutura de árvore
do seu projeto deve conter três diretórios de primeiro nível
chamados branches,
tags, e
trunk. O diretório trunk
deve conter todos os seus dados, enquanto que os diretórios
branches e tags estão
vazios:
/tmp/meuprojeto/branches/
/tmp/meuprojeto/tags/
/tmp/meuprojeto/trunk/
foo.c
bar.c
Makefile
…
Os subdiretórios branches, tags,
e trunk não são requeridos pelo Subversion.
Eles são meramente uma convenção popular que você muito provavelmente
desejará usar mais tarde.
Uma vez que você criou sua árvore de dados, importe-a para dentro do repositório com o comando svn import (veja “svn import”):
$ svn import /tmp/meuprojeto file:///caminho/ao/repositorio/meuprojeto -m "Importação inicial" Adicionando /tmp/meuprojeto/branches Adicionando /tmp/meuprojeto/tags Adicionando /tmp/meuprojeto/trunk Adicionando /tmp/meuprojeto/trunk/foo.c Adicionando /tmp/meuprojeto/trunk/bar.c Adicionando /tmp/meuprojeto/trunk/Makefile … Commit da revisão 1. $
Agora o repositório contém essa árvore de dados. Como foi mencionado
antes, você não verá seus arquivos se olhar diretamente dentro do
repositório; eles estão armazenados em um banco de dados. Mas o sistema
imáginário de arquivos do repositório agora contém um diretório de
primeiro nível chamado meuprojeto, que por sua
vez contém os seus dados.
Note que o diretório original /tmp/meuprojeto
está inalterado; o Subversion sabe disso. (De fato, você pode até
mesmo deletar o diretório se quiser). Para começar a manipular os
dados do repositório, você precisa criar uma nova “cópia de
trabalho” dos dados, um tipo de área privada de trabalho.
Peça ao Subversion para “obter” uma cópia de trabalho
do diretório meuprojeto/trunk que está no
repositório:
$ svn checkout file:///caminho/ao/repositório/meuprojeto/trunk meuprojeto A meuprojeto/foo.c A meuprojeto/bar.c A meuprojeto/Makefile … Gerado cópia de trabalho para revisão 1.
Agora você tem uma cópia pessoal de parte do seu repositório
em um diretório chamado meuprojeto. Você pode
editar os arquivos na sua cópia de trabalho e então enviar essas
alterações ao repositório.
Entre na sua cópia de trabalho e edite o conteúdo de um arquivo.
Execute svn diff para ver as suas alterações em formato “unified diff”.
Execute svn commit para enviar a nova versão do seu arquivo ao repositório.
Execute svn update para “atualizar” sua cópia de trabalho de acordo com o repositório.
Para um tour completo em todas as coisas que você pode fazer com sua cópia de trabalho, leia Capítulo 3, Guided Tour.
A esta altura, você tem a opção de tornar seu repositório disponível a outros através da rede. Veja Capítulo 6, Server Configuration para aprender sobre os diferentes tipos de processos de servidor disponíveis e como configurá-los.