Você está na página 1de 54

Subversion

18 de abril de 2007

Sumrio
I

Sobre essa Apostila

II Informaes Bsicas

III Subversion

1 O que o Subversion
2 Plano de ensino
2.1 Objetivo . . .
2.2 Pblico Alvo .
2.3 Pr-requisitos
2.4 Descrio . .
2.5 Metodologia .
2.6 Programa . .
2.7 Avaliao . .
2.8 Bibliografia .

10
.
.
.
.
.
.
.
.

11
11
11
11
11
11
12
13
13

3 Conceitos bsicos de versionamento


3.1 O que o Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Histria do Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Conceitos bsicos de versionamento . . . . . . . . . . . . . . . . . . . . . . . . . . .

14
14
14
15

4 Instalao do Subversion
4.1 Mtodos de instalao do Subversion
4.2 Compilao do cdigo-fonte . . . . . .
4.2.1 Obtendo o cdigo-fonte . . . .
4.2.2 Dependncias do Subversion .
4.2.3 Parmetros do script configure
4.2.4 Compilao e Instalao . . .
4.3 Distribuies derivadas do Debian . .

.
.
.
.
.
.
.

18
18
18
19
19
20
21
22

.
.
.
.

25
25
26
27
28

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

5 Administrao do repositrio
5.1 O repositrio Subversion . . . . . . . .
5.2 Criao e configurao do repositrio
5.3 Manuteno do repositrio . . . . . .
5.3.1 svnlook . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

CDTC

Centro de Difuso de Tecnologia e Conhecimento

5.3.2 svnadmin . . . . . . . . . . . . . . . . . . . . . .
5.3.3 Migrando um repositrio . . . . . . . . . . . . . .
5.3.4 Backup do repositrio . . . . . . . . . . . . . . .
5.4 Adio de projetos . . . . . . . . . . . . . . . . . . . . .
5.4.1 Escolhendo um layout de repositrio . . . . . . .
5.4.2 Criando o layout e importando os dados iniciais

Brasil/DF

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

28
28
29
29
29
31

6 Configurao do servidor
6.1 Viso geral . . . . . . . . . . . . . . . . . . . . .
6.2 svnserve, um servidor customizado . . . . . . .
6.2.1 Iniciando o servidor . . . . . . . . . . . .
6.2.2 Autenticao e autorizao integrada . .
6.2.3 Criando um arquivo e domnio users . .
6.2.4 Ajuste de controle de acesso . . . . . . .
6.3 httpd, o servidor web Apache . . . . . . . . . . .
6.3.1 Pr-requisitos . . . . . . . . . . . . . . . .
6.3.2 Configurao bsica do Apache . . . . .
6.3.3 Opes de autenticao . . . . . . . . . .
6.3.4 Autenticao HTTP Bsica . . . . . . . .
6.3.5 Controle de acesso por usurio (blanket)
6.3.6 Mltiplos meios de acesso ao repositrio

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

33
33
34
34
35
36
36
37
38
38
40
40
41
43

7 Utilizao do cliente em linha de comando


7.1 Comandos de obteno e ajuda . . . .
7.2 Manipulao da cpia local . . . . . . .
7.2.1 svn add . . . . . . . . . . . . . .
7.2.2 svn delete . . . . . . . . . . . . .
7.2.3 svn copy . . . . . . . . . . . . .
7.2.4 svn status . . . . . . . . . . . . .
7.2.5 svn diff . . . . . . . . . . . . . .
7.2.6 svn revert . . . . . . . . . . . . .
7.3 Interao com o repositrio . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

44
44
46
46
47
47
47
48
49
49

.
.
.
.

51
51
51
51
52

8 Front-ends para o Subversion


8.1 RapidSVN . . . . . . . . . .
8.2 TortoiseSVN . . . . . . . .
8.3 WebSVN . . . . . . . . . .
8.4 Trac . . . . . . . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

Parte I

Sobre essa Apostila

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Contedo
O contedo dessa apostila fruto da compilao de diversos materiais livres publicados na internet, disponveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.
O formato original deste material bem como sua atualizao est disponvel dentro da licena
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seo de
mesmo nome, tendo inclusive uma verso traduzida (no oficial).
A reviso e alterao vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Crticas e sugestes construtivas so bem-vindas a qualquer tempo.

Autores
A autoria deste de responsabilidade de Felipe Brant Scarel (fscarel@cdtc.org.br) .
O texto original faz parte do projeto Centro de Difuso de Tecnologia e Conhecimento, que
vem sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informao) em conjunto com
outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras
que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software
junto a outras entidades no pas.
Informaes adicionais podem ser obtidas atravs do email ouvidoria@cdtc.org.br, ou da
home page da entidade, atravs da URL http://www.cdtc.org.br.

Garantias
O material contido nesta apostila isento de garantias e o seu uso de inteira responsabilidade do usurio/leitor. Os autores, bem como o ITI e seus parceiros, no se responsabilizam
direta ou indiretamente por qualquer prejuzo oriundo da utilizao do material aqui contido.

Licena
Copyright 2006, Instituto Nacional de Tecnologia da Informao (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOSTILA. A copy of the license is included in the section entitled GNU Free Documentation
License.

Parte II

Informaes Bsicas

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoo e o desenvolvimento de aes que incentivem a disseminao de solues que utilizem padres abertos e no proprietrios de tecnologia, em proveito do
desenvolvimento social, cultural, poltico, tecnolgico e econmico da sociedade brasileira.
Objetivo Especfico
Auxiliar o Governo Federal na implantao do plano nacional de software no-proprietrio e
de cdigo fonte aberto, identificando e mobilizando grupos de formadores de opinio dentre os
servidores pblicos e agentes polticos da Unio Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negcio da tecnologia da informao e de novos negcios
de comunicao com base em software no-proprietrio e de cdigo fonte aberto, oferecendo
treinamento especfico para tcnicos, profissionais de suporte e funcionrios pblicos usurios,
criando grupos de funcionrios pblicos que iro treinar outros funcionrios pblicos e atuar como
incentivadores e defensores de produtos de software no proprietrios e cdigo fonte aberto, oferecendo contedo tcnico on-line para servios de suporte, ferramentas para desenvolvimento de
produtos de software no proprietrios e de seu cdigo fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educao, pesquisa, desenvolvimento e teste de produtos de software livre.

Guia do aluno
Neste guia, voc ter reunidas uma srie de informaes importantes para que voc comece
seu curso. So elas:
Licenas para cpia de material disponvel
Os 10 mandamentos do aluno de Educao a Distncia
Como participar dos foruns e da wikipdia
Primeiros passos
muito importante que voc entre em contato com TODAS estas informaes, seguindo o
roteiro acima.

Licena
Copyright 2006, Instituto Nacional de Tecnologia da Informao (cdtc@iti.gov.br).
6

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

dada permisso para copiar, distribuir e/ou modificar este documento sob os termos
da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior
pblicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cpia da licena est inclusa na seo entitulada "Licena de Documentao Livre GNU".

Os 10 mandamentos do aluno de educao online

1. Acesso Internet: ter endereo eletrnico, um provedor e um equipamento adequado


pr-requisito para a participao nos cursos a distncia.
2. Habilidade e disposio para operar programas: ter conhecimentos bsicos de Informtica necessrio para poder executar as tarefas.
3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distncia conta muitos pontos, pois ir colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores.
4. Comportamentos compatveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo.
5. Organizao pessoal: planejar e organizar tudo fundamental para facilitar a sua reviso
e a sua recuperao de materiais.
6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigaes e
realiz-las em tempo real.
7. Curiosidade e abertura para inovaes: aceitar novas idias e inovar sempre.
8. Flexibilidade e adaptao: requisitos necessrio mudana tecnolgica, aprendizagens
e descobertas.
9. Objetividade em sua comunicao: comunicar-se de forma clara, breve e transparente
ponto - chave na comunicao pela Internet.
10. Responsabilidade: ser responsvel por seu prprio aprendizado. O ambiente virtual no
controla a sua dedicao, mas reflete os resultados do seu esforo e da sua colaborao.

Como participar dos fruns e Wikipdia


Voc tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira o uso dos fruns de notcias e de dvidas gerais que se distinguem pelo uso:
. O frum de notcias tem por objetivo disponibilizar um meio de acesso rpido a informaes
que sejam pertinentes ao curso (avisos, notcias). As mensagens postadas nele so enviadas a
7

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informao que
interesse ao grupo, favor post-la aqui.
Porm, se o que voc deseja resolver alguma dvida ou discutir algum tpico especfico do
curso. recomendado que voc faa uso do Forum de dvidas gerais que lhe d recursos mais
efetivos para esta prtica.
. O frum de dvidas gerais tem por objetivo disponibilizar um meio fcil, rpido e interativo
para solucionar suas dvidas e trocar experincias. As mensagens postadas nele so enviadas
a todos participantes do curso. Assim, fica muito mais fcil obter respostas, j que todos podem
ajudar.
Se voc receber uma mensagem com algum tpico que saiba responder, no se preocupe com a
formalizao ou a gramtica. Responda! E no se esquea de que antes de abrir um novo tpico
recomendvel ver se a sua pergunta j foi feita por outro participante.
A segunda forma se d pelas Wikis:
. Uma wiki uma pgina web que pode ser editada colaborativamente, ou seja, qualquer participante pode inserir, editar, apagar textos. As verses antigas vo sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
timo suporte a processos de aprendizagem colaborativa. A maior wiki na web o site "Wikipdia", uma experincia grandiosa de construo de uma enciclopdia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em portugus pelos links:
Pgina principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaborao com a aprendizagem do grupo!

Primeiros Passos
Para uma melhor aprendizagem recomendvel que voc siga os seguintes passos:
Ler o Plano de Ensino e entender a que seu curso se dispe a ensinar;
Ler a Ambientao do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas bsicas do mesmo;
Entrar nas lies seguindo a seqncia descrita no Plano de Ensino;
Qualquer dvida, reporte ao Frum de Dvidas Gerais.

Perfil do Tutor
Segue-se uma descrio do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal um modelo de excelncia: consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas honesto, imparcial, amvel, positivo, respeitador, aceita as
idias dos estudantes, paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
8

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

A classificao por um tutor desta natureza proporciona o melhor feedback possvel, crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem. Este tutor
ou instrutor:
fornece explicaes claras acerca do que ele espera, e do estilo de classificao que ir
utilizar;
gosta que lhe faam perguntas adicionais;
identifica as nossas falhas, mas corrige-as amavelmente, diz um estudante, e explica porque motivo a classificao foi ou no foi atribuda;
tece comentrios completos e construtivos, mas de forma agradvel (em contraste com um
reparo de um estudante: os comentrios deixam-nos com uma sensao de crtica, de
ameaa e de nervossismo)
d uma ajuda complementar para encorajar um estudante em dificuldade;
esclarece pontos que no foram entendidos, ou corretamente aprendidos anteriormente;
ajuda o estudante a alcanar os seus objetivos;
flexvel quando necessrio;
mostra um interesse genuno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
escreve todas as correes de forma legvel e com um nvel de pormenorizao adequado;
acima de tudo, devolve os trabalhos rapidamente;

Parte III

Subversion

10

Captulo 1

O que o Subversion

O Subversion um sistema de controle de verses livre capaz de gerenciar arquivos e diretrios ao longo do tempo.
Em linhas gerais, os arquivos so guardados em um repositrio central e so servidos aos
clientes. Muito embora isto se assemelhe a um servidor de arquivos, a diferena fundamental do
Subversion que ele guarda todas as modificaes feitas nos arquivos e diretrios ao longo do
tempo, permitindo-nos recuperar verses antigas dos dados ou simplesmente verificar o histrico
destes. Por este motivo, comum pensar nos sistemas de versionamento como "mquinas do
tempo".
O curso possui nfase na distribuio Debian GNU/Linux, detalhando diferenas de instalao e configurao em outros sistemas operacionais, caso existam. A durao do curso de uma
semana. Para comear voc deve ler o Guia do Aluno e o Plano de Ensino a seguir.

11

Captulo 2

Plano de ensino
2.1 Objetivo
Qualificar tcnicos, administradores de sistemas e interessado em geral na instalao, configurao e utilizao do sistema de controle de verses Subversion.

2.2 Pblico Alvo


Interessados em aprender a trabalhar com o sistema de controle de verses Subversion.

2.3 Pr-requisitos
Os alunos devero ser, necessariamente, indicados por empresas pblicas e ter conhecimento
bsico em manipulao de linha de comando UNIX.

2.4 Descrio
O curso sobre Subversion ser realizado na modalidade Educao a Distncia e utilizar a
plataforma Moodle como ferramenta de aprendizagem. Ele ter a durao de uma semana. O
material didtico estar disponvel on-line de acordo com as datas pr-estabelecidas em cada
lio. A verso utilizada para o Subversion ser a 1.4.0

2.5 Metodologia
O curso est dividido da seguinte maneira:

12

CDTC

Centro de Difuso de Tecnologia e Conhecimento


Atividade
Lio 1
Lio 2
Lio 3
Lio 4
Lio 5
Lio 6
Avaliao

Brasil/DF

Descrio
Conceitos bsicos de versionamento
Instalao do Subversion
Administrao do repositrio
Configurao do servidor
Utilizao do cliente em linha de comando
Front-ends para o Subversion
Avaliao final

Todo o material est no formato de lies, e estar disponvel ao longo do curso. As lies
podero ser acessadas quantas vezes forem necessrias. Aconselhamos a leitura de "Ambientao do Moodle", para que voc conhea o produto de Ensino a Distncia, evitando dificuldades
advindas do "desconhecimento"sobre o mesmo.
Ao final de cada lio haver questes acerca do tema estudado, no intuito de avaliar parcialmente a aprendizagem do aluno. Leia atentamente a lio e pratique os exemplos apresentados,
preparando-se assim para as referidas questes.
Os instrutores estaro a sua disposio ao longo de todo curso. Qualquer dvida deve ser
disponibilizada no frum ou enviada por e-mail. Diariamente os monitores daro respostas e
esclarecimentos.

2.6 Programa
Lio 1
O que o Subversion
Histria do Subversion
Conceitos bsicos de versionamento
Lio 2
Mtodos de instalao do Subversion
Compilao do cdigo-fonte
Distribuies derivadas do Debian
Lio 3
O repositrio Subversion
Criao e configurao do repositrio
Manuteno do repositrio
Adio de projetos
Lio 4
Viso geral
svnserve, um servidor customizado
httpd, o servidor web Apache
13

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Mltiplos meios de acesso ao repositrio


Lio 5
Comandos de obteno e ajuda
Manipulao da cpia local
Interao com o repositrio
Lio 6
RapidSVN
TortoiseSVN
WebSVN
Trac

2.7 Avaliao
Toda a avaliao ser feita on-line.
Aspectos a serem considerados na avaliao:
Iniciativa e autonomia no processo de aprendizagem e de produo de conhecimento;
Capacidade de pesquisa e abordagem criativa na soluo de problemas apresentados.
Instrumentos de avaliao:
Avaliao semanal
Para a aprovao o participante dever obter nota maior ou igual a 6,0 na avaliao final. Para
isso, sua participao ser importante em todas as atividades propostas.

2.8 Bibliografia
Site oficial: http://subversion.tigris.org/
Trac Project: http://trac.edgewall.org/
SVN Book: http://svnbook.red-bean.com/
Tutorial Subversion PATUX: http://ninho.patux.cic.unb.br/wiki/Subversion
Boa parte das lies 3, 4 e 5, e pequenas partes das demais lies, so uma traduo livre
de trechos do SVN Book (link acima) por Ben Collins-Sussman, Brian W. Fitzpatrick e C. Michael
Pilato. O autor deste curso agradece a estes, sem os quais no seria possvel que tivssemos
uma ferramenta de versionamento to verstil como o o Subversion.

14

Captulo 3

Conceitos bsicos de versionamento


3.1 O que o Subversion
O Subversion um sistema de controle de verses livre, que comumente tambm conhecido por Open Source. Com "sistema de controle de verses"queremos dizer que ele capaz de
gerenciar arquivos e diretrios ao longo do tempo.
Basicamente, os arquivos so guardados em um repositrio central e servidos aos clientes.
Muito embora isto se assemelhe a um servidor de arquivos comum (como FTP ou NFS), a diferena fundamental do Subversion que ele guarda todas as modificaes feitas nos arquivos e
diretrios ao longo do tempo, permitindo-nos recuperar verses antigas dos dados ou simplesmente verificar o histrico destes. Por este motivo, comum pensar nos sistemas de versionamento como "mquinas do tempo".
Muito embora os sistemas de versionamento, como o Subversion, sejam mais comumente utilizados para auxiliar programadores em seu desenvolvimento, importate frisar que o Subversion
no limitado a ajudar programadores e pode ser utilizado para versionar qualquer tipo de dado.
Por exemplo, possvel versionar imagens, vdeos e qualquer outro tipo de dado que necessite
de edio constante por uma equipe de colaboradores.Para compreender melhor os sistemas de
controle de verses, e o Subversion, interessante que conheamos um pouco da sua histria.
Vamos fazer isso no prximo tpico.

3.2 Histria do Subversion


No mundo do software livre, desde o incio fez-se necessria uma ferramenta que pudesse
controlar o aparente "caos"com que os programas so desenvolvidos: diversos programadores,
que muitas vezes nem se conhecem em pessoa, ao redor de todo o mundo, colaborando para o
sucesso de um software.
Para que todos pudessem desenvolver simultaneamente, sem prejuzo organizao e coerncia, foram ento criadas ferramentas de versionamento livres, sendo a mais bem-sucedida
delas o Concurrent Versioning System (CVS), que logo se tornou o padro em projetos Open
Source, e assim permanece at hoje. E com toda a razo, pois o fato de ser software livre, ter
um design no-restritivo e bom suporte a rede permitem que vrios programadores ao redor do
mundo compartilhem seu cdigo e construam softwares em conjunto. Porm, dada a sua idade
15

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

e infreqentes atualizaes, o CVS est se tornando ultrapassado, e muitos recursos modernos


dos sistemas de controle de verses no podem nele ser encontrados.
Assim, no incio de 2000, a CollabNet (http://www.collab.net) comecou a buscar programadores para desenvolver um substituto ao CVS, que pudesse implementar o que ele apresenta de
melhor, mas sem copiar suas falhas mais evidentes. Eles ento buscaram Karl Fogel (tambm um
dos autores do livro do Subversion), que j vinha discutindo idias semelhantes com seu amigo
Jim Blandy. Este ltimo inclusive j havia tido no apenas a idia do nome "Subversion"bem como
feito o layout bsico de um repositrio Subversion.
Chamado pela CollabNet, Karl imediatamente foi trabalhar no projeto e Jim fez com que sua
companhia, a conhecida Red Hat (que produz uma distribuio GNU/Linux homnima), praticamente o doasse ao projeto. Fortalecidos ainda pela contratao de Ben Collins-Sussman, eles
iniciaram a codificao, e, aps catorze meses, mais precisamente em 31 de Agosto de 2001, o
Subversion passou a versionar seu prprio cdigo e tornou-se uma realidade.
Mais frente, veremos os conceitos fundamentais que permeiam um sistema de controle de
verses.

3.3 Conceitos bsicos de versionamento


O Subversion um sistema centralizado para compartilhar informaes e dados. Ele baseado em um repositrio central, no qual os dados ficam guardados sob a forma tpica de uma
rvore de arquivos e diretrios. Um nmero qualquer de clientes conectam-se ao repositrio e
lem (recebendo as informaes dos outros) ou escrevem (disponibilizando a informao aos demais) nestes dados.
At o momento isto no seria muito diferente de um servidor de arquivos normal, mas como
foi explicado nos tpicos anteriores, o Subversion possui a capacidade de guardar todas as alteraes feitas aos arquivos, permitindo que elas sejam observadas, comparadas entre si, e
eventualmente sobrescritas umas sobre as outras.
J sabemos o principal objetivo dos sistemas de versionamento. Porm, como faramos para
que todos pudessem trabalhar colaborativamente mas sem que ocorresse uma eventual sobrescrita, acidental, em nosso repositrio? Vamos primeiramente apresentar o problema:
Suponhamos que dois usurios leiam as informaes do repositrio e iniciem a fazer modificaes em suas cpias locais para, posteriormente, submeter suas contribuies. Se um usurio
mandar suas modificaes, e, logo depois, o outro tambm quiser enviar suas modificaes (provavelmente diferentes das do primeiro), o que ocorrer que as modificaes do primeiro usurio no sero visualizadas ou aproveitadas, pois sero sobrescritas pelas alteraes do segundo
(uma vez que normalmente visualiza-se a verso mais recente).
Para este problema temos duas solues que so largamente utilizadas pelos sistemas de versionamento: a "Lock-Modify-Unlock"(Trancar-Modificar-Destrancar) e a "Copy-Modify-Merge"(CopiarModificar-Unir). Vamos apresentar separadamente cada uma delas:
"Lock-Modify-Unlock":
16

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Muitos sistemas de versionamento utilizam esta soluo, que consiste basicamente em um


sistema parecido com o aluguel de livros em uma biblioteca: um usurio tranca o arquivo
para edio, e enquanto ele faz suas modificaes os demais no podem acessar o arquivo
para escrita; se tentarem faz-lo, o servidor ir negar a requisio. Logo aps o primeiro
usurio encerrar sua edio, ele ir destrancar o arquivo, e agora sim os demais podero
acess-lo.
Os problemas desta soluo logo aparecem, pois ela muito restritiva: se o primeiro usurio, por exemplo, sair de frias e esquecer o arquivo trancado, os demais tero que esperar
at que ele volte ou contatar um administrador do sistema para destranc-lo, o que no
desejvel. Outro fator: suponhamos que dois usurio queiram editar o mesmo arquivo; isto
no ser um problema se um deles quiser editar o comeo do arquivo e o outro quiser editar
o final deste, e neste caso a soluo tornaria o processo burocrtico.
Finalmente, esta soluo cria um falso senso de segurana, pois se dois usurios trancarem arquivos diferentes, porm dependentes entre si, eles podero modific-los de forma a
torn-los incompatveis. Neste caso o sistema no pde para impedir que tal fato prejudicial
ocorresse.
"Copy-Modify-Merge":
O Subversion, CVS, e outros sistemas de versionamento preferem utilizar esta soluo
como uma alternativa ao trancamento dos arquivos. Neste modelo, cada usurio contata o
repositrio e copia para si a chamada "working copy", que uma cpia fiel da estrutura de
arquivos e diretrios do servidor, e tambm conhecida como Cpia Local.
Esses usurios trabalham em suas cpias particulares em paralelo, e ao final suas modificaes so unidas em uma verso resultante. Na maioria das vezes o repositrio cuida
do trabalho de fazer a unio ocorrer corretamente, mas em ltima instncia um ser humano
deve cuidar desse processo.
Na prtica, suponhamos que dois usurios obtivessem working copies para si e comecassem a edit-las. Se um deles submeter suas modificaes primeiro, quando o outro tentar
mandar suas alteraes o repositrio lhe retornar um erro de "out-of-date"(arquivo antigo).
Neste caso, o usurio receber uma cpia do arquivo novo e dever comparar esta nova
verso com a sua, alterada localmente. H uma boa chance de que as modificaes no
sejam conflitantes, e ele ento poder unir suas modificaes com as de seu colaborador,
manualmente, e submeter uma nova verso, com ambas as contribuies.
Mas e se as alteraes forem conflitantes? Como o prprio nome indica, nesse caso temos
um "conflict"(conflito), e este dever ser resolvido pelo usurio (uma vez que o programa
no capaz de tomar as decises inteligentemente). Aps resolver o conflito preexistente,
possivelmente aps uma conversa com o outro usurio, ele poder ento mandar a verso
final e funcional ao repositrio.
O modelo utilizado pelo Subversion pode parecer catico, mas quando o observamos mais de
perto percebemos que ele funciona de forma transparente: conflitos so infrequentes, e, quando
ocorrem, so resolvidos rapidamente. Obviamente, esses fatores dependem de uma comunidade
17

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

de colaboradores comunicativa e responsiva, o que, em geral, a realidade de boa parte dos


projetos de software livre.

18

Captulo 4

Instalao do Subversion
4.1 Mtodos de instalao do Subversion
Temos nossa disposio uma variedade de mtodos de instalao do Subversion, que
podem variar quanto sua disponibilidade dependendo do sistema operacional ou distribuio
GNU/Linux sendo utilizada.
importante notar que diferentes mtodos de instalao podero prover verses diferentes
do software: neste curso, por exemplo, utilizaremos a verso 1.4.0, o pacote mais atualizado
disponvel no repositrio testing do Debian, at esta data. No entanto, se voc optar por instalar
diretamente a partir do cdigo-fonte, possvel obter uma verso to nova quanto a mais recente
disponvel no repositrio do Subversion, que at esta data a reviso 22235, como pode ser visto
em http://svn.collab.net/repos/svn/trunk/, o repositrio oficial do Subversion.
Podemos diferenciar os mtodos de instalao basicamente entre aqueles que utilizam pacotes pr-compilados, efetuando diretamente a instalao, e os que primeiramente procedem a
compilao do cdigo-fonte do software e posteriormente instalam os binrios gerados pela referida compilao.
Entre os mtodos que sero estudados e que se utilizam de pacotes pr-compilados temos
as Distribuies derivadas do Debian, que utilizam pacotes nativos s distribuies (.deb), e para
instal-los simplesmente os descompactam e movem os arquivos para os lugares apropriados.

4.2 Compilao do cdigo-fonte


O primeiro mtodo que iremos abordar quanto instalao do Subversion ser o da compilao de seu cdigo-fonte. Para utilizarmos esse mtodo com sucesso, necessrio saber:
Onde obter o cdigo-fonte, e qual a verso desejada do programa;
Quais dependncias devem ser satisfeitas para que o passo de compilao seja bemsucedido;
Quais parmetros desejamos passar para o script configure;
Finalmente, compilar o software e instalar os binrios e documentao nos locais apropriados;
19

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Assim sendo, vamos a estes pontos:

4.2.1 Obtendo o cdigo-fonte


O cdigo-fonte do Subversion pode ser obtido em seu site oficial, na pgina de downloads
(http://subversion.tigris.org/project_packages.html). A partir dessa pgina voc ver uma srie de
pacotes binrios para serem baixados. Como desejamos o cdigo-fonte, clicamos ento no link
"in this directory"da seo Source Code, sendo conduzidos ento pgina que lista os tarballs
disponveis para download.
Nesta pgina, podemos observar que a verso mais recente, at esta data, a 1.4.2. Possivelmente voc deve estar se perguntando por que motivo esta verso mais recente que a
disponvel no repositrio testing do Debian, mas no se preocupe, isso perfeitamente normal.
Quando instalamos por cdigo-fonte temos essa vantagem, que poder obter a verso o mais
atualizada possvel do software.
No entanto, se estivermos interessados em obter uma verso do Subversion para desenvolvimento (e provavelmente instvel), possvel baixar seu cdigo-fonte diretamente do repositrio
oficial, a partir de http://svn.collab.net/repos/svn/trunk/ (voc aprender ao longo do curso como
obter uma cpia local desse repositrio).
At esta data, a verso estvel mais recente a 1.4.2, e ela ser utilizada nos exemplos. O
link correspondente a essa verso subversion-1.4.2.tar.bz2, podendo ser baixado pelo browser
ou por uma ferramenta de downloads como o wget.

4.2.2 Dependncias do Subversion


O documento INSTALL disponvel na raiz do arquivo baixado no passo anterior (subversion1.4.2.tar.bz2, se voc estiver seguindo os exemplos) lista em detalhes todas as dependncias do
Subversion, tanto para operao de seu cliente de linha de comando ou servidor. Como este
documento est em ingls, iremos detalhar as mais importantes neste tpico.
As dependncias do Subversion podem ser divididas entre as mnimas, para que seu cliente
de linha de comando opere, e as dependncias adicionais para operao de seu servidor, seja
ele disponibilizado atravs do svnserve ou de WebDAV.
Independentemente de qual dos dois perfis voc deseje utilizar (apenas cliente ou cliente+servidor),
voc necessitar das dependncias mnimas, a saber:
Apache Portable Runtime 0.9.7 (http://apr.apache.org/)
Neon 0.25.x ou 0.26.x (http://www.webdav.org/neon/)
Zlib (http://www.gzip.org/zlib/)
importante observar que a equipe que desenvolve o Subversion disponibiliza um pacote com
essas dependncias mnimas, que, em nosso caso, pode ser obtido na mesma pgina em que
obtemos o cdigo-fonte do Subversion, neste link: subversion-deps-1.4.2.tar.bz2. No cobriremos a instalao dessas dependncias neste curso, mas basta dizer que descompactando esse
20

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

pacote no mesmo diretrio em que for descompactado o cdigo-fonte, o processo de instalao


cuidar para que essas dependncias sejam instaladas. Alternativamente, voc pode instalar as
dependncias utilizando o gerenciador de pacotes de sua distribuio ou sistema operacional.
Dentre as dependncias adicionais, temos uma srie de bibliotecas, linguagens de programao e programas que podem ser instalados de acordo com as extenses do Subversion que desejamos utilizar. Determine quais dessas extenses sero necessrias (vide tambm Parmetros
do script configure, abaixo) e instale as dependncias correspondentes. Consulte o documento
INSTALL para mais informaes acerca dessas dependncias opcionais.

4.2.3 Parmetros do script configure


Antes de tratarmos dos parmetros a serem passados para o script configure, necessrio
preparar o ambiente de compilao do Subversion. Essa preparao pode ser feita como um
usurio sem privilgios (i.e. no h a necessidade de ser root).
Assumindo-se que j baixamos o pacote indicado no tpico Obtendo o cdigo-fonte, abra um
terminal e v at a pasta onde se encontra o referido pacote. Logo aps, descompacte o mesmo
e entre no diretrio criado:

fscarel@debian3:~/svn$ tar -xjf subversion-1.4.2.tar.bz2


fscarel@debian3:~/svn$ ls
subversion-1.4.2 subversion-1.4.2.tar.bz2
fscarel@debian3:~/svn$ cd subversion-1.4.2
fscarel@debian3:~/svn/subversion-1.4.2$
Lembre-se de descompactar neste mesmo diretrio o pacote de dependncias citado no tpico Dependncias do Subversion, caso tenha escolhido instal-las dessa maneira.
Listando-se o contedo desse diretrio, vemos que, de fato, existe o script configure l dentro:

fscarel@debian3:~/svn/subversion-1.4.2$ ls
aclocal.m4 build ChangeLog.CVS configure COPYING gen-make.opts INSTALL
packages tools www autogen.sh build.conf CHANGES configure.in dist.sh
gen-make.py Makefile.in README TRANSLATING BUGS build-outputs.mk
COMMITTERS contrib doc HACKING notes subversion win-tests.py
fscarel@debian3:~/svn/subversion-1.4.2$
O script configure, como se poderia imaginar, configura o Subversion para se adaptar a uma
gama de diferentes sistemas com os quais ele compatvel. Dessa forma, ele detecta se todas as
dependncias esto satisfeitas, determina os diretrios de instalao, ativa e/ou desativa caractersticas opcionais do pacote, dentre outras coisas. Para descobrir todos os possveis parmetros
que podem ser especificados, podemos list-los:

fscarel@debian3:~/svn/subversion-1.4.2$ ./configure --help


[output omitido]
fscarel@debian3:~/svn/subversion-1.4.2$
Como voc deve ter visto, o output desse comando BASTANTE grande, por isso vamos
tratar apenas das principais opes que podem ser especificadas:
21

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Installation directories:
--prefix=PREFIX Define o diretrio de instalao de arquivos independentes
de arquitetura
--exec-prefix=EPREFIX Define o diretrio de instalao de arquivos
dependentes de arquitetura
Optional Features:
--disable-FEATURE retira FEATURE (mesmo efeito que --enable-FEATURE=no)
--enable-FEATURE[=ARG] inclui FEATURE [ARG=yes]
Optional Packages:
--without-PACKAGE no utilizar PACKAGE (mesmo efeito que --with-PACKAGE=no)
--with-PACKAGE[=ARG] utilizar PACKAGE [ARG=yes]
Some influential environment variables:
CC comandos para o compilador C
CFLAGS flags para o compilador C
LDFLAGS flags para o linker, por exemplo -L<lib dir> se as bibliotecas esto
em um diretrio no-padro <lib dir>
Determine os parmetros a serem passados ao script configure pertinentes sua instalao,
habilitando as extenses desejadas e definindo os diretrios de instalao. Cuidado apenas com
os comando e flags passados ao compilador C: otimizaes excessivas podem ser nocivas ao
funcionamento do software!
Vale ressaltar aqui a importncia de escolher apropriadamente os parmetros a serem passados para o configure: caso deseje operar um servidor Subversion atravs do Apache, utilizando
WebDAV, voc dever especificar neste passo os diretrios nos quais se encontram o Apache, a
APR, dentre outros. O tpico Mtodos de acesso ao repositrio da Lio 3 detalha as diferenas entre o servidor standalone svnserve e o acesso ao repositrio atravs de mdulos WebDAV
pelo Apache. Talvez seja interessante ler esses tpicos antes de proceder com a instalao do
Subversion.

4.2.4 Compilao e Instalao


Escolhidos os parmetros a serem passados para o script configure, basta-nos agora configurar, compilar e instalar o Subversion no computador. No exemplo, iremos configurar o Subversion
para ser instalado nos diretrios padronizados do sistema (isto , no alteraremos seu prefix), e
sem nenhuma extenso que no as default (sem incluir mdulos de acesso ao Apache, persistncia em BerkeleyDB, dentre outros):

fscarel@debian3:~/svn/subversion-1.4.2$ ./configure
[output omitido]
fscarel@debian3:~/svn/subversion-1.4.2$
Finalmente, iremos compilar e instalar o Subversion (como root, j que usurios sem privilgios no tm permisso de escrita em /usr/local, o prefix padro):

22

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

debian3:/home/fscarel/svn/subversion-1.4.2# make && make install


[output omitido]
debian3:/home/fscarel/svn/subversion-1.4.2#
Pronto, instalamos o Subversion atravs de seu cdigo-fonte! No foi to difcil assim, no
mesmo?

4.3 Distribuies derivadas do Debian


Para instalar o Subversion em distribuies derivadas do Debian podemos simplesmente utilizar o gerenciador de pacotes nativo, o apt-get. Assim sendo, devemos primeiramente buscar o
nome do pacote correspondente ao Subversion utilizando o comando apt-cache:

fscarel@debian3:~$ apt-cache search subversion


baz-load-dirs - Import upstream archives into baz
cedar-backup2 - local and remote backups to CD-R/CD-RW media
cedar-backup2-doc - local and remote backups to CD-R/CD-RW media (documentation)
chora2 - code repository viewing component for horde framework
config-manager - manage directories with Arch, CVS, HTTP, FTP and/or Subversion
cvs2svn - Convert a cvs repository to a subversion repository
darcs-load-dirs - Import upstream archives into darcs
devscripts - Scripts to make the life of a Debian Package maintainer easier
esvn - frontend for the Subversion revision system written in Qt
esvn-doc - documentation for esvn
fldiff - A graphical diff program
flow-tools - collects and processes NetFlow data
flow-tools-dev - development files for flow-tools
gforge-plugin-scmsvn - subversion plugin for GForge
git-load-dirs - Import upstream archives into git
git-svn - content addressable filesystem (svn interoperability)
ikiwiki - a wiki compiler
kdesdk-kio-plugins - subversion ioslave for KDE
kdesvn - subversion client with tight KDE integration
kdesvn-kio-plugins - subversion I/O slaves for KDE
latex-svninfo - latex support for Subversion
libapache2-svn - Subversion server modules for Apache
libsvn-dev - Development files for Subversion libraries
libsvn-doc - Developer documentation for libsvn
libsvn-java - Java bindings for Subversion
libsvn-javahl - Java bindings for Subversion (dummy package)
libsvn-mirror-perl - A subversion repository mirroring tool
libsvn-notify-perl - Subversion activity notification
libsvn-perl - Perl bindings for Subversion
libsvn-ruby - Ruby bindings for Subversion (dummy package)
libsvn-ruby1.8 - Ruby bindings for Subversion
libsvn-simple-perl - A simple interface for writing a delta editor
libsvn1 - Shared libraries used by Subversion
libsvncpp-dev - Subversion C++ library (development files)
23

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

libsvncpp0c2a - Subversion C++ shared library


libsvnqt-dev - Qt wrapper library for subversion (development files)
libsvnqt3 - Qt wrapper library for subversion
libvcp-dest-svk-perl - perl VCP::Dest::svk - svk destination driver
python-subversion - Python bindings for Subversion
python-svn - A(nother) Python interface to Subversion
rapidsvn - A GUI client for subversion
subcommander - Graphical client for subversion
subcommander-doc - User guide for subcommander
subversion - Advanced version control system
subversion-tools - Assorted tools related to Subversion
svk - A Distributed Version Control System
svk-load-dirs - Import upstream archives into svk
svn-arch-mirror - one-way mirroring from Subversion to Arch revision control
svn-buildpackage - helper programs to maintain Debian packages with Subversion
svn-workbench - A Workbench for Subversion
svnmailer - an extensible subversion commit notification tool
tailor - migrate changesets between version control systems
texlive-latex-extra - TeX Live: LaTeX supplementary packages
tkcvs - A graphical front-end to CVS and Subversion
tkdiff - graphical side by side "diff" utility
tla-load-dirs - Import upstream archives into tla/arch
vcs-tree - Version Control System Tree Walker
viewcvs - view CVS Repositories via HTTP
websvn - interface for subversion repositories written in PHP
libsvn0 - Shared libraries used by Subversion
libapr0 - the Apache Portable Runtime
fscarel@debian3:~$
Como podemos ver, o nome do pacote correspondente ao Subversion, como poderamos
esperar, subversion, acompanhado de uma srie de bibliotecas e programas relacionados. Sabendo disso, basta-nos agora instalar, como usurio root, o pacote utilizando o comando apt-get:

debian3:~# apt-get install subversion


Reading package lists... Done
Building dependency tree... Done
Suggested packages:
subversion-tools db4.4-util
The following NEW packages will be installed
subversion
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.
Need to get 0B/1013kB of archives.
After unpacking 3330kB of additional disk space will be used.
Selecting previously deselected package subversion.
(Reading database ... 118549 files and directories currently installed.)
Unpacking subversion (from .../subversion_1.4.0-5_i386.deb) ...
Setting up subversion (1.4.0-5) ...
debian3:~#
24

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Pronto, agora j temos o Subversion instalado atravs do gerenciador de pacotes apt-get.


Vale lembrar que ele gerencia dependncias automaticamente e as instala, sem necessidade de
interveno manual. Foi bem fcil tambm, no ?
Vale lembrar que os exemplos acima foram testados na distribuio Debian GNU/Linux, porm
poderiam ser executados da mesma maneira em qualquer outra distribuio compatvel com o
Debian, como o Ubuntu Linux, Kurumin ou Knoppix, dentre outras.

25

Captulo 5

Administrao do repositrio
5.1 O repositrio Subversion
O repositrio Subversion a base de dados central dos dados versionados de todos os projetos existentes em um servidor. Muito embora seja extremamante importante que o administrador
aprenda como se deve administrar esse repositrio, ainda mais importante que todos os conceitos subjacentes a ele sejam compreendidos, e esse assunto que cobriremos neste tpico.
Conceitualmente, o repositrio Subversion uma sequncia de rvores de diretrios, sendo
cada uma dessas rvores uma "fotografia"de como o repositrio era em algum ponto de seu histrico. Essas "fotografias"so resultados de aes por parte dos usurios do repositrio, e so
conhecidas como revises.
importante observar que o Subversion trabalha com o conceito de transao: quando um
usurio envia seus dados ao repositrio, o Subversion cria uma rvore de diretrios contendo
as diferenas entre os dados enviados pelo usurio e aqueles da reviso mais recente. Posteriormente, o Subversion promove essa rvore de transao a uma nova rvore de reviso,
numerando-a de acordo. Caso algo d errado durante essa transao, ela destruda e o usurio informado deste fato, mantendo o repositrio e seus dados ntegros.
Existem duas opes possveis para armazenar os dados de um repositrio Subversion: um
destes tipos armazena os dados em uma base de dados Berkeley DB, e o outro armazena estes
dados em arquivos comuns, utilizando o sistema de arquivos nativo do sistema operacional. Estas opes so referenciadas, respectivamente, como amazenamentos BerkeleyDB e FSFS.
Quando da criao de um repositrio, responsabilidade do administrador escolher qual destes mtodos de armazenamento ser utilizado em seu repositrio. Cada um destes possui vantagens e desvantagens distintas, no sendo nenhum deles "oficial"em algum sentido.
importante notar que, independento do mtodo de armazenamento escolhido, aplicaes e
bibliotecas podero acessar o repositrio Subversion sem problemas, j que o meio de armazenamento tratado apenas pelo prprio Subversion, existindo uma API intermediria de acesso a
estes.
Abaixo apresentamos uma tabela (basicamente uma traduo da tabela de comparao entre

26

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

mtodos de armazenamento disponvel no SVN Book, neste link: http://svnbook.red-bean.com/nightly/en/svn.


que compara os repositrios BerkeleyDB e FSFS. Para maiores detalhes, leia a seo Repository
Data Stores do SVN Book, com link disponvel na bibliografia do Plano de Ensino.
Caracterstica
Sensibilidade a
interrupes

Utilizvel em montagem
somente leitura
Armazenamento independente
de plataforma
Utilizvel em sistemas de
arquivos via rede
Tamanho do repositrio
Escalabilidade: nmero de
rvores de reviso

Berkeley DB
alta; quebras e problemas de
permisses podem deixar a base
"travada", requerendo procedimentos
de recuperao via journal
no

FSFS
relativamente insensitiva

no

sim

no

sim

ligeiramente maior
base de dados; no h problemas

sim

Escalabilidade: diretrios com


muitos arquivos
Velocidade: checkout de cdigo
mais recente
Velocidade: grandes commits

mais lento

ligeiramente menor
alguns sistemas de arquivos
mais antigos no escalam bem
com milhares de entradas em
um nico diretrio
mais rpido

mais rpido

mais lento

mais lento, mas o trabalho


espalhado ao longo do commit

Gerncia de permisses de
grupos

sensvel a problemas de umask;


melhor se acessado por um usurio
apenas
em uso desde 2001

mais rpido, mas o delay de


finalizao pode causar
timeouts nos clientes
lida bem com problemas de
umask

Maturidade do cdigo

em uso desde 2004

5.2 Criao e configurao do repositrio


Criar um repositrio Subversion um tarefa bastante fcil. O programa "svnadmin", que acompanha o pacote do Subversion, possui um subcomando que desempenha exatamente esta funo. Para criar um novo repositrio, basta digitar:

$ svnadmin create /caminho/para/repositorio


Este comando criar um novo repositrio no diretrio /caminho/para/repositorio, na reviso
inicial 0, sem nenhum contedo. Vale ressaltar que, a partir da verso 1.2, o Subversion criado
com um sistema de armazenamento FSFS por padro. Obviamente, possvel alterar esse backend com o argumento fs-type:

$ svnadmin create --fs-type fsfs /caminho/para/repositorio


$ svnadmin create --fs-type bdb /caminho/para/repositorio
27

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Aps o comando "svnadmin create", voc ter ento um novo repositrio Subversion no diretrio designado. Listemos o contedo desse diretrio:

$ ls repositorio
conf/ dav/ db/ format hooks/ locks/ README.txt
Com exceo de README.txt e os arquivos format, todos os demais elementos do repositrio
so subdiretrios, indicando a grande importncia dada organizao hierrquica no design do
Subversion. Vejamos, ento, uma breve descrio de cada um desses subdiretrios:
conf: Diretrio contendo arquivos de configurao para o repositrio.
dav: Diretrio para arquivos de manuteno utilizados pelo Apache e mod_dav_svn.
db: Aqui onde todos os dados versionados se encontram, podendo ser tanto uma base
Berkeley DB (com diversas tabelas e similares) como um ambiente FSFS contendo arquivos de
reviso.
hooks: Diretrio contendo templates para scripts hook (e os prprios scripts, assim que voc
cri-los).
locks: Diretrio para os dados de locking do Subversion, usado para gerenciar usurios acessando o repositrio.
Em geral, no ser necessrio alterar o repositrio manualmente. A ferramenta "svnadmin"deve ser suficiente para quaisquer mudanas necessrias ao repositrio, existindo ainda
ferramentas externas (como a sute de ferramentas Berkeley DB) para gerenciar partes especficas do repositrio.
Voc deve estar se perguntando o que so scripts hook, e qual sua funo no repositrio Subversion. Esses scripts nada mais so do que programas executados sempre que algum evento
ocorre no repositrio, seja ele um commit ou uma mudana de propriedades dos dados. Voc
pode, por exemplo, desejar enviar um email para o administrador sempre que um commit for concludo em seu repositrio (correspondendo ento ao arquivo "post-commit").
Dada a extenso do tema, no iremos cobri-lo neste curso, convidando o leitor interessado a
buscar informaes complementares na seo "Repository Creation and Configuration"do SVN
Book, na URL: http://svnbook.red-bean.com/nightly/en/svn.reposadmin.create.html

5.3 Manuteno do repositrio


A manuteno de um repositrio Subversion pode se mostrar uma tarefa desafiadora, agravada principalmente pelas complexidades inerentes a sistemas em bases de dados. Desempenhar essa tarefa com sucesso um questo de conhecer as ferramentas: quais so, quando e
como us-las.
O Subversion prov uma srie de ferramentas teis para criar, inspecionar, modificar e reparar
um repositrio. Iremos olhar brevemente as principais dentre essas ferramentas (as demais, claro,
28

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

podero ser encontradas no SVN Book, seo "Repository Maintenance": http://svnbook.redbean.com/nightly/en/svn.reposadmin.maint.html).

5.3.1 svnlook
A ferramenta "svnlook" provida juntamente com o Subversion e utilizada com o intuito de
examinar as diversas revises e transaes em um repositrio, sem no entanto alter-lo: uma
ferramenta "somente leitura", por assim dizer. Esta ferramenta tipicamente utilizada pelos scripts
hook do repositrio para reportar mudanas a serem efetuadas (pre-commit) ou que terminaram
de ser efetivadas (post-commit) no repositrio. Um administrador pode utilizar essa ferramenta
para fins de diagnstico.

5.3.2 svnadmin
O programa "svnadmin" o melhor amigo do administrador do repositrio. Alm de prover
a funo de criao de repositrios Subversion (funo j vista no tpico anterior), ele tambm
possui a capacidade de efetuar diversas operaes de manuteno nesses repositrios.

5.3.3 Migrando um repositrio


Um sistema de armazenamento Subversion possui seus dados espalhados atravs de diversas tabelas e arquivos de uma forma compreendida, em geral, apenas pelos prprios desenvolvedores do Subversion. No entanto, podem ocorrer eventos nos quais todos esses dados (ou
parte deles) devero ser reunidos em um nico, portvel e simples formato de arquivo texto. O
Subversion prov tal mecanismo, implementado como um par de comandos do programa "svnadmin": dump e load.
A razo mais comum para fazer um dump ou um load de um repositrio Subversion devido
a mudanas no prprio Subversion. medida em que o Subversion amadurece, podem ocorrer
mudanas ao back-end que o tornam incompatvel com verses anteriores do repositrio. Outras
razes para dump e load podem ser a migrao de um repositrio Berkeley DB para um novo
sistema operacional ou arquitetura de CPU, ou a migrao de back-end Berkeley DB para FSFS,
por exemplo. O mtodo de migrao recomendado relativamente simples:
1. Usando a verso ATUAL de seu "svnadmin", faa um dump dos repositrios para arquivos
de dump.
2. Atualize o Subversion para sua nova verso.
3. Mova os repositrios antigos para um outro lugar, e crie novos (e vazios) repositrios em
seus lugares utilizando a NOVA verso do "svnadmin".
4. Mais uma vez utilizando a NOVA verso do "svnadmin", carregue os arquivos de dump
em seus respectivos e recm-criados repositrios.
5. Certifique-se de ter copiado quaisquer customizaes dos repositrios antigos para os
novos, incluindo arquivos DB_CONFIG e scripts hook, atentando para a existncia de modificaes no Subversion que podem alterar a operao dessas customizaes.

29

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

6. Se o processo de migrao fez com que o repositrio seja acessado por uma URL
diferente (movido para um computador diferente, ou acessado por um sistema de armazenamento distinto, por exemplo), ento voc provavelmente dever informar os usurios que
eles devero executar "svn switch relocate"em suas cpias locais.

5.3.4 Backup do repositrio


No obstante os numerosos avanos tecnolgicos desde a criao do computador moderno,
um evento infelizmente verdico e preocupante - s vezes, as coisas podem ir muito, muito mal.
Quedas de energia, problemas com conexo de rede, RAM corrompida e discos rgidos estragados so apenas uma pequena mostra de como o Destino pode brincar at mesmo com o mais
consciente administrador. E assim, chegamos a um tpico muito importante: como fazer backups
dos dados do repositrio.
Existem em geral dois mtodos de backup disponveis para os administradores de repositrios
Subversion: incremental e completo. A diferena entre ambos que o backup incremental salva
apenas, em um dado momento, os dados que foram alterados desde o ltimo backup. No backup
completo, todos os dados do repositrio so salvos, no importando se outro backup foi feito no
dia anterior, por exemplo.
Um backup completo do repositrio consiste literalmente em uma duplicao de todo o diretrio do repositrio (incluindo a base Berkeley DB ou o ambiente FSFS). Porm, a menos que voc
desabilite temporariamente todos os mtodos de acesso ao seu repositrio, fazer simplesmente
a cpia do diretrio incidir no risco de gerar um backup falho, j que algum pode estar escrevendo no repositrio exatamente naquele momento.
Mesmo que se tenha um backup incremental, esse problema ainda pode ocorrer rotineiramente. Por isso, voc pode incluir o script hot-backup.py (um script hook provido pelo Subversion
para efetuar o backup do repositrio online) no agendador de tarefas cron ou como um script
post-commit.
Dada a extenso do tema de Backup do repositrio, apresentamos aqui apenas os conceitos
fundamentais dessa tcnica, convidando o leitor a consultar os comandos especficos na seo
"Repository Maintenance"do SVN Book: http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html

5.4 Adio de projetos


Uma vez que o repositrio esteja criado e configurado, tudo o que resta agora comear a
us-lo. Se voc tem um conjunto de dados existentes que est pronto para ser colocado sob
controle de verses, voc mais que certamente desejar usar o subcomando "import"do cliente
svn para atingir esse objetivo. Neste tpico, iremos discutir como planejar o layout do repositrio,
e como inserir seus dados nesse layout.

5.4.1 Escolhendo um layout de repositrio


Muito embora o Subversion permita que haja a movimentao entre arquivos e diretrios versionados sem perda de informao, faz-lo pode prejudicar o ritmo de trabalho de outros que
30

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

acessam o repositrio frequentemente e esperam que os arquivos estejam em lugares previsveis. Tente visualizar o futuro: planeje antes de colocar seus dados sob controle de verses.
Criando um layout otimizado do contedo dos repositrios, muitas dores de cabea futuras podero ser evitadas.
H alguns fatores a serem considerados quando do setup de repositrios Subversion. Assumamos que, como um administrador do repositrio, voc ser responsvel pelo suporte de
diversos projetos. A primeira deciso a ser tomada se existir um nico repositrio para todos
os projetos, ou se cada projeto ter seu repositrio, ou ainda uma combinao dessas solues.
Existem benefcios ao se utilizar um nico repositrio para mltiplos projetos, e o mais bvio deles que no existe duplicao de manuteno: um nico conjunto de scripts hook, um
repositrio a se fazer backup, um pool para se fazer dump e load quando uma nova verso do
Subversion for lanada, e assim por diante. Alm disso, voc pode mover dados entre projetos
facilmente, e sem perda de informao de versionamento.
O problema de usar um nico repositrio que diferentes projetos podem ter diferentes listas
de email para commits ou diferentes requerimentos de autenticao e autorizao. Alm disso,
lembre-se que o Subversion utiliza nmeros de reviso globais para o repositrio. Algumas pessoas no gostam que, mesmo no tendo existido modificaes em seus projetos recentemente,
o nmero de reviso suba constantemente porque outros projetos esto ativamente adicionando
novas revises.
Uma aproximao intermediria pode ser feita, tambm. Por exemplo, projetos podem ser
agrupados pelo nvel de interrelao entre si. Voc pode ter alguns repositrios com um nmero
de projetos dentro de cada um. Desta maneira, projetos que tm chance de compartilhar dados
podero faz-lo facilmente, e medida que novas revises forem adicionadas ao repositrio, os
desenvolvedores sabero que essas novas revises esto minimamente relacionadas com todos
que utilizam o repositrio.
Aps decidir como organizar seus projetos com respeito aos repositrios, voc provavelmente
desejar pensar na hierarquia de diretrios dentro desses repositrios. Como o Subversion utiliza
cpias comuns de diretrios para branching e tagging (captulo 4 do SVN Book "Branching and
Merging": http://svnbook.red-bean.com/nightly/en/svn.branchmerge.html), recomendade que se
escolha uma localizao o mais prxima possvel da raiz do repositrio, criando abaixo deste trs
subdiretrios: trunk, o diretrio que contm o projeto principal de desenvolvimento; branches,
que contm desvios do projeto principal, desenvolvidos parte; tags, que contm branches que
nunca so modificados (verses estveis, por exemplo).
Vejamos um exemplo prtico de como ficaria organizado um repositrio:

/
calculadora/
trunk/
tags/
branches/
calendario/
trunk/
31

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

tags/
branches/
planilha/
trunk/
tags/
branches/
Note que no importa onde est localizada a raiz de cada projeto dentro do repositrio. Se
voc tem apenas um projeto por repositrio, o local bvio para se colocar a raiz de cada projeto
a raiz de seu respectivo repositrio. Se voc tem mltiplos projetos, voc pode querer coloclos dentro de grupos no repositrio, talvez agrupando-os por similaridade de objetivos ou cdigo
compartilhado por cada um deles. Vejamos um exemplo desse layout:

/
utilidades/
calculadora/
trunk/
tags/
branches/
calendario/
trunk/
tags/
branches/
escritorio/
planilha/
trunk/
tags/
branches/
Crie o layout de seu repositrio da forma que melhor lhe convier. O Subversion no espera ou
fora um layout especfico, e um diretrio _apenas_ um diretrio. No fim das contas, voc deve
escolher um layout que melhor atenda as necessidades dos que trabalham nos projetos de seu
repositrio.

5.4.2 Criando o layout e importando os dados iniciais


Aps decidir como organizar os projetos em seu repositrio, voc provavelmente quer popular
o repositrio com esse layout e os dados iniciais de cada projeto. H algumas maneiras de fazer
isso no Subversion. Voc poderia utilizar o comando "svn mkdir"(a ser visto na prxima lio) para
criar o layout de diretrios em seu repositrio, um a um. Uma forma mais rpida de se fazer isso
utilizar o comando "svn import". Criando o layout incialmente em uma localizao temporarria
do disco, voc pode importar esse layout para o repositrio em um nico commit:

$
$
$
$
$
$

mkdir temp
cd temp
mkdir calculadora
mkdir calculadora/trunk
mkdir calculadora/branches
mkdir calculadora/tags
32

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

$ mkdir planilha
$ mkdir planilha/trunk
$ mkdir planilha/branches
$ mkdir planilha/tags
$ svn import . file:///caminho/do/repositorio --message "Import inicial de Layout"
Adding calculadora
Adding calculadora/trunk
Adding calculadora/branches
Adding calculadora/tags
Adding planilha
Adding planilha/trunk
Adding planilha/branches
Adding planilha/tags
Committed revision 1.
$ cd ..
$ rm -rf temp
$
Voc pode verificar os resultados do import com o comando "svn list":

$ svn list --verbose file:///caminho/do/repositorio


1 joao May 08 21:48 calculadora/
1 joao May 08 21:48 planilha/
$
Uma vez que voc tenha o layout em seu lugar, voc pode comear a efetivamente importar
os dados de projeto em seu repositrio, se esses dados j existirem. Mais uma vez, h mais de
uma maneira de faz-lo. Voc poderia fazer o checkout de uma cpia local do repositrio, mover
os dados para essa cpia local e ento usar "svn add"e "svn commit"para enviar os dados. Mas
esse um assunto da prxima lio, por isso, vamos parar por aqui.

33

Captulo 6

Configurao do servidor
6.1 Viso geral
Um repositrio Subversion pode ser acessado simultaneamente por clientes na mesma mquina em que ele reside utilizando o mtodo file:///. A configurao tpica do Subversion, porm,
envolve uma nica mquina servidora sendo acessada por clientes em computadores de todo o
escritrio, ou, quem sabe, espalhados ao redor do mundo.
O Subversion foi planejado para utilizar uma camada de rede abstrata. Isto quer dizer que um
repositrio pode ser acessado por qualquer tipo de processo servidor, e a API cliente de "acesso
ao repositrio"permite aos programadores escrever plugins que conversem utilizando variados
protocolos de rede. Em teoria, portanto, o Subversion pode utilizar um nmero infinito de implementaes de rede. Na prtica, porm, existem apenas dois servidores at o momento.
O Apache um servidor web extremamente popular: utilizando o mdulo mod_dav_svn, o
Apache pode acessar um repositrio e torn-lo disponvel para clientes atravs do protocolo WebDAV/DeltaV, uma extenso ao HTTP. No outro extremo est o svnserve: um programa servidor
independente e pequeno que utiliza um protocolo customizado para comunicao.
Note que o Subversion, por ser um projeto de software livre, no recomenda nenhum dos
dois servidores como sendo "oficial"ou "primrio". Nenhuma das duas implementaes de rede
melhor ou pior que a outra; cada servidor tem suas vantagens e desvantagens. De fato, possvel
operar diferentes servidores em paralelo, cada qual acessando os repositrios sua maneira, e
sem prejudicar as funes do outro. Podemos ver uma comparao entre os dois servidores na
tabela a seguir:

34

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Caracterstica
Opes de autenticao

Opes de contas de
usurios

Apache + mod_dav_svn
Autenticao bsica HTTP(S),
certificados X.509, LDAP, NTLM,
ou quaisquer outros mecanismos
disponveis para o Apache httpd
arquivo users privativo

Opes de autorizao

controle por usurio ou por


diretrio de leitura/escrita

Criptografia
Interoperabilidade

via SSL opcional


parcialmente utilizvel por
outros clientes WebDAV
suporte built-in limitado,
ou atravs de ferramentas 3rd-party
razoavelmente mais lento
razoavelmente complexo

Visualizao web
Velocidade
Configurao inicial

Brasil/DF

svnserve
CRAM-MD5 ou SSH

arquivo users privativo,


ou contas de sistema
existentes (SSH)
controle por usurio de
leitura/escrita, ou controle
de escrita (mas no leitura)
por diretrio utilizando
um hook pre-commit
via tunelamento SSH opcional
no interopervel
atravs de ferramentas
3rd-party
razoavelmente mais rpido
bastante simples

6.2 svnserve, um servidor customizado


O programa svnserve um servidor leve, capaz de comunicar-se com clientes atravs de
TCP/IP utilizando um protocolo customizado. Clientes podem contatar um servidor svnserve
atravs de URLs iniciadas por svn:// ou svn+ssh://. Neste tpico iremos explorar as diferentes
maneiras de executar o svnserve, como os clientes se autenticam com esse servidor, e como
configurar controles de acessos apropriados para seus repositrios.

6.2.1 Iniciando o servidor


H algumas maneiras diferentes de iniciar o programa svnserve. Se iniciado sem opes,
nada ser mostrar alm de uma mensagem de ajuda. No entanto, se pretendemos que o inetd
inicie o processo, ento podemos passar a opo -i (inetd):

$ svnserve -i
( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline ) ) )
Quando iniciado com a opo inetd, o svnserve espera comunicar-se com um cliente Subversion atravs da entrada e sada padro (stdin e stout) utilizando um protocolo customizado, um
comportamento padro para programas executados via inetd. A IANA (Internet Assigned Numbers Authority) reservou a porta 3690 para o protocolo Subversion, ento em um sistema UNIX
podemos adicionar as seguintes linhas ao arquivo /etc/services (se j no estiverem l):

svn 3690/tcp # Subversion


svn 3690/udp # Subversion
E se o o sistema est usando um daemon inetd UNIX clssico, podemos adicionar esta linha
ao /etc/inetd.conf:
35

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

svn stream tcp nowait svnowner /usr/bin/svnserve svnserve -i


Certifique que o usurio "svnowner"tem permisses apropriadas para acesso aos repositrios. Agora, quando uma conexo de um cliente chegar ao servidor na porta 3690, o inetd ir
iniciar um processo do svnserve para atend-la.
Uma segunda opo rodar o svnserve como um "daemon"standalone. Para tal, utilize a
opo -d:

$ svnserve -d
$ # svnserve agora est rodando, escutando a porta 3690
Ao rodar o svnserve em modo daemon, voc pode usar a opo listen-port e listen-host
para customizar a porta e hostname nos quais o "bind"ser efetuado.
H ainda uma terceira maneira para invocar o svnserve, em modo "tunelamento", com a opo -t. Este modo assume que um programa de servio remoto como RSH ou SSH autenticou
com sucesso um usurio e est invocando um processo svnserve privado como aquele usurio.
O programa svnserve atua de maneira normal, assumindo que o trfego est sendo automaticamente redirecionado por algum tunelamento para o cliente. Quando o svnserve for invocado por
um tunelamento, como descrito, certifique-se de que o usurio autenticado tem permisso total
de leitura e escrita no repositrio. essencialmente o mesmo procedimento de um usurio local
acessando o repositrio atravs do mtodo file:///.

6.2.2 Autenticao e autorizao integrada


Quando um cliente se conecta a um processo svnserve, as seguintes coisas acontecem:
O cliente seleciona um repositrio especfico;
o servidor processa o arquivo conf/svnserve.conf, e aplica quaisquer polticas de autenticao e autorizao l definidas;
dependendo da situao e das polticas de autorizao:
o cliente pode ser autorizado a fazer requisies anonimamente, sem autenticao;
o cliente dever autenticar-se;
se operando em modo de tunelamento, o cliente ir declarar que j foi autenticado
externamente;
At o momento, o svnserve s compatvel com o mtodo de autenticao CRAM-MD5. Essencialmente, o servidor envia um pacote de dados ao cliente, que usa um algoritmo de hash MD5
para criar uma assinatura dos dados e da senha combinados, e ento a envia como resposta. O
servidor calcula a assinatura em conjunto com a senha local para verificar que o resultado idntico. Em nenhum momento a senha do usurio atravessa a rede.
Obviamente, tambm possvel que o cliente seja autenticado externamente atravs de um
agente de tunelamento, como o SSH. Neste caso, o servidor simplesmente examina o usurio
com o qual est executando, e o utiliza para acessar o repositrio.

36

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Como voc j deve ter desconfiado, a arquivo svnserve.conf de um repositrio o mecanismo


central de controle de autenticao e autorizao. O arquivo tem o seguinte formato: sees so
identificadas por colchetes - [], comentrios so iniciados por cerquilha - #, e cada seo contm
variveis que podem ser ajustadas - varivel = valor.

6.2.3 Criando um arquivo e domnio users


Por ora, a seo [general] do arquivo svnserve.conf contm todas as variveis de nosso interesse. Defina inicialmente um arquivo contendo usurios e senhas, bem como um domnio de
autenticao:

[general]
password-db = userfile
realm = dominio exemplo
O domnio um nome definido pelo administrador que indica aos clientes o domnio de autenticao ao qual esto se conectando; o cliente Subversion mostra esse domnio no prompt de
autenticao, e o utiliza como uma chave (juntamente com o hostname do servidor e a porta)
para fazer cache de credenciais no disco. A varivel password-db aponta para um arquivo em
separado que contm uma lista de usurios e senhas, utilizando o mesmo formato. Por exemplo:

[users]
joao = foopassword
maria = barpassword
O valor de password-db pode ser qualquer caminho absoluto ou relativo de diretrios at o
arquivo users. Para muitos administradores, conveniente manter o arquivo dentro do diretrio
conf/ do repositrio, juntamente com svnserve.conf. Por outro lado, possvel que voc deseje
que dois ou mais repositrios compartilhem o mesmo arquivo users, caso em que o arquivo
provavelmente deveria ficar em um local de acesso mais irrestrito. Os repositrios compartilhando
o arquivo users poderiam ainda ser configurados para ter o mesmo domnio, j que uma lista de
usurios define essencialmente um domnio. Qualquer que seja o diretrio onde se encontra o
arquivo, certifique-se de que as permisses de leitura e escrita esto ajustadas corretamente.

6.2.4 Ajuste de controle de acesso


H ainda duas variveis interessantes a serem ajustadas em svnserve.conf: elas determinam
o que usurios no-autenticados (annimos) e usurios autenticados podero fazer no repositrio. As variveis anon-access e auth-access podem ser ajustadas para os valores none, read ou
write. Ajustando o valor para none restringe qualquer tipo de acesso; read permite acesso somente de leitura, e write permite acesso completo de leitura e escrita ao repositrio. Por exemplo:

[general]
password-db = userfile
realm = dominio exemplo
# usuarios anonimos podem apenas ler do repositorio
anon-access = read
37

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

# usuarios autenticados podem ler e escrever


auth-access = write
Essas configuraes de exemplo so, de fato, os valores padronizados para as variveis, caso
no sejam definidas. Se voc deseja ser ainda mais conservativo, voc pode bloquear acesso
annimo por completo:

[general]
password-db = userfile
realm = dominio exemplo
# usuarios anonimos nao sao autorizados
anon-access = none
# usuarios autenticados podem ler e escrever
auth-access = write
Observe que o svnserve suporta apenas controle de acesso por usurio. Um usurio pode
ou ter acesso universal de leitura e escrita, acesso universal de leitura ou nenhum acesso. No
h controle detalhado sobre diretrios especficos do repositrio, o que, para muitos projetos,
suficiente e adequado. No entanto, se voc necessita de controle de acesso por diretrio, ser
necessrio utilizar o mod_authz_svn do Apache (a ser visto no tpico seguinte), ou utilizar um
hook pre-commit para controlar acesso de escrita.
O controle de acesso via tunelamento bastante semelhante ao descrito anteriormente,
mas, dada a especificidade do tema, deixamos aqui o link do SVN Book que explica esse tpico em maior detalhe, aos alunos interessados nesse tipo de configurao: http://svnbook.redbean.com/nightly/en/svn.serverconfig.svnserve.html

6.3 httpd, o servidor web Apache


O servidor HTTP Apache um servidor web "peso-pesado"com o qual o Subversion pode
interagir. Atravs de um mdulo customizado, o httpd torna repositrios Subversion disponveis
atravs do protocolo WebDAV/DeltaV, que uma extenso ao HTTP 1.1. Esse protocolo adiciona funcionalidades de escrita em versionamentos ao onipresente protocolo HTTP. O resultado
um sistema padronizado e robusto convenientemente empacotado como parte do servidor web
Apache 2.0, suportado por inmeros sistemas operacionais e desenvolvedores third-party, alm
de no exigir que o administrador de rede abra uma porta customizada para operao. Muito
embora o servidor Apache-Subversion tenha mais funcionalidades que o svnserve, tambm um
pouco mais difcil de configurar. Flexibilidade vem acompanhada de complexidade.
Muito deste tpico inclui referncias a diretivas de configurao do Apache. Ainda que alguns
exemplos sejam dados no uso dessas diretivas, descrev-las a fundo est fora do escopo deste
texto. A equipe do Apache mantm uma excelente documentao, publicamente disponvel em
seu website em http://httpd.apache.org. Uma referncia geral para as diretivas de configurao
do Apache pode ser encontrada em http://httpd.apache.org/docs-2.0/mod/directives.html.

38

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Na medida em que voc for fazendo modificaes sua configurao do Apache, provvel
que algum erro seja cometido durante esse processo. Se voc no est familiarizado com o subsistema de logs do Apache, necessrio tomar conhecimento do mesmo. No arquivo httpd.conf
h diretivas que especificam as localizaes dos logs de acesso e erro gerados pelo Apache
(diretivas CustomLog e ErrorLog, respectivamente). O mod_dav_svn do Subversion utiliza essa
interface de log tambm. interessante observar o contedo desses arquivos sempre que aparecer um problema, pois eles podem revelar a fonte deste erro.

6.3.1 Pr-requisitos
Para colocar seu repositrio em rede com HTTP, voc precisa basicamente de quatro componentes, disponveis em dois pacotes. Voc vai precisar do Apache httpd 2.0 ou superior, o mdulo
mod_dav que o acompanha, o prprio Subversion, e a interface de acesso ao sistema de arquivos mod_dav_svn distribudo com o Subversion. Com todos esses componentes, o processo de
configurao do servidor to simples quanto:
inicializar o httpd 2.0 ou superior e o mdulo mod_dav;
instalar o plugin mod_dav_svn ao mod_dav, que utiliza as bibliotecas do Subversion para
acessar o repositrio;
configurar o arquivo httpd.conf para exportar o repositrio.
Voc pode cumprir os dois primeiros itens tanto pela compilao do httpd e do Subversion
por cdigo-fonte, ou instalando pacotes pr-compilados disponveis em seu sistema. Para as
informaes mais recentes de como compilar o Subversion para uso com o servidor web Apache,
bem como compilar o prprio Apache com esse propsito, veja o arquivo INSTALL na raiz do
pacote fonte do Subversion.

6.3.2 Configurao bsica do Apache


Uma vez que voc tenha todos os componentes necessrios instalados em seu sistema, tudo
o que resta a configurao do Apache atravs de seu arquivo httpd.conf. Instrua o Apache a
carregar o mod_dav_svn utilizando a diretiva LoadModule. Esta diretiva deve preceder qualquer
outra configurao relativa ao Subversion. Se o Apache foi instalado em seu prefix padro (normalmente /usr/local/apache2), o mod_dav_svn deve ter sido instalado no diretrio de mdulos
correspondente. A diretiva LoadModule tem uma sintaxe simples, mapeando um mdulo para a
localizao de uma biblioteca compartilhada no sistema:

LoadModule dav_svn_module modules/mod_dav_svn.so


Note que se o mod_dav foi compilado como objeto compartilhado (e no estaticamente ligado
ao binrio httpd), voc vai precisar de uma diretiva LoadModule para ele tambm. Certifique-se
de que ela vem antes da linha do mod_dav_svn:

LoadModule dav_module modules/mod_dav.so


LoadModule dav_svn_module modules/mod_dav_svn.so

39

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

frente no arquivo, voc dever agora informar o Apache onde se encontra o repositrio (ou
repositrios) Subversion. A diretiva Location tem uma notao parecida com XML, iniciando com
uma tag de abertura, e finalizando com uma tag de fechamento, com vrias outras diretivas de
configurao entre as tags. O propsito da diretiva Location instruir o Apache a fazer algo especial quando lidando com requisies direcionadas para uma dada URL. No caso do Subversion,
voc quer que o Apache apenas repasse requisies naquela URL para que a camada DAV a
trate. Voc pode instruir o Apache para delegar todas as URLs iniciando com /repos/ para um
provedor DAV cujo repositrio reside em /caminho/para/repositorio usando a seguinte sintaxe:

<Location /repos>
DAV svn
SVNPath /caminho/para/repositorio
</Location>
Se voc planeja oferecer mltiplos repositrios Subversion que iro residir sob o mesmo diretrio no disco, voc pode usar uma diretiva alternativa, SVNParentPath, para indicar esse diretrio
comum. Por exemplo, se voc sabe que ir criar mltiplos repositrios no diretrio /usr/local/svn
que ser acessado por URLs como http://meu.servidor.com/svn/repo1, http://meu.servidor.com/svn/repo2,
e assim sucessivamente, voc poderia usar a seguinte sintaxe:

<Location /svn>
DAV svn
# qualquer URL "/svn/foo" ir para /usr/local/svn/foo
SVNParentPath /usr/local/svn
</Location>
Usando a sintaxe acima, o Apache ir delegar o atendimento de URLs comeadas por /svn/
para o provedor DAV do Subversion, que ir ento assumir que qualquer item no diretrio especificado em SVNParentPath na verdade um repositrio Subversion. Esta uma sintaxe particularmente conveniente porque, ao contrrio da diretiva SVNPath, no necessrio reiniciar o
Apache quando da criao de novos repositrios.
Tenha a certeza de que, quando definir um novo Location, ele no conflita com outros Locations exportados. Por exemplo, se seu DocumentRoot principal /www, no exporte um repositrio
Subversion em <Location /www/repos>. Se uma requisio chegar para a URI /www/repos/foo.c,
o Apache no saber se deve buscar um arquivo /repos/foo.c no DocumentRoot, ou se deve delegar para o mod_dav_svn o retorno de foo.c a partir do repositrio Subversion.
Neste ponto, voc deve considerar cuidadosamente a questo de permisses. Se voc j
trabalha com o Apache h algum tempo como seu servidor web, j deve provavelmente ter um
conjunto de pgina web, scripts e afins. Esses itens j foram configurados com um conjunto de
permisses que os permite trabalhar com o Apache, ou melhor, que permitem que o Apache trabalhe com esses arquivos. Quando utilizando o Apache como um servidor Subversion, tambm
se deve ajustar corretamente as permisses para leitura e escrita em seu repositrio Subversion.
Voc dever determinar um sistema de permisses que satisfaa as exigncias do Subversion, mas sem atrapalhar qualquer instalao de pgina web ou script prvia. Isto pode significar

40

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

mudana nas permisses de seu repositrio Subversion para que sejam compatveis com os outros elementos servidos pelo Apache, ou poderia significar utilizar as diretivas User e Group no
httpd.conf para especificar que o Apache deve rodar como o usurio e grupo donos de seu repositrio Subversion. No h uma maneira nica de ajustar corretamente essas permisses, e cada
administrador ter diferentes razes para ajust-las de determinada maneira. Tenha em mente
apenas que problemas relacionados a permisses esto provavelmente entre os mais comuns
enganos quando da configurao de um repositrio Subversion juntamente com o Apache.

6.3.3 Opes de autenticao


At o momento, se voc configurou o httpd.conf para conter algo como

<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
</Location>
...ento o seu repositro est "anonimamente"acessvel para qualquer cliente. At que voc
configure alguma poltica de autenticao e autorizao, os repositrios Subversion que voc
disponibilize atravs da diretiva Location estaro geralmente acessveis para todos. Em outras
palavras,
qualquer usurio pode usar seu cliente Subversion para efetuar checkout de uma cpia local
do repositrio;
qualquer usurio pode navegar na ltima reviso do repositrio apontando seu browser para
a URL do mesmo;
qualquer usurio pode efetuar commit para o repositrio;

6.3.4 Autenticao HTTP Bsica


A forma mais fcil de autenticar um cliente atravs do mecanismo de auteticao HTTP bsico, que simplesmente utiliza um nome de usurio e senha para verificar se um usurio quem
realmente afirma ser. O Apache prove a ferramente htpasswd para gerenciar a lista de nomes
de usurios e senhas, para os quais voc deseja prover acesso especial em seu repositrio Subversion. Vamos dar acesso de commit para os usurios Joo e Maria. Primeiramente, devemos
adicion-los ao arquivo de senhas:

$ ### Na primeira execuo, utilize a opo -c para criar o arquivo


$ ### Utilize a opo -m para aplicar encriptao MD5 senha, um \ procedimento
mais seguro
$ htpasswd -cm /etc/svn-auth-file joao
New password: *****
Re-type new password: *****
Adding password for user joao
$ htpasswd -m /etc/svn-auth-file maria
New password: *******
Re-type new password: *******
Adding password for user maria
$
41

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Agora, voc precisa adicionar mais algumas diretivas no bloco Location de seu httpd.conf
para informar o Apache sobre o que ele deve fazer com seu novo arquivo de senhas. A diretiva
AuthType especifica o tipo de sistema de autenticao a ser usado. Nesse caso, iremos especificar o sistema Basic. AuthName um nome escolhido pelo administrador que indica o domnio
de autenticao, mostrado em uma caixa de dilogo pop-up de login/senha, na maioria dos browsers. Finalmente, a diretiva AuthUserFile especifica o caminho at o arquivo de senhas criado
com o comando htpasswd previamente.
Aps adicionar essas trs diretivas, o bloco <Location> deve estar parecido com:

<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/svn-auth-file
</Location>
Este bloco <Location> no est completo, e no far nada de til (ainda). Ele est meramente dizendo ao Apache que, sempre que for requerida autorizao, ele dever exigir um nome
de usurio e senha do cliente Subversion. Esto faltando diretivas que digam ao Apache quais
tipos de requisies vindas de um cliente requerem autorizao. Sempre que autorizao for
requerida, o Apache ir demandar tambm autenticao. O procedimento mais simples a fazer proteger todas as requisies. A adio "Require valid-user"diz ao Apache que todas as
requisies exigem um usurio autenticado:

<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>
No prximo tpico iremos ver mais detalhes sobre a diretiva Require e outras maneiras de
ajustar polticas de autorizao.
Um alerta: na autenticao HTTP Basic as senhas atravessam a rede em um formato muito
prximo de texto puro, de forma extremamente insegura. Se voc est preocupado com captura
de senhas, pode ser uma boa idia utilizar alguma forma de encriptao SSL, para que os clientes se autentiquem atravs de https:// ao invs de http://; minimamente, voc pode configurar
o Apache para utilizar um certificado de servidor auto-assinado. Consulte a documentao do
Apache e OpenSSL para informaes sobre como faz-lo.

6.3.5 Controle de acesso por usurio (blanket)


A maneira mais simples de controle de acesso autorizar certos usurios para acesso somente leitura, ou de leitura e escrita ao repositrio.

42

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Voc pode restringir acesso a todas as operaes no repositrio adicionando a diretiva "Require valid-user"ao bloco <Location>. Usando nosso exemplo anterior, isto significaria que apenas clientes que disseram ser "joao"ou "maria", e informaram a senha correta para seu respectivo
usurio, seriam autorizados a fazer qualquer ao com o repositrio Subversion:

<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
# como autenticar um usuario
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/svn-auth-file
# apenas usuarios autenticados podem acessar o repositorio
Require valid-user
</Location>
Algumas vezes no necessrio exercer um controle to estrito. Por exemplo, o prprio repositrio do Subversion em http://svn.collab.net/repos/svn permite acesso somente-leitura para
qualquer usurio (como efetuar checkout de uma cpia local ou navegar no repositrio utilizando
um browser), mas restringe todas as operaes de escrita somente para usurios autenticados.
Para fazer este tipo de de restrio seletiva, voc pode usar as diretivas de configurao Limit e
LimitExcept. Assim como a diretiva Location, esses blocos tm tags de incio e trmino, e voc
iria coloc-las dentro do bloco <Location>.
Os paramtros presentes nas diretivas Limit e LimitExcept so tipos de requisies HTTP afetadas por aquele bloco. Por exemplo, se voc quisesse proibir qualquer acesso ao repositrio
exceto as operaes somente de leitura, voc usaria a diretiva LimitExcept, passando as requisies GET, PROPFIND, OPTIONS e REPORT como parmetros. Assim, a diretiva previamente
mencionada "Require valid-user"seria colocada dentro do bloco <LimitExcept> ao invs do bloco
<Location>:

<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
# como autenticar um usuario
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/svn-auth-file
# para quaisquer operacoes alem dessas, exigir um usuario autenticado
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
Estes so apenas alguns exemplos simples. Para mais detalhes sobre o controle de acesso
do Apache e a diretiva Require, consulte a seo de segurana dos tutoriais do Apache em
43

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

http://httpd.apache.org/docs-2.0/misc/tutorials.html.
Para mais informaes sobre configuraes com encriptao SSL e controle de acesso por
diretrio, consulte o SVN Book, seo 6 "Server Configuration", que contm exemplos sobre
esses tipos de configurao, mais especficas, e que no so abordadas por este texto.

6.3.6 Mltiplos meios de acesso ao repositrio


J vimos que um repositrio pode ser acessado de diversas formas diferentes. Mas seria possvel - ou seguro - que seu repositrio seja acessado por mltiplos mtodos simultaneamente?
Em um dado momento, qualquer desses processos pode requerer acesso de leitura e/ou
escrita ao repositrio:
usurios regulares do sistema usando um cliente Subversion para acessar o repositrio
atravs mtodo file:///, diretamente;
usurios regulares do sistema conectando-se por processos svnserve privados iniciados
por SSH, que acessam o repositrio;
um processo svnserve - tanto um daemon ou iniciado por inetd - rodando como um usurio
particular;
um processo Apache httpd, rodando como um usurio particular.
H alguns ajustes mnimos necessrios para que no ocorra conflito entre esses vrios usurios acessando o repositrio, no que tange s permisses de arquivos do repositrio. No iremos
cobrir este tema neste texto, por ser tambm bastante especfico a instalaes em particular. Por
isso, recomendamos a leitura da seo "Supporting Multiple Repository Access Methods"do SVN
Book, na URL http://svnbook.red-bean.com/nightly/en/svn.serverconfig.multimethod.html

44

Captulo 7

Utilizao do cliente em linha de


comando
7.1 Comandos de obteno e ajuda
Vamos ver agora o Subversion em ao, utilizando para isso o cliente de linha de comando do
Subversion, "svn". Na ltima lio veremos alguns front-ends grficos do Subversion, que podem
eventualmente facilitar o trabalho dos usurios.
Primeiramente, suponhamos que iremos acessar um repositrio "teste"no servidor hipottico
http://meu.servidor.com/. Vamos cuidar ento da primeira parte, que ser obter nossa cpia local,
tambm chamada de "working copy". Digamos que a estrutura dos diretrios no servidor fosse a
seguinte:

svn/
exemplo/
tags/
branches/
trunk/
README
outros/
x/
y/
z/
Vamos comear ento com o comando mais importante de todos - como obter ajuda:

$ svn help
O comando acima mostraria todos os complementos possveis ao "svn", e poderamos ento
descobrir qual comando o mais apropriado para o nosso problema. Supondo agora que gostaramos de obter uma working copy da pasta "exemplo"do repositrio "teste", digitaramos ento o
seguinte comando:

$ svn checkout http://meu.servidor.com/svn/exemplo


A exemplo
45

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

A exemplo/tags
A exemplo/branches
A exemplo/trunk
A exemplo/trunk/README
Checked out revision 1.
Este comando faria o checkout, ou cpia, da pasta "exemplo", com todo o seu contedo, para
o diretrio atual. Isto quer dizer que, com este comando, obteramos uma working copy para
edio local, possibilitando-nos que trabalhssemos nela de pronto.
Podemos observar naquela ltima linha "Checked out revision 1". Vejamos o que exatamente
isso quer nos dizer: ela nos informa que acabamos de fazer o checkout (ou cpia) dos arquivos
do servidor pertencentes reviso 1. Quando dizemos "reviso 1", estamos nos referindo ao estado exato do repositrio quando este se encontrava na referida reviso 1. Aps algum mandar
alteraes ao repositrio, este passar reviso 2, que ser a mais recente (tambm conhecida
como HEAD). Mas a reviso 1 ainda estar l, e podemos v-la ou recuper-la com os comandos
nativos do Subversion, normalmente adicionando o switch -r"ou --revision".
Podemos nos referir s revises de vrias formas: a mais comum atravs do nmero, que
nico e crescente (como em "revision 1"); outra forma atravs de palavras chaves que o Subversion nos fornece, como por exemplo HEAD (que se refere reviso mais recente no repositrio);
finalmente, podemos nos utilizar ainda de datas em formatos predefinidos.
Expliquemos ainda a estrutura de diretrios dividida em trunk/, branches/ e tags/, largamente
utilizada em muitos repositrio Subversion. O diretrio trunk/ contm a linha principal de desenvolvimento do projeto, e nela que boa parte do cdigo desenvolvido. Pode ser necessrio, no
entanto, que se desenvolva uma nova capacidade ou caracterstica de um programa, por exemplo. Tal desenvolvimento potencialmente tornaria o cdigo da linha trunk/ instvel, e, para evitar
esse fato criaramos um branch do projeto, focado unicamente em desenvolver essa caracterstica
especfica que seria posteriormente portada de volta rvore trunk/. Esta , superficialmente, a
funo do diretrio branches/.
tambm perfeitamente possvel que um programa, documento, etc, chegue em um nvel de
estabilidade tal que poderia ser liberado ao pblico e no qual no seria desejvel nenhuma alterao. Essa a funo do diretrio tags/, no qual residem as denominadas verses "estveis"do
projeto em questo.
Voltando aos comandos do Subversion, suponhamos agora que voc deixou sua working copy
parada por uns tempos e agora resolveu voltar a trabalhar nela. possvel, na verdade provvel,
que o estado do repositrio tenha sido alterado desde sua ltima conexo. Para trabalhar em cima
das verses mais recentes, necessrio que baixemos as modificaes, e o faremos atravs do
svn update:

$ svn update
U exemplo/trunk/README
U exemplo/trunk/novo.txt
Updated to revision 2.

46

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Este comando dever ser executado sob o diretrio em que se encontra a working copy, obviamente. Ele ir buscar no servidor as modificaes ocorridas em relao verso local e aplic-las
de imediato.
A esta altura voc deve ter notado as letras que apareceram nos ltimos comando, A e U. Mas
o que elas querem dizer? Vamos ver a seguir:

U - o arquivo foi "Updated" (atualizado) a partir do servidor;


A - o arquivo ou diretrio foi "Added" (adicionado) sua working copy;
D - o arquivo ou diretrio foi "Deleted" (deletado) da sua working copy;
R - o arquivo ou diretrio foi "Replaced" (substitudo) em sua working copy, ou
seja, um elemento foi deletado e posteriormente outro com o mesmo nome foi
adicionado; embora tenham o mesmo nome o repositrio consegue perceb-los como
arquivos diferentes;
G - o arquivo no servidor recebeu alteraes, mas sua cpia local tinha as suas
modificaes; ou as alteraes no interceptavam ou eram idnticas s suas, ento
o Subversion conseguiu coloc-las em estado de "merGed" (unio) sem problemas;
C - o arquivo recebeu alteraes "Conflicting" (conflitantes) com as suas, ou seja,
na mesma seo do arquivo; trataremos deste caso mais adiante.

7.2 Manipulao da cpia local


Agora que j temos nossa working copy, podemos comear a trabalhar nela. Temos a possibilidade de fazer dois tipos de mudana: em arquivos especficos ou em diretrios (adicionando
e removendo arquivos, por exemplo). No primeiro caso, no necessrio informar o Subversion
com algum comando especfico, pois ele ser capaz de perceber quais arquivos foram mudados
e submeter essas alteraes ao servidor. J no segundo caso, poderemos usar um dos quatro
comandos bsicos para manipulao de arquivos; vamos a eles.

7.2.1 svn add


$ svn add novo.txt
A novo.txt
Este comando ir adicionar o arquivo "novo.txt"ao sistema de controle de verses, e ele tambm passar a ser versionado pelo repositrio Subversion. Isto quer dizer que o arquivo existia
para o seu computador mas era ignorado pelo Subversion, e, ao usar o "svn add", voc informou
o Subversion que ele deve agora ser versionado. Se fosse um diretrio, ele e todos os seus arquivos subjacentes seriam tambm adicionados. Vale lembrar que este passo no opcional: no
basta criar o arquivo, o "svn add" fundamental.

47

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

7.2.2 svn delete


$ svn delete novo.txt
D novo.txt
Este outro comando ir agendar "novo.txt"para deleo do repositrio. Se este fosse um
arquivo ou link simblico, ele seria imediatamente deletado da sua working copy; se fosse um
diretrio, seria deletado apenas aps mandarmos as alteraes ao servidor. importante frisar
que, aps mandarmos as mudanas de volta ao repositrio, o arquivo ser deletado apenas da
reviso mais recente, mas ainda estar presente nas revises anteriores.

7.2.3 svn copy


$ svn move novo.txt velho.txt
A velho.txt
D novo.txt
Como pode ser visto acima, o "svn move"ir apenas fazer o papel de "svn copy"e "svn delete"em um s comando; ele ir copiar o arquivo com um outro nome e depois ir deletar o
original, o que seria basicamente o equivalente a renomear um arquivo qualquer.

7.2.4 svn status


Agora que j editamos o que fosse necessrio ou desejvel, seria interessante verificar o
que foi modificado antes de mandar nossas alteraes ao repositrio, criando uma nova reviso.
Podemos faz-lo atravs do svn status (certamente o comando que voc deve, espera-se, mais
utilizar no Subversion):

$ svn status
M
bar.c
?
foo.o
!
qq_dir
I
.screenrc
A
+
moved_dir
M
+
moved_dir/README
D
outros/teste.c
A
outros/calc/soma.h
C
outros/calc/divide.c
R
xyz.c
S outros/game
Temos acima um possvel exemplo de sada do comando "svn status", que nos ajudar a
explicar os status mais importantes a serem compreendidos. Na primeira coluna, temos:

A - o arquivo/diretrio foi agendado para adio no repositrio;


C - o arquivo est em estado de conflito e ser necessrio resolv-lo antes de mandar
as alteraes ao servidor;

48

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

D - o arquivo/diretrio foi agendado para deleo no repositrio;


M - o contedo do arquivo foi modificado;
R - o arquivo foi agendado para substituio no repositrio, com o mesmo nome de um
que foi deletado;
? - o arquivo em questo no est sob controle de verso (possivelmente foi criado
e no foi utilizado o "svn add");
! - o arquivo no est presente por algum motivo, possivelmente tendo sido deletado
sem o uso de um comando Subversion;
I - o arquivo foi configurado para ser ignorado pelo sistema de controle de verses;
Na coluna seguinte poderemos ver um "+"ou no, indicando que um arquivo foi agendado
para adio no repositrio com a preservao de seu histrico. Isso provavelmente nos dir que
ele proveniente de uma cpia com o "svn copy"(A+), ou, alm de ter sido copiado tambm foi
modificado localmente (M+). A ltima coluna nos dir se um arquivo ou diretrio foi deslocado
do caminho do restante de sua working copy, com o comando "svn switch", para um branch ou
tag. Para a referncia completa dos possveis outputs do "svn status"consulte o manual oficial do
Subversion.
Adicionando o switch -u"ou --show-updates"ao "svn status", juntamente com a opo -v"ou
--verbose"(para maior detalhamento), ele ir contatar o servidor e comparar suas modificaes
com as revises que l se encontram, e ir informar sobre arquivos antigos (out-of-date):

$ svn status --show-updates --verbose


M * 44 23 fbscarel README
M 44 20 sidney bar.c
* 44 35 capim
outros/teste.c
Status against revision: 46
Os asteriscos acima nos indicam que caso fosse utilizado o "svn update"neste ponto os arquivos "README"e "teste.c"receberiam modificaes. Isto quer dizer que nossa reviso local
est desatualizada e devemos fazer um update para receber as modificaes nestes arquivos e
conferir se estas conflitam com a verso local.

7.2.5 svn diff


Digamos agora que queremos saber exatamente quais modificaes fizemos aos arquivos
antes de mand-las ao servidor; esta seria uma boa hora para usar o svn diff, que mostrar as
diferenas entre a nossa verso modificada e a verso obtida inicialmente (que fica no diretrio
oculto .svn):

$ svn diff
Index: teste.c
===================================================================
--- teste.c (revision 3)
49

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

+++ teste.c (working copy)


@@ -1,7 +1,12 @@
+#include
+#include
+#include
+
+#include
int main(void) {
- printf("Oi galera\n");
+ printf("Oi de novo galera\n");
return 0;
}
As modificaes so mostradas em formato diff unificado, sendo as linhas adicionadas mostradas com um "+"antes e as deletadas mostradas com um -". interessante notar que podemos
facilmente produzir um patch (arquivo incluido apenas as modificaes em um arquivo) com o
auxlio do svn diff, como no exemplo abaixo:

$ svn diff > patchfile

7.2.6 svn revert


Suponhamos ento que voc descobrisse que as suas alteraes ao "teste.c"acima foram
feitas por engano, e que portanto voc gostaria de retornar este arquivo ao seu estado original;
um bom momento para utilizar o svn revert:

$ svn revert teste.c


Reverted 'teste.c'
Isto retornar nosso arquivo "teste.c"ao seu estado original, quando fizemos nosso ltimo
checkout a partir do repositrio. um processo semelhante ao utilizado para recuperar eventuais
modificaes mandadas ao servidor mas que foram desastrosas.
Neste ltimo caso, bastaria dar um checkout em uma reviso anterior e funcional (usando o
switch --revision"), e posteriormente mandar esta reviso correta ao servidor novamente, se tornando HEAD.
Vale lembrar ainda que estes ltimos comandos (diff e revert), muito embora lidem diretamente
com os arquivos antigos, dispensam uma conexo com a rede, pois o Subversion inteligentemente mantm uma cpia inalterada dos arquivo em uma pasta oculta ".svn", e depois apenas
compara o contedo desta pasta com as modificaes feitas pelo usurio.

7.3 Interao com o repositrio


J estamos praticamente finalizados com nossa tarefa diria: sabemos adicionar e deletar arquivos, verificar as modificaes feitas, conferir se estas esto desatualizadas e resolver conflitos

50

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

simples, processo automatizado pelo Subversion. Mas ainda resta uma dvida: e se nossas modificaes no resultarem em um conflito simples, no qual nossa alterao intercepta diretamente
a de um colaborador? Vejamos a sada de um svn update que causar esse problema:

$ svn update
U INSTALL
G README
C teste.c
Updated to revision 46.
As letras U e G caem naqueles casos estudados anteriormente: no primeiro foi feito um update
simples e no segundo o Subversion conseguiu unir as modificaes locais e remotas sem maiores
problemas. J a terceira ocorrncia poder nos causar um problema, pois indica um conflito (C).
Neste caso surgiro trs arquivos no diretrio de trabalho: [ARQUIVO].mine (com as alteraes
locais), [ARQUIVO].r[OLD] (arquivo inalterado desde o ltimo update) e [ARQUIVO].r[NEW] (o
arquivo proveniente do update, diretamente do repositrio). Sero ainda colocados marcadores
de conflito no arquivo original, a fim de auxiliar o processo de anlise. Poderemos resolver o
conflito de trs formas:
Unir os arquivos manualmente: Pode parecer ameaador, mas fazer a unio dos arquivos
na verdade realmente simples: analisar-se- as alteraes feitas remotamente e estas
sero comparadas s locais. O usurio dever decidir qual delas a melhor, ou ento
poder juntar ambas as solues. De qualquer maneira, imprescindvel que haja uma boa
comunicao entre os colaboradores, pois seria conveniente que houvesse uma discusso
entre eles para decidir o melhor caminho.
Escolher uma das opes: Pode-se ainda optar por simplesmente copiar uma das solues inteiramente, ou a local ou a remota. Nesse caso, bastaria um "cp"simples dos
sistemas UNIX-like para resolver o conflito.
Descartar as edies locais: Finalmente, tambm possvel perceber que as alteraes
feitas localmente no deveriam ser mandadas ao repositrio. Neste ltimo caso, bastaria
um "svn revert"para encerrar o conflito e retornar os arquivos aos seus estados originais.
Uma vez resolvidos todos os conflitos, devemos informar o Subversion, e o faremos com o
comando svn resolved:

$ svn resolved teste.c


Com este comando os arquivos extras que haviam sido criados sero excludos e a condio
de conflito desaparecer. Agora sim poderemos mandar nossas modificaes ao repositrio
(finalmente!), e o faremos com o comando svn commit:

$ svn commit -m "Algumas modificacoes simples no arquivo teste.c"


Sending
teste.c
Transmitting file data .
Committed revision 47.
O comando acima submeter nossas modificaes locais ao repositrio, e a mensagem passada atravs do switch --message"ou -m"ser a mensagem de log do commit. importantssimo
que essa mensagem descreva precisamente o que foi modificado, assim ficar muito mais fcil
recuperar o repositrio aps um engano, alm de ajudar os usurio a utilizar o sistema com mais
eficincia. Essa mensagem pode ser ainda passada atravs de um arquivo, com o switch --file".
51

Captulo 8

Front-ends para o Subversion


8.1 RapidSVN
Plataformas: Multiplataforma;
URL: http://rapidsvn.tigris.org;
O RapidSVN um front-end multiplataforma para o Subversion. um cliente stand-alone que
busca ser poderoso ao dar controle suficiente aos usurios mais avanados, possuindo uma interface simples e intuitiva, sendo apropriado tambm para iniciantes.
Seu ponto forte a portabilidade, rodando em qualquer sistema no qual funcione o framework
wxWidgets, dentre eles os diversos UNIXes, Windows, MacOS, etc. Outro fator a ser considerado
sua velocidade, favorecida pelo fato de ser escrito inteiramente em C++. licenciado sob
a GNU General Public License e hospedado na tigris.org, mesmo local onde desenvolvido o
prprio Subversion.

8.2 TortoiseSVN
Plataformas: Windows;
URL: http://tortoisesvn.tigris.org/;
O TortoiseSVN um cliente para o Subversion de faclima utilizao, implementado como uma
extenso do Windows Shell, o Windows Explorer. Assim sendo, no configura um programa em
separado assim como o RapidSVN.
Apresenta as facilidades de ser integrado diretamente no gerenciador de arquivos, bastando
alguns cliques para acessar menus altamente intuitivos, tornando a experincia bastante acessvel a usurio menos experientes. Tambm licenciado sob a GPL e hospedado na tigris.org.
Uma excelente alternativa para os usurios Windows.

8.3 WebSVN
Plataformas: Multiplataforma;
52

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

URL: http://websvn.tigris.org/;
O WebSVN no propriamente um cliente para o Subversion, mas um visualizador web.
utilizado em muitos sites e portais para disponibilizar um acesso rpido aos repositrios. Tem a
capacidade de mostrar os arquivos, diferenas entre arquivos diferentes, dentre algumas outras
caractersticas. A interface amigvel e altamente customizvel, porm limitada em relao aos
demais clientes.
Roda sobre o Apache, sendo escrito em PHP e apresentando, portanto, grande portabilidade.
, tambm, licenciado sob a GPL e hospedado na tigris.org. No propriamente uma escolha
para o usurio, mas uma boa ferramenta de visualizao. No substitui um cliente grfico ou a
linha de comando.

8.4 Trac
Plataformas: Multiplataforma;
URL: http://trac.edgewall.org/;
O Trac um sistema de gerenciamente de defeitos e wiki integrado para projetos de desenvolvimento de software. Ele utiliza uma aproximao minimalista em relao a seu objetivo, ajudando
desenvolvedores a produzir software, e, ao mesmo tempo, no colocar-se como um empecilho
ao fluxo do trabalho, sem interferir nos processos e polticas estabelecidos de uma equipe de
desenvolvimento.
O Trac prov uma interface para o Subversion (visualizao de cdigo fonte, revises, etc.), um
wiki integrado e ainda facilidades de report de bugs e defeitos em software. escrito em Python,
e por esse motivo bastante portvel, podendo ser executado em conjunto com o Apache ou em
um servidor independente. Licenciado sob a licena BSD modificada, sendo assim totalmente
livre.

53

Você também pode gostar