You are on page 1of 63

Subversion

Verso 1.0.0

Sumrio
I Sobre essa Apostila 2 4 9 18
19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 20 20 20 20 21 22 22 23 23 23 24 27 27 27 28 28 29 30 31

II Informaes Bsicas III GNU Free Documentation License IV 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 Bibliograa . . . . . . . . . . . . . . . . .

3 Conceitos bsicos de versionamento 3.1 O que o Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Histria do Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Conceitos bsicos de versionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 congure 4.2.4 Compilao e Instalao . . . 4.3 Distribuies derivadas do Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF 34 34 35 36 37 37 37 38 38 38 40 42 42 43 43 44 45 45 46 47 47 49 49 50 52 53 53 55 55 56 56 56 57 58 58 60 60 60 60 61

5 Administrao do repositrio 5.1 O repositrio Subversion . . . . . . . . . . . . . . . . . . 5.2 Criao e congurao do repositrio . . . . . . . . . . 5.3 Manuteno do repositrio . . . . . . . . . . . . . . . . 5.3.1 svnlook . . . . . . . . . . . . . . . . . . . . . . . 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 6 Congurao 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 Congurao 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 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 . . . . . . . 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 (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 ocial). A reviso e alterao vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Crticas e sugestes construtivas sero bem-vindas a qualquer hora.

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 vm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informao) em conjunto com outros parceiros institucionais, e 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 Especco Auxiliar o Governo Federal na implantao do plano nacional de software no-proprietrio e de cdigo fonte aberto, identicando 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 especco para tcnicos, prossionais de suporte e funcionrios pblicos usurios, criando grupos de funcionrios pblicos que iro treinar outros funcionrios pblicos e atuar como incentivadores e defensores dos 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 do 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 modicar 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 se fazendo ser respeitado pelos mesmos; 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 reete 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 especco do curso. recomendado que voc faa uso do Frum 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, ca 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.

Perl 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 prossional 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 classicao 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 classicao que ir utilizar; gosta que lhe faam perguntas adicionais; identica as nossas falhas, mas corrige-as amavelmente, diz um estudante, e explica porque motivo a classicao 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 diculdade; esclarece pontos que no foram entendidos, ou corretamente aprendidos anteriormente; ajuda o estudante a alcanar os seus objetivos; exvel 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

GNU Free Documentation License

10

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

(Traduzido pelo Joo S. O. Bueno atravs do CIPSGA em 2001) Esta uma traduo no ocial da Licena de Documentao Livre GNU em Portugus Brasileiro. Ela no publicada pela Free Software Foundation, e no se aplica legalmente a distribuio de textos que usem a GFDL - apenas o texto original em Ingls da GNU FDL faz isso. Entretanto, ns esperamos que esta traduo ajude falantes de portugus a entenderem melhor a GFDL. This is an unofcial translation of the GNU General Documentation License into Brazilian Portuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDLonly the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. Licena de Documentao Livre GNU Verso 1.1, Maro de 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA permitido a qualquer um copiar e distribuir cpias exatas deste documento de licena, mas no permitido alter-lo.

INTRODUO
O propsito desta Licena deixar um manual, livro-texto ou outro documento escrito "livre"no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copi-lo ou redistribui-lo, com ou sem modicaes, comercialmente ou no. Secundariamente, esta Licena mantm para o autor e editor uma forma de ter crdito por seu trabalho, sem ser considerado responsvel pelas modicaes feitas por terceiros. Esta Licena um tipo de "copyleft"("direitos revertidos"), o que signica que derivaes do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licena Pblica Geral (GNU GPL), que um copyleft para software livre. Ns zemos esta Licena para que seja usada em manuais de software livre, por que software livre precisa de documentao livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licena no est restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele publicado como um livro impresso. Ns recomendamos esta Licena principalmente para trabalhos cujo propsito seja de introduo ou referncia.

APLICABILIDADE E DEFINIES
Esta Licena se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribudo sob os termos desta Licena. O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do pblico um

11

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

licenciado e referida como "voc". Uma "Verso Modicada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modicaes e/ou traduzida em outra lngua. Uma "Seo Secundria" um apndice ou uma seo inicial do Documento que trata exclusivamente da relao dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e no contm nada que poderia ser includo diretamente nesse assunto geral (Por exemplo, se o Documento em parte um livro texto de matemtica, a Seo Secundria pode no explicar nada de matemtica). Essa relao poderia ser uma questo de ligao histrica com o assunto, ou matrias relacionadas, ou de posies legais, comerciais, loscas, ticas ou polticas relacionadas ao mesmo. As "Sees Invariantes"so certas Sees Secundrias cujos ttulos so designados, como sendo de Sees Invariantes, na nota que diz que o Documento publicado sob esta Licena. Os "Textos de Capa"so certos trechos curtos de texto que so listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto publicado sob esta Licena. Uma cpia "Transparente"do Documento signica uma cpia que pode ser lida automaticamente, representada num formato cuja especicao esteja disponvel ao pblico geral, cujos contedos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genricos ou (para imagens compostas de pixels) programas de pintura genricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passvel de servir como entrada a formatadores de texto ou para traduo automtica para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cpia feita em um formato de arquivo outrossim Transparente cuja constituio tenha sido projetada para atrapalhar ou desencorajar modicaes subsequentes pelos leitores no Transparente. Uma cpia que no "Transparente" chamada de "Opaca". Exemplos de formatos que podem ser usados para cpias Transparentes incluem ASCII simples sem marcaes, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatvel com os padres, e projetado para ser modicado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietrios que podem ser lidos e editados apenas com processadores de texto proprietrios, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edio no estejam disponveis para o pblico, e HTML gerado automaticamente por alguns editores de texto com nalidade apenas de sada. A "Pgina do Ttulo"signica, para um livro impresso, a pgina do ttulo propriamente dita, mais quaisquer pginas subsequentes quantas forem necessrias para conter, de forma legvel, o material que esta Licena requer que aparea na pgina do ttulo. Para trabalhos que no tenham uma pgina do ttulo, "Pgina do Ttulo"signica o texto prximo da apario mais proeminente do ttulo do trabalho, precedendo o incio do corpo do texto.

12

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

FAZENDO CPIAS EXATAS


Voc pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou no comercial, desde que esta Licena, as notas de copyright, e a nota de licena dizendo que esta Licena se aplica ao documento estejam reproduzidas em todas as cpias, e que voc no acrescente nenhuma outra condio, quaisquer que sejam, s desta Licena. Voc no pode usar medidas tcnicas para obstruir ou controlar a leitura ou confeco de cpias subsequentes das cpias que voc zer ou distribuir. Entretanto, voc pode aceitar compensao em troca de cpias. Se voc distribuir uma quantidade grande o suciente de cpias, voc tambm precisa respeitar as condies da seo 3. Voc tambm pode emprestar cpias, sob as mesmas condies colocadas acima, e tambm pode exibir cpias publicamente.

FAZENDO CPIAS EM QUANTIDADE


Se voc publicar cpias do Documento em nmero maior que 100, e a nota de licena do Documento obrigar Textos de Capa, voc precisar incluir as cpias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capa na capa de trs. Ambas as capas tambm precisam identicar clara e legivelmente voc como o editor dessas cpias. A capa da frente precisa apresentar o ttulo completo com todas as palavras do ttulo igualmente proeminentes e visveis. Voc pode adicionar outros materiais s capas. Fazer cpias com modicaes limitadas s capas, tanto quanto estas preservem o ttulo do documento e satisfaam a essas condies, pode ser tratado como cpia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legvel, voc deve colocar os primeiros (tantos quantos couberem de forma razovel) na capa verdadeira, e continuar os outros nas pginas adjacentes. Se voc publicar ou distribuir cpias Opacas do Documento em nmero maior que 100, voc precisa ou incluir uma cpia Transparente que possa ser lida automaticamente com cada cpia Opaca, ou informar, em ou com, cada cpia Opaca a localizao de uma cpia Transparente completa do Documento acessvel publicamente em uma rede de computadores, qual o pblico usurio de redes tenha acesso a download gratuito e annimo utilizando padres pblicos de protocolos de rede. Se voc utilizar o segundo mtodo, voc precisar tomar cuidados razoavelmente prudentes, quando iniciar a distribuio de cpias Opacas em quantidade, para assegurar que esta cpia Transparente vai permanecer acessvel desta forma na localizao especicada por pelo menos um ano depois da ltima vez em que voc distribuir uma cpia Opaca (diretamente ou atravs de seus agentes ou distribuidores) daquela edio para o pblico. pedido, mas no obrigatrio, que voc contate os autores do Documento bem antes de redistribuir qualquer grande nmero de cpias, para lhes dar uma oportunidade de prover voc com uma verso atualizada do Documento.

13

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

MODIFICAES
Voc pode copiar e distribuir uma Verso Modicada do Documento sob as condies das sees 2 e 3 acima, desde que voc publique a Verso Modicada estritamente sob esta Licena, com a Verso Modicada tomando o papel do Documento, de forma a licenciar a distribuio e modicao da Verso Modicada para quem quer que possua uma cpia da mesma. Alm disso, voc precisa fazer o seguinte na verso modicada: A. Usar na Pgina de Ttulo (e nas capas, se houver alguma) um ttulo distinto daquele do Documento, e daqueles de verses anteriores (que deveriam, se houvesse algum, estarem listados na seo "Histrico do Documento"). Voc pode usar o mesmo ttulo de uma verso anterior se o editor original daquela verso lhe der permisso; B. Listar na Pgina de Ttulo, como autores, uma ou mais das pessoas ou entidades responsveis pela autoria das modicaes na Verso Modicada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); C. Colocar na Pgina de Ttulo o nome do editor da Verso Modicada, como o editor; D. Preservar todas as notas de copyright do Documento; E. Adicionar uma nota de copyright apropriada para suas prprias modicaes adjacente s outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licena dando ao pblico o direito de usar a Verso Modicada sob os termos desta Licena, na forma mostrada no tpico abaixo; G. Preservar nessa nota de licena as listas completas das Sees Invariantes e os Textos de Capa requeridos dados na nota de licena do Documento; H. Incluir uma cpia inalterada desta Licena; I. Preservar a seo entitulada "Histrico", e seu ttulo, e adicionar mesma um item dizendo pelo menos o ttulo, ano, novos autores e editor da Verso Modicada como dados na Pgina de Ttulo. Se no houver uma sesso denominada "Histrico"no Documento, criar uma dizendo o ttulo, ano, autores, e editor do Documento como dados em sua Pgina de Ttulo, ento adicionar um item descrevendo a Verso Modicada, tal como descrito na sentena anterior; J. Preservar o endereo de rede, se algum, dado no Documento para acesso pblico a uma cpia Transparente do Documento, e da mesma forma, as localizaes de rede dadas no Documento para as verses anteriores em que ele foi baseado. Elas podem ser colocadas na seo "Histrico". Voc pode omitir uma localizao na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da verso a que ela se rera der sua permisso; K. Em qualquer seo entitulada "Agradecimentos"ou "Dedicatrias", preservar o ttulo da 14

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

seo e preservar a seo em toda substncia e m de cada um dos agradecimentos de contribuidores e/ou dedicatrias dados; L. Preservar todas as Sees Invariantes do Documento, inalteradas em seus textos ou em seus ttulos. Nmeros de seo ou equivalentes no so considerados parte dos ttulos da seo; M. Apagar qualquer seo entitulada "Endossos". Tal sesso no pode ser includa na Verso Modicada; N. No reentitular qualquer seo existente com o ttulo "Endossos"ou com qualquer outro ttulo dado a uma Seo Invariante. Se a Verso Modicada incluir novas sees iniciais ou apndices que se qualiquem como Sees Secundrias e no contenham nenhum material copiado do Documento, voc pode optar por designar alguma ou todas aquelas sees como invariantes. Para fazer isso, adicione seus ttulos lista de Sees Invariantes na nota de licena da Verso Modicada. Esses ttulos precisam ser diferentes de qualquer outro ttulo de seo. Voc pode adicionar uma seo entitulada "Endossos", desde que ela no contenha qualquer coisa alm de endossos da sua Verso Modicada por vrias pessoas ou entidades - por exemplo, declaraes de revisores ou de que o texto foi aprovado por uma organizao como a denio ocial de um padro. Voc pode adicionar uma passagem de at cinco palavras como um Texto de Capa da Frente , e uma passagem de at 25 palavras como um Texto de Quarta Capa, ao nal da lista de Textos de Capa na Verso Modicada. Somente uma passagem de Texto da Capa da Frente e uma de Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento j incluir um texto de capa para a mesma capa, adicionado previamente por voc ou por acordo feito com alguma entidade para a qual voc esteja agindo, voc no pode adicionar um outro; mas voc pode trocar o antigo, com permisso explcita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento no do permisso por esta Licena para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Verso Modicada.

COMBINANDO DOCUMENTOS
Voc pode combinar o Documento com outros documentos publicados sob esta Licena, sob os termos denidos na seo 4 acima para verses modicadas, desde que voc inclua na combinao todas as Sees Invariantes de todos os documentos originais, sem modicaes, e liste todas elas como Sees Invariantes de seu trabalho combinado em sua nota de licena. O trabalho combinado precisa conter apenas uma cpia desta Licena, e Sees Invariantes Idnticas com multiplas ocorrncias podem ser substitudas por apenas uma cpia. Se houver mltiplas Sees Invariantes com o mesmo nome mas com contedos distintos, faa o ttulo de 15

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

cada seo nico adicionando ao nal do mesmo, em parnteses, o nome do autor ou editor origianl daquela seo, se for conhecido, ou um nmero que seja nico. Faa o mesmo ajuste nos ttulos de seo na lista de Sees Invariantes nota de licena do trabalho combinado. Na combinao, voc precisa combinar quaisquer sees entituladas "Histrico"dos diversos documentos originais, formando uma seo entitulada "Histrico"; da mesma forma combine quaisquer sees entituladas "Agradecimentos", ou "Dedicatrias". Voc precisa apagar todas as sees entituladas como "Endosso".

COLETNEAS DE DOCUMENTOS
Voc pode fazer uma coletnea consitindo do Documento e outros documentos publicados sob esta Licena, e substituir as cpias individuais desta Licena nos vrios documentos com uma nica cpia incluida na coletnea, desde que voc siga as regras desta Licena para cpia exata de cada um dos Documentos em todos os outros aspectos. Voc pode extrair um nico documento de tal coletnea, e distribu-lo individualmente sob esta Licena, desde que voc insira uma cpia desta Licena no documento extrado, e siga esta Licena em todos os outros aspectos relacionados cpia exata daquele documento.

AGREGAO COM TRABALHOS INDEPENDENTES


Uma compilao do Documento ou derivados dele com outros trabalhos ou documentos separados e independentes, em um volume ou mdia de distribuio, no conta como uma Verso Modicada do Documento, desde que nenhum copyright de compilao seja reclamado pela compilao. Tal compilao chamada um "agregado", e esta Licena no se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, s por conta de terem sido assim compilados, e eles no so trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seo 3 for aplicvel a essas cpias do Documento, ento, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Seno eles precisaro aparecer nas capas de todo o agregado.

TRADUO
Traduo considerada como um tipo de modicao, ento voc pode distribuir tradues do Documento sob os termos da seo 4. A substituio de Sees Invariantes por tradues requer uma permisso especial dos detentores do copyright das mesmas, mas voc pode incluir tradues de algumas ou de todas as Sees Invariantes em adio s verses orignais dessas Sees Invariantes. Voc pode incluir uma traduo desta Licena desde que voc tambm inclua a verso original em Ingls desta Licena. No caso de discordncia entre a traduo e a

16

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

verso original em Ingls desta Licena, a verso original em Ingls prevalecer.

TRMINO
Voc no pode copiar, modicar, sublicenciar, ou distribuir o Documento exceto como expressamente especicado sob esta Licena. Qualquer outra tentativa de copiar, modicar, sublicenciar, ou distribuir o Documento nula, e resultar automaticamente no trmino de seus direitos sob esta Licena. Entretanto, terceiros que tenham recebido cpias, ou direitos de voc sob esta Licena no tero suas licenas terminadas, tanto quanto esses terceiros permaneam em total acordo com esta Licena.

REVISES FUTURAS DESTA LICENA


A Free Software Foundation pode publicar novas verses revisadas da Licena de Documentao Livre GNU de tempos em tempos. Tais novas verses sero similares em espirito verso presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupaes. Veja http://www.gnu.org/copyleft/. A cada verso da Licena dado um nmero de verso distinto. Se o Documento especicar que uma verso particular desta Licena "ou qualquer verso posterior"se aplica ao mesmo, voc tem a opo de seguir os termos e condies daquela verso especca, ou de qualquer verso posterior que tenha sido publicada (no como rascunho) pela Free Software Foundation. Se o Documento no especicar um nmero de Verso desta Licena, voc pode escolher qualquer verso j publicada (no como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licena para seus documentos Para usar esta Licena num documento que voc escreveu, inclua uma cpia desta Licena no documento e ponha as seguintes notas de copyright e licenas logo aps a pgina de ttulo: Copyright (c) ANO SEU NOME. dada permisso para copiar, distribuir e/ou modicar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior publicada pela Free Software Foundation; com as Sees Invariantes sendo LISTE SEUS TTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cpia da licena est inclusa na seo entitulada "Licena de Documentao Livre GNU". Se voc no tiver nenhuma Seo Invariante, escreva "sem Sees Invariantes"ao invs de dizer quais so invariantes. Se voc no tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invs de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos no triviais de cdigo de programas, ns recomendamos a publicao desses exemplos em paralelo sob a sua escolha de licena de software livre,

17

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

tal como a GNU General Public License, para permitir o seu uso em software livre.

18

Parte IV

Subversion

19

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 servidos aos clientes, mesmo que isto se assemelhe a um servidor de arquivos a diferena fundamental do Subversion que ele guarda todas as modicaes feitas nos arquivos e diretrios ao longo do tempo, permitindo-nos recuperar verses antigas dos dados ou simplesmente vericar 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 congurao 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.

20

Captulo 2

Plano de ensino
2.1 Objetivo
Qualicar tcnicos, administradores de sistemas e interessados em geral na instalao, congurao 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:

21

CDTC

Centro de Difuso de Tecnologia e Conhecimento Atividade Lio 1 Lio 2 Lio 3 Lio 4 Lio 5 Lio 6 Avaliao Descrio Conceitos bsicos de versionamento; Instalao do Subversion; Administrao do repositrio; Congurao do servidor; Utilizao do cliente em linha de comando; Front-ends para o Subversion; Avaliao nal.

Brasil/DF

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 da "Ambientao do Moodle", para que voc conhea o produto de Ensino a Distncia, evitando diculdades advindas do "desconhecimento"sobre o mesmo. Ao nal 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 congurao do repositrio; Manuteno do repositrio. Adio de projetos Lio 4: Viso geral; svnserve, um servidor customizado; httpd, o servidor web Apache; 22

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 nal. Para isso, sua participao ser importante em todas as atividades propostas.

2.8 Bibliograa
Site ocial: 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 ter uma ferramenta de versionamento to verstil como o Subversion.

23

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, mesmo que isto se assemelhe a um servidor de arquivos comum (como FTP ou NFS), a diferena fundamental do Subversion que ele guarda todas as modicaes feitas nos arquivos e diretrios ao longo do tempo, permitindo-nos recuperar verses antigas dos dados ou simplesmente vericar o histrico destes. Por este motivo, comum pensar nos sistemas de versionamento como "mquinas do tempo". 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


Desde o incio do mundo do software livre existia a necessidade de se criar uma ferramenta que pudesse controlar o aparente "caos"com que os programas so desenvolvidos: diversos programadores que muitas vezes nem se conhecem pessoalmente 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 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

24

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

compartilhem seu cdigo e construam softwares em conjunto. Porm, dada a sua idade 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) comeou 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 codicao, 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 cam 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 comecem a fazer modicaes em suas cpias locais para posteriormente submeter suas contribuies. Se um usurio mandar suas modicaes, e, logo depois, o outro tambm quiser enviar suas modicaes (provavelmente diferentes das do primeiro), o que ocorrer que as modicaes 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-Modicar-Destrancar) e a "Copy-Modify-Merge" (Copiar-Modicar-Unir). Vamos apresentar separadamente cada uma delas: 25

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

"Lock-Modify-Unlock": 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 modicaes 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 nal 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 modic-los de forma a torn-los incompatveis. Neste caso o sistema no pde 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 el 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 nal suas modicaes 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 comeassem a edit-las. Se um deles submeter suas modicaes 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 modicaes no sejam conitantes, e ele ento poder unir suas modicaes com as de seu colaborador, manualmente, e submeter uma nova verso, com ambas as contribuies. Mas e se as alteraes forem conitantes? Como o prprio nome indica, nesse caso temos um "conict"(conito), e este dever ser resolvido pelo usurio (uma vez que o programa no capaz de tomar as decises inteligentemente). Aps resolver o conito preexistente, possivelmente aps uma conversa com o outro usurio, ele poder ento mandar a verso nal 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: conitos so infreqentes, e, quando 26

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

ocorrem, so resolvidos rapidamente. Obviamente, esses fatores dependem de uma comunidade de colaboradores comunicativa e responsiva o que em geral a realidade de boa parte dos projetos de software livre.

27

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 que est 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 que 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 ocial 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 congure; Finalmente, compilar o software e instalar os binrios e documentao nos locais apropriados. 28

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 ocial, 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 ocial, 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 pers 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 29

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 congure, abaixo) e instale as dependncias correspondentes. Consulte o documento INSTALL para mais informaes acerca dessas dependncias opcionais.

4.2.3 Parmetros do script congure


Antes de tratarmos dos parmetros a serem passados para o script congure, 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 congure 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 congure, como se poderia imaginar, congura 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 especicados, 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 especicadas: 30

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 congure pertinentes sua instalao, habilitando as extenses desejadas e denindo os diretrios de instalao. Cuidado apenas com os comando e ags 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 congure: caso deseje operar um servidor Subversion atravs do Apache, utilizando WebDAV, voc dever especicar 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 congure basta-nos agora congurar, compilar e instalar o Subversion no computador. No exemplo, iremos congurar o Subversion para ser instalado nos diretrios padronizados do sistema (isto , no alteraremos seu prex), 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 prex padro):

31

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)
32

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:~#
33

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.

34

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. 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 seqncia de rvores de diretrios, sendo cada uma dessas rvores uma "fotograa"de como o repositrio era em algum ponto de seu histrico. Essas "fotograas"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 "ocial"em algum sentido. importante notar que independente 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

35

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.reposadmin.html#svn.reposadmin.basics que compara os repositrios BerkeleyDB e FSFS. Para maiores detalhes, leia a seo Repository Data Stores do SVN Book, com link disponvel na bibliograa do Plano de Ensino.

5.2 Criao e congurao do repositrio


Criar um repositrio Subversion uma tarefa bem 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
Aps o comando "svnadmin create", voc ter ento um novo repositrio Subversion no diretrio designado. Listemos o contedo desse diretrio: 36

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

$ 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 congurao 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 suciente para quaisquer mudanas necessrias ao repositrio, existindo ainda ferramentas externas (como a sute de ferramentas Berkeley DB) para gerenciar partes especcas 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 cobr-lo neste curso, convidando o leitor interessado a buscar informaes complementares na seo "Repository Creation and Conguration"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 desaadora, 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, modicar e reparar um repositrio. Iremos olhar brevemente as principais dentre essas ferramentas (as demais, claro, podero ser encontradas no SVN Book, seo "Repository Maintenance": http://svnbook.redbean.com/nightly/en/svn.reposadmin.maint.html).

37

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

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 ns 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. Certique-se de ter copiado quaisquer customizaes dos repositrios antigos para os novos, incluindo arquivos DB_CONFIG e scripts hook, atentando para a existncia de modicaes no Subversion que podem alterar a operao dessas customizaes; 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. 38

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

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 malQuedas 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 especcos 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 congurado, 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


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 acessam o repositrio freqentemente 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.

39

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

H alguns fatores a serem considerados em relao ao 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 modicaes 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), recomendado que se escolha uma localizao 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 modicados (verses estveis, por exemplo). Vejamos um exemplo prtico de como caria organizado um repositrio:

/ calculadora/ trunk/ tags/ branches/ calendario/ trunk/ tags/ branches/ planilha/ trunk/ tags/
40

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

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 convir. O Subversion no espera ou fora um layout especco e um diretrio _apenas_ um diretrio. No m 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 popularizar 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 inicialmente 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 mkdir planilha mkdir planilha/trunk mkdir planilha/branches mkdir planilha/tags svn import . file:///caminho/do/repositorio --message "Import inicial de Layout"
41

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

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 vericar 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.

42

Captulo 6

Congurao 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 le:///. A congurao 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 innito 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 "ocial"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:

43

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Caracterstica Opes de autenticao

Opes de contas de usurios Opes de autorizao

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

svnserve CRAM-MD5 ou SSH

controle por usurio ou por diretrio de leitura/escrita

Criptograa Interoperabilidade Visualizao web Velocidade Congurao inicial

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

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 congurar 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, somente ser mostrado uma mensagem de ajuda. No entanto, se pretendemos que o inetd inicie o processo poderemos 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: 44

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

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


Certique 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, certique-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 le:///.

6.2.2 Autenticao e autorizao integrada


Quando um cliente se conecta a um processo svnserve, as seguintes situaes acontecem: O cliente seleciona um repositrio especco; o servidor processa o arquivo conf/svnserve.conf e aplica quaisquer polticas de autenticao e autorizao l denidas; 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 vericar 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.

45

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Como voc j deve ter desconado, o arquivo svnserve.conf de um repositrio o mecanismo central de controle de autenticao e autorizao. O arquivo tem o seguinte formato: sees so identicadas 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. Dena inicialmente um arquivo contendo usurios e senhas, bem como um domnio de autenticao:

[general] password-db = userfile realm = dominio exemplo


O domnio um nome denido 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, casoem que o arquivo provavelmente deveria car em um local de acesso mais irrestrito. Os repositrios compartilhando o arquivo users poderiam ainda ser congurados para ter o mesmo domnio, j que uma lista de usurios dene essencialmente um domnio. Qualquer que seja o diretrio onde se encontra o arquivo, certique-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
46

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

# usuarios autenticados podem ler e escrever auth-access = write


Essas conguraes de exemplo so, de fato, os valores padronizados para as variveis, caso no sejam denidas. 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 no ter acesso universal de leitura e escrita, acesso universal de leitura ou nenhum acesso. No h controle detalhado sobre diretrios especcos do repositrio, o que, para muitos projetos, suciente 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 bem semelhante ao descrito anteriormente, mas, dada a especicidade do tema, deixamos aqui o link do SVN Book que explica esse tpico em maior detalhe aos alunos interessados nesse tipo de congurao: http://svnbook.red-bean.com/nightly/en/svn.servercong.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. Embora o servidor Apache-Subversion tenha mais funcionalidades que o svnserve, tambm um pouco mais difcil de congurar. Flexibilidade vem acompanhada de complexidade. Muito deste tpico inclui referncias a diretivas de congurao 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 congurao do Apache pode ser encontrada em: http://httpd.apache.org/docs-2.0/mod/directives.html.

47

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

Na medida em que voc for fazendo modicaes sua congurao 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 especicam 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 congurao 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; congurar o arquivo httpd.conf para exportar o repositrio. Voc pode cumprir os dois primeiros tens 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 Congurao bsica do Apache


Uma vez que voc tenha todos os componentes necessrios instalados em seu sistema, tudo o que resta a congurao 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 congurao relativa ao Subversion. Se o Apache foi instalado em seu prex 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. Certique-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

48

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 nalizando com uma tag de fechamento, com vrias outras diretivas de congurao entre as tags. O propsito da diretiva Location instruir o Apache a fazer algo especial quando est 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 especicado em SVNParentPath na verdade um repositrio Subversion. Esta uma sintaxe particularmente conveniente porque, ao contrrio da diretiva SVNPath, no necessrio reiniciar o Apache quando se cria novos repositrios. Tenha a certeza de que, quando denir um novo Location, ele no conita 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 ans. Esses tens j foram congurados 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 signicar 49

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 signicar utilizar as diretivas User e Group no httpd.conf para especicar 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 h congurao de um repositrio Subversion juntamente com o Apache.

6.3.3 Opes de autenticao


At o momento, se voc congurou 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 congure alguma poltica de autenticao e autorizao, os repositrios Subversion que voc disponibiliza 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 vericar se um usurio quem realmente arma 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 $
50

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 especica o tipo de sistema de autenticao a ser usado. Nesse caso, iremos especicar 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 especica 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 a 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 congurar o Apache para utilizar um certicado 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.

51

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 signicaria que apenas clientes que disseram ser "Joo"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 restrio seletiva, voc pode usar as diretivas de congurao 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 alm dessas, exigir um usurio 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 52

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

http://httpd.apache.org/docs-2.0/misc/tutorials.html. Para mais informaes sobre conguraes com encriptao SSL e controle de acesso por diretrio, consulte o SVN Book, seo 6 "Server Conguration", que contm exemplos sobre esses tipos de congurao mais especcas 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 um 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 do le:///, 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 conito 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 especco 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.servercong.multimethod.html

53

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 grcos 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


54

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); nalmente, podemos utilizar ainda de datas em formatos predenidos. 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 especca que seria posteriormente portada de volta rvore trunk/. Esta , supercialmente, 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 modicaes e o faremos atravs do svn update:

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

55

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 modicaes 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 especcos ou em diretrios (adicionando e removendo arquivos, por exemplo). No primeiro caso, no necessrio informar o Subversion com algum comando especco, 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 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.

56

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 vericar o que foi modicado 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;

57

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 modicado 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 ocial 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 modicaes 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 modicaes. Isto quer dizer que nossa reviso local est desatualizada e devemos fazer um update para receber as modicaes nestes arquivos e conferir se estas conitam com a verso local.

7.2.5 svn diff


Digamos agora que queremos saber exatamente quais modicaes zemos 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 modicada e a verso obtida inicialmente (que ca no diretrio oculto .svn):

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


58

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 modicaes so mostradas em formato diff unicado, sendo as linhas adicionadas mostradas com um "+"antes e as deletadas mostradas com um -". interessante notar que podemos facilmente produzir um patch (arquivo incluindo apenas as modicaes 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 zemos nosso ltimo checkout a partir do repositrio. um processo semelhante ao utilizado para recuperar eventuais modicaes 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), embora lidem diretamente com os arquivos antigos, dispensam uma conexo com a rede, pois o Subversion inteligentemente mantm uma cpia inalterada dos arquivos em uma pasta oculta ".svn", e depois apenas compara o contedo desta pasta com as modicaes feitas pelo usurio.

7.3 Interao com o repositrio


J estamos praticamente nalizados com nossa tarefa diria: sabemos adicionar e deletar arquivos, vericar as modicaes feitas, conferir se estas esto desatualizadas e resolver conitos

59

CDTC

Centro de Difuso de Tecnologia e Conhecimento

Brasil/DF

simples, processo automatizado pelo Subversion. Mas ainda resta uma dvida: e se nossas modicaes no resultarem em um conito 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 modicaes locais e remotas sem maiores problemas. J a terceira ocorrncia poder nos causar um problema, pois indica um conito (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 conito no arquivo original, a m de auxiliar o processo de anlise. Poderemos resolver o conito 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 conito; 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 conito e retornar os arquivos aos seus estados originais. Uma vez resolvidos todos os conitos, 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 conito desaparecer. Agora sim poderemos mandar nossas modicaes ao repositrio (nalmente!), 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 modicaes 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 modicado, assim car muito mais fcil recuperar o repositrio aps um engano, alm de ajudar o usurio a utilizar o sistema com mais ecincia. Essa mensagem pode ser ainda passada atravs de um arquivo, com o switch --le". 60

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 suciente 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 fcil utilizao, implementado como uma extenso do Windows Shell, o Windows Explorer. Assim sendo, no congura 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; 61

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, 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 grco ou a linha de comando.

8.4 Trac
Plataformas: Multiplataforma; URL: http://trac.edgewall.org/; O Trac um sistema de gerenciamento 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 uxo 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 modicada, sendo assim totalmente livre.

62