Uma Introdução Rápida

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.

Nota

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.

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.