svn book r320

Upload: robertoteresina

Post on 12-Jul-2015

681 views

Category:

Documents


0 download

TRANSCRIPT

Controle de Verso com SubversionPara Subversion 1.4 (Compilado da reviso 320)

Ben Collins-Sussman Brian W. Fitzpatrick C. Michael Pilato

Controle de Verso com Subversion: Para Subversion 1.4: (Compilado da reviso 320)por Ben Collins-Sussman, Brian W. Fitzpatrick, e C. Michael Pilato Publicado (TBA) Copyright 2002, 2003, 2004, 2005, 2006, 2007 Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael PilatoEste trabalho est licenciado sob a licena Creative Commons Attribution License. Para obter uma cpia dessa licena, visite http://creativecommons.org/licenses/by/2.0/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

ndiceApresentao .....................................................................................................xi Prefcio ........................................................................................................... xiii Pblico-Alvo ............................................................................................. xiii Como Ler Este Livro ................................................................................. xiv Convenes Usadas Neste Livro ................................................................xv Convenes tipogrficas ....................................................................xv cones ...............................................................................................xv Organizao Deste Livro ............................................................................xv Este Livro Livre ...................................................................................... xvi Agradecimentos ...................................................................................... xvii Agradecimentos de Ben Collins-Sussman ......................................... xvii Agradecimentos de Brian W. Fitzpatrick ............................................ xvii Agradecimentos de C. Michael Pilato ............................................... xviii O Que o Subversion? ........................................................................... xviii Histrico do Subversion .................................................................... xix Caractersticas do Subversion ............................................................xx Arquitetura do Subversion ................................................................. xxi Componentes do Subversion ............................................................ xxii 1. Conceitos Fundamentais ................................................................................. 1 O Repositrio ............................................................................................. 1 Modelos de Versionamento ......................................................................... 1 O Problema do Compartilhamento de Arquivos .................................... 2 A Soluo Lock-Modify-Unlock ............................................................ 3 A Soluo Copy-Modify-Merge ............................................................ 4 Subversion em Ao ................................................................................... 7 URLs do Repositrio Subversion ......................................................... 7 Cpias de Trabalho, ou Cpias Locais ................................................. 8 Revises .......................................................................................... 11 Como as Cpias de Trabalho Acompanham o Repositrio .................. 13 Revises Locais Mistas ..................................................................... 14 Sumrio ................................................................................................... 15 2. Uso Bsico ................................................................................................... 16 Help! ........................................................................................................ 16 Colocando dados em seu Repositrio ........................................................ 16 svn import ........................................................................................ 16 Layout de repositrio recomendado ................................................... 17 Checkout Inicial ........................................................................................ 17 Desabilitando o Cache de Senhas ..................................................... 19 Autenticando como um Usurio Diferente ........................................... 19 Ciclo Bsico de Trabalho ........................................................................... 20 Atualizando Sua Cpia de Trabalho ................................................... 20 Fazendo Alteraes em Sua Cpia de Trabalho ................................. 21 Verificando Suas Alteraes .............................................................. 22 Desfazendo Modificaes de Trabalho ............................................... 26 Resolvendo Conflitos (Combinando Alteraes de Outros) .................. 27 Registrando Suas Alteraes ............................................................ 30 Examinando o Histrico ............................................................................ 31 Gerando uma lista de alteraes histricas ........................................ 32 Examinando os detalhes das alteraes histricas ............................. 33 Navegando pelo repositrio ............................................................... 35 Retornando o repositrio a momentos antigos .................................... 36 s Vezes Voc S Precisa Limpar ............................................................. 36 Sumrio ................................................................................................... 37 3. Tpicos Avanados ....................................................................................... 38 Especificadores de Reviso ...................................................................... 38 Termos de Reviso ........................................................................... 38 iv

Controle de Verso com Subversion

Datas de Reviso ............................................................................. 39 Propriedades ............................................................................................ 40 Por que Propriedades? ..................................................................... 41 Manipulando Propriedades ................................................................ 43 Propriedades e o Fluxo de Trabalho no Subversion ............................ 45 Definio Automtica de Propriedades ............................................... 47 Portabilidade de Arquivo ........................................................................... 47 Tipo de Contedo do Arquivo ............................................................ 48 Executabilidade de Arquivo ............................................................... 49 Seqncia de Caracteres de Fim-de-Linha ......................................... 49 Ignorando Itens No-Versionados .............................................................. 51 Substituio de Palavra-Chave .................................................................. 53 Travamento .............................................................................................. 57 Criando travas .................................................................................. 59 Descobrindo as travas ...................................................................... 61 Quebrando e roubando travas ........................................................... 62 Comunicao de Travas ................................................................... 64 Definies Externas .................................................................................. 65 Revises Marcadoras e Revises Operativas ............................................. 68 Modelo de Rede ....................................................................................... 72 Solicitaes e Respostas .................................................................. 72 Armazenando Credenciais no Cliente ................................................ 73 4. Fundir e Ramificar ......................................................................................... 76 O que um Ramo? .................................................................................. 76 Usando Ramos ......................................................................................... 77 Criando um Ramo ............................................................................. 78 Trabalhando com o seu Ramo ........................................................... 80 Os conceitos chave por trs de ramos ............................................... 82 Copiando Modificaes Entre Ramos ......................................................... 82 Copiando modificaes especficas ................................................... 83 O conceito chave sobre fuso ........................................................... 85 Melhores prticas sobre Fuso .......................................................... 86 Casos Comuns de Utilizao ..................................................................... 90 Mesclando um Ramo Inteiro para Outro ............................................. 90 Desfazendo Alteraes ..................................................................... 92 Ressucitando Itens Excludos ............................................................ 93 Padres Comuns de Ramificao ...................................................... 95 Atravessando Ramos ................................................................................ 97 Rtulos .................................................................................................... 99 Criando um rtulo simples ................................................................. 99 Criando um rtulo complexo .............................................................. 99 Manuteno de Ramos ........................................................................... 100 Repository Layout ........................................................................... 101 Data Lifetimes ................................................................................ 101 Ramos de fornecedores .......................................................................... 102 Procedimento Geral para Manuteno de Ramos de Fornecedores ... 103 svn_load_dirs.pl ............................................................................. 105 Sumrio ................................................................................................. 106 5. Administrao do Repositrio ...................................................................... 107 O Repositrio Subversion, Definio ........................................................ 107 Estratgias para Implementao de Repositrios ...................................... 108 Planejando a Organizao do Repositrio ........................................ 108 Decidindo Onde e Como Hospedar Seu Repositrio ......................... 111 Escolhendo uma Base de Dados ..................................................... 111 Criando e Configurando Seu Repositrio .................................................. 115 Criando o Repositrio ..................................................................... 115 Implementing Repository Hooks ...................................................... 116 Berkeley DB Configuration .............................................................. 118 Repository Maintenance .......................................................................... 118 An Administrator's Toolkit ................................................................ 118 Commit Log Message Correction ..................................................... 122 v

Controle de Verso com Subversion

Managing Disk Space ..................................................................... Berkeley DB Recovery .................................................................... Migrating Repository Data Elsewhere ............................................... Filtering Repository History .............................................................. Repository Replication .................................................................... Repository Backup .......................................................................... Sumrio ................................................................................................. 6. Configurao do Servidor ............................................................................ Viso Geral ............................................................................................ Escolhendo uma Configurao de Servidor .............................................. O Servidor svnserve ....................................................................... svnserve sobre SSH ....................................................................... O Servidor Apache HTTP ................................................................ Recomendaes ............................................................................. svnserve, um servidor especializado ........................................................ Invocando o Servidor ...................................................................... Autenticao e autorizao internos ................................................. Tunelamento sobre SSH ................................................................. Dicas de configurao do SSH ........................................................ httpd, o servidor HTTP Apache ................................................................ Pr-requisitos ................................................................................. Configurao Bsica do Apache ...................................................... Opes de Autenticao ................................................................. Opes de Autorizao ................................................................... Facilidades Extras .......................................................................... Autorizao Baseada em Caminhos ........................................................ Dando Suporte a Mltiplos Mtodos de Acesso ao Repositrio .................. 7. Customizando sua Experincia com Subversion ........................................... rea de Configurao do Tempo de Execuo ......................................... Estrutura da rea de Configurao .................................................. Configurao e o Registro do Windows ............................................ Opes de Configurao ................................................................. Localizao ............................................................................................ Compreendendo localidades ........................................................... Uso de localidades do Subversion ................................................... Usando Ferramentas Externas de Diferenciao ...................................... Ferramentas diff Externas ............................................................... Ferramentas diff3 Externas ............................................................. 8. Incorporando o Subversion .......................................................................... Projeto da Biblioteca em Camadas .......................................................... Camada de Repositrio ................................................................... Camada de Acesso ao Repositrio .................................................. Camada Cliente .............................................................................. Por dentro da rea de Administrao da Cpia de Trabalho ...................... Os Arquivos de Entrada .................................................................. Cpias Inalteradas e Propriedade de Arquivos ................................. Usando as APIs ...................................................................................... A Biblioteca Apache Portable Runtime ............................................. Requisitos de URL e Caminho ......................................................... Usando Outras Linguagens alm de C e C++ ................................... Exemplos de Cdigo ....................................................................... 9. Referncia Completa do Subversion ............................................................ O Cliente de Linha de Comando do Subversion: svn ................................. Opes do svn ............................................................................... Subcomandos svn .......................................................................... svnadmin ............................................................................................... Opes do svnadmin ...................................................................... svnadmin Subcommands ................................................................ svnlook .................................................................................................. Opes do svnlook ......................................................................... Sub-comandos do svnlook .............................................................. vi

122 125 126 130 133 138 139 141 141 142 142 143 143 144 145 145 147 149 151 152 153 154 156 159 163 166 170 172 172 172 173 174 178 179 179 181 181 183 185 185 186 190 191 192 192 193 193 194 195 195 196 202 202 202 206 265 265 266 282 282 283

Controle de Verso com Subversion

svnsync .................................................................................................. svnsync Options ............................................................................. svnsync Subcommands .................................................................. svnserve ................................................................................................ svnserve Options ............................................................................ svnversion .............................................................................................. mod_dav_svn ......................................................................................... Subversion properties ............................................................................. Versioned Properties ...................................................................... Unversioned Properties ................................................................... Repository Hooks ................................................................................... A. Guia Rpido de Introduo ao Subversion ................................................... Instalando o Subversion .......................................................................... Tutorial "Alta Velocidade" ........................................................................ B. Subversion para Usurios de CVS ............................................................... Os Nmeros de Reviso Agora So Diferentes ........................................ Verses de Diretrio ............................................................................... Mais Operaes Desconectadas ............................................................. Distino Entre Status e Update .............................................................. Status ............................................................................................ Update ........................................................................................... Ramos e Rtulos .................................................................................... Propriedades de Metadados .................................................................... Resoluo de Conflitos ........................................................................... Arquivos Binrios e Traduo .................................................................. Mdulos sob Controle de Verso ............................................................. Autenticao .......................................................................................... Convertendo um Repositrio de CVS para Subversion .............................. C. WebDAV e Autoversionamento ................................................................... O que WebDAV? ................................................................................. Autoversionamento ................................................................................. Interoperabilidade com Softwares Clientes ............................................... Aplicaes WebDAV Independentes ................................................ Extenses WebDAV para gerenciadores de arquivos ........................ Implementaes de sistemas de arquivos WebDAV .......................... D. Ferramentas de Terceiros ........................................................................... E. Copyright ................................................................................................... ndice Remissivo ............................................................................................

299 299 300 303 304 305 307 308 309 309 310 320 320 321 324 324 324 325 326 326 327 327 327 328 328 328 329 329 330 330 331 332 334 335 337 339 340 345

vii

Lista de Figuras1. Arquitetura do Subversion ............................................................................. xxi 1.1. Um tpico sistema cliente/servidor ................................................................. 1 1.2. O problema para evitar ................................................................................. 2 1.3. A soluo lock-modify-unlock ........................................................................ 3 1.4. A soluo copy-modify-merge ....................................................................... 4 1.5. A soluo copy-modify-merge (continuando) .................................................. 5 1.6. O Sistema de Arquivos do Repositrio ........................................................... 9 1.7. O Repositrio ............................................................................................. 11 4.1. Ramos de desenvolvimento ........................................................................ 76 4.2. Layout Inicial do Repositrio ....................................................................... 77 4.3. Repositrio com uma nova cpia ................................................................. 79 4.4. Ramificao do histrico de um arquivo ....................................................... 81 8.1. Arquivos e diretrios em duas dimenses .................................................. 188 8.2. Versionando o tempoa terceira dimenso! .............................................. 189

viii

Lista de Tabelas1.1. URLs de Acesso ao Repositrio .................................................................. 10 5.1. Comparativo dos Mecanismos de Armazenamento .................................... 111 6.1. Comparao das Opes para o Servidor Subversion ................................ 141 C.1. Clientes WebDAV Comuns ....................................................................... 333

ix

Lista de Exemplos5.1. txn-info.sh (Reporting Outstanding Transactions) ....................................... 5.2. Mirror repository's pre-revprop-change hook script ..................................... 5.3. Mirror repository's start-commit hook script ................................................ 6.1. Um exemplo de configurao para acesso annimo. .................................. 6.2. Um exemplo de configurao para acesso autenticado. .............................. 6.3. Um exemplo de configurao para acesso misto autenticado/annimo. ....... 6.4. Desabilitando verificaes de caminho como um todo ................................ 7.1. Arquivo (.reg) com Entradas de Registro de Exemplo. ................................ 7.2. diffwrap.sh ............................................................................................... 7.3. diffwrap.bat .............................................................................................. 7.4. diff3wrap.sh ............................................................................................. 7.5. diff3wrap.bat ............................................................................................ 8.1. Usando a Camada de Repositrio ............................................................. 8.2. Usando a Camada de Repositrio com Python .......................................... 8.3. Um Rastreador de Status em Python ......................................................... 123 134 135 161 161 162 163 174 182 182 183 183 196 198 199

x

ApresentaoKarl Fogel Chicago, 14 de Maro de 2004 Uma base ruim de Perguntas Freqentes (FAQ), aquela que composta no de perguntas que as pessoas realmente fizeram, mas de perguntas que o autor da FAQ desejou que as pessoas tivessem feito. Talvez voc j tenha visto isto antes: P: De que forma posso utilizar o Glorbosoft XYZ para maximizar a produtividade da equipe? R: Muitos dos nossos clientes desejam saber como podem maximizar a produtividade atravs de nossas inovaes patenteadas de groupware para escritrios. A resposta simples: primeiro, clique no menu Arquivo. Desa at a opo Aumentar Produtividade, ento O problema com estas bases de FAQ que eles no so, propriamente ditas, FAQ. Ningum nunca liga para o suporte tcnico e pergunta Como ns podemos maximizar a produtividade?. Em vez disso, as pessoas fazem perguntas muito mais especficas, como: Como podemos alterar o sistema de calendrio para enviar lembretes dois dias antes ao invs de um?, etc. Mas muito mais fcil forjar Perguntas Freqentes imaginrias do que descobrir as verdadeiras. Compilar uma verdadeira base de FAQ exige um esforo contnuo e organizado: atravs do ciclo de vida do software, as questes que chegam devem ser rastreadas, respostas monitoradas, e tudo deve ser reunido em um todo coerente, pesquisvel que reflete a experincia coletiva dos usurios em seu mundo. Isto requer a pacincia e a atitude observadora de um cientista. Nenhuma grande teoria ou pronunciamentos visionrios aquiolhos abertos e anotaes precisas so o principal. O que eu amo neste livro que ele surgiu deste processo, e isto evidenciado em cada pgina. Ele o resultado direto dos encontros entre os autores e usurios. Ele comeou quando Ben Collins-Sussman observou que as pessoas estavam fazendo as mesmas perguntas bsicas diversas vezes nas listas de discusso do Subversion, como por exemplo: Quais so os procedimentos-padro para se utilizar o Subversion? Branches e tags funcionam do mesmo modo como em outros sistemas de controle de verso? Como eu posso saber quem realizou uma alterao em particular? Frustrado em ver as mesmas questes dia aps dia, Ben trabalhou intensamente durante um ms no vero de 2002 para escrever The Subversion Handbook, um manual de sessenta pginas cobrindo todas as funcionalidades bsicas do Subversion. O manual no tinha a pretenso de ser completo, mas ele foi distribudo com o Subversion e auxiliou os usurios a ultrapassarem as dificuldades iniciais na curva de aprendizado. Quando a O'Reilly and Associates decidiu publicar um livro completo sobre o Subversion, o caminho menos crtico estava bvio: apenas estender o manual. Para os trs co-autores do novo livro ento lhes foi dada uma oportunidade mpar. Oficialmente, sua tarefa era escrever um livro numa abordagem top-down, comeando pelo sumrio e seu esboo inicial. Mas eles tambm tinham acesso a um fluxo constantede fato, um giser incontrolvel de contedo de origem bottom-up. O Subversion j esteve nas mos de centenas de usurios anteriores, que geraram toneladas de feedback, no apenas sobre o Subversion, mas tambm sobre sua documentao existente. Durante todo o tempo em que eles escreveram o livro, Ben, Mike, e Brian habitaram as listas de discusso e salas de bate-papo do Subversion, registrando cuidadosamente os problemas que os usurio estavam tendo em situaes na vida-real. Monitorar este feedback, fazia parte da descrio de sua funo na CollabNet, e isto lhes deu uma enorme vantagem quando comearam a documentar o Subversion. O livro que eles produziram solidamente fundamentado na rocha da experincia, no nas areias mutveis da iluso; ele combina os melhores aspectos de um manual de usurio e uma base de FAQ. Esta dualixi

Apresentao

dade talvez no seja perceptvel numa primeira leitura. Lido na ordem, de frente para trs, o livro uma descrio bem direta de uma pea de software. Existe a viso geral, o obrigatrio tour, o captulo sobre configurao administrativa, alguns tpicos avanados, e claro uma referncia de comandos e um guia de resoluo de problemas. Somente quando voc o ler novamente mais tarde, procurando a soluo para um problema especfico, que sua autenticidade reluzir: os detalhes telling que s podem advir de um encontro com o inusitado, os exemplos surgidos de casos de utilizao reais, e muito de toda a sensibilidade das necessidades e dos pontos de vista do usurio. claro, que ningum pode prometer que este livro responder todas as dvidas que voc tem sobre o Subversion. Certas vezes, a preciso com que ele antecipa suas perguntas parecer assustadoramente teleptica; ainda sim, ocasionalmente, voc vai tropear em alguma falha no conhecimento da comunidade, e sair de mo vazias. Quando isto acontecer, a melhor coisa que voc pode fazer enviar um email para e apresentar seu problema. Os autores ainda esto l, continuam observando, e no somente os trs listados na capa, mas muitos outros que contriburam com correes e materiais originais. Do ponto de vista da comunidade, resolver o seu problema meramente um agradvel efeito de um projeto muito maiorrealmente, o ajuste paulatino deste livro, e em ltimo caso, do prprio Subversion, para ver mais de perto como as pessoas o utilizam. Eles esto ansiosos para ouvir voc no apenas porque eles querem ajud-lo, mas porque voc tambm os ajuda. Com o Subversion, assim como em todo projeto ativo de software livre, voc no est sozinho. Que este livro seja seu primeiro companheiro.

xii

Prefcio importante no deixar que o perfeito se torne inimigo do bom, mesmo quando voc puder estar certo sobre o que o perfeito . Duvide quando voc no puder. Como desagradvel ser aprisionado pelos erros passados, voc no pode fazer qualquer progresso tendo medo de sua prpria sombra durante a ao. Greg Hudson No mundo dos softwares open-source, o Concurrent Versions System (CVS) foi a ferramenta escolhida para controle de verso por muitos anos. E com razo. O prprio CVS um software open-source tambm, e seu modus operandi no-restritivo e o suporte a operaes de rede permitiram que diversos programadores distribudos geograficamente compartilhassem seus trabalhos. Ele atende natureza colaborativa do mundo open-source como um todo. O CVS e seu modelo de desenvolvimento semi-catico se tornou um marco da cultura open-source. Mas o CVS tambm tinha seus defeitos, e simplesmente corrigir estes defeitos prometia ser um enorme esforo. Chega o Subversion. Desenvolvido para ser um sucessor do CVS, os criadores do Subversion pretendiam ganhar a simpatia dos usurios CVS de duas maneirascriando um sistema open-source com o projeto (e a aparncia) semelhante ao do CVS, e tentando evitar muitos de seus conhecidos defeitos. Por mais que o resultado no seja necessariamente a prxima grande evoluo no projeto de controle de verso, o Subversion muito poderoso, muito usvel, e muito flexvel. E agora muitos projetos open-source, quase todos recm-iniciados, preferem agora o Subversion ao CVS. Este livro foi escrito para documentar a srie 1.4 do sistema de controle de verso Subversion. Ns tentamos ser bem profundos em nossa abordagem. Entretanto, o Subversion possui uma comunidade de desenvolvedores prspera e cheia de energia, ento eles j tm um conjunto de recursos e melhorias planejadas para futuras verses do Subversion que podem mudar alguns dos comandos e notas especficas deste livro.

Pblico-AlvoEste livro foi escrito para pessoas habituadas com computadores que desejam usar o Subversion para gerenciar seus dados. Ainda que o Subversion rode em vrios sistemas operacionais diferentes, a sua interface de usurio primria baseada em linha de comando. Essa ferramenta de linha de comando (svn), e alguns programas auxiliares, so o foco deste livro. Por motivo de consistncia, os exemplos neste livro presumem que o leitor esteja usando um sistema operacional baseado em Unix e se sinta relativamente confortvel com Unix e com interfaces de linha de comando. Dito isto, o programa svn tambm roda em plataformas no-Unix, como o Microsoft Windows. Com poucas excees, como o uso de barras invertidas (\) em lugar de barras regulares (/) para separadores de caminho, a entrada e a sada desta ferramenta, quando executada no Windows, so idnticas s do seu companheiro Unix. Muitos leitores so provavelmente programadores ou administradores de sistemas que necessitam rastrear alteraes em cdigo-fonte. Essa a finalidade mais comum para o Subversion, e por isso o cenrio por trs de todos os exemplos deste livro. Entretanto, o Subversion pode ser usado para gerenciar qualquer tipo de informaoimagens, msicas, bancos de dados, documentao, etc. Para o Subversion, dados so apenas dados. Enquanto que este livro presume que o leitor nunca usou um sistema de controle de verso, ns tambm tentamos facilitar para os usurios do CVS (e outros sistemas) a migrao para o Subversion. Ocasionalmente, notas especiais podero mencionar outros controles de verso. H tambm um apndice que resume muitas das diferenas entre CVS e xiii

Prefcio

Subversion. Note tambm que os exemplos de cdigo-fonte usados ao longo do livro so apenas exemplos. Ainda que eles compilem com os truques apropriados do compilador, seu propsito ilustrar um cenrio em particular, no necessariamente servir como exemplos de boas prticas de programao.

Como Ler Este LivroLivros tcnicos sempre enfrentam um certo dilema: se os leitores devem fazer uma leitura top-down (do incio ao fim) ou bottom-up (do fim ao comeo). Um leitor top-down prefere ler ou folhear toda a documentao antes, ter uma viso geral de como o sistema funciona e apenas, ento, que que ele inicia o uso do software. J um leitor bottom-up aprende fazendo, ele algum que mergulha no software e o esmiua, voltando s sees do livro quando necessrio. Muitos livros so escritos para um ou outro tipo de pessoa, e esse livro , sem dvida, indicado para o leitor top-down. (Se voc est lendo esta seo, provavelmente voc j um leitor top-down nato). No entanto, se voc um leitor bottom-up, no se desespere. Mesmo que este livro pode ser definido como um apanhado geral sobre o Subversion, o contedo de cada seo tende a aprofundar com exemplos especficos nos quais voc pode aprender fazendo. As pessoas impacientes que j querem ir fazendo, podem pular direto para o Apndice A, Guia Rpido de Introduo ao Subversion. Independente do seu estilo de aprendizado, este livro pretende ser til para os mais diversos tipos de pessoas os que no possuem nenhuma experincia com controle de verso at os administradores de sistema mais experientes. Dependendo do seu conhecimento, certos captulos podem ser mais ou menos importantes para voc. A lista abaixo uma recomendao de leitura para os diversos tipos de leitores: Administradores de Sistemas Experientes Supe-se aqui que voc, provavelmente, j tenha usado controle de verso anteriormente, e est morrendo de vontade de usar um servidor Subversion o quanto antes. O Captulo 5, Administrao do Repositrio e o Captulo 6, Configurao do Servidor iro mostrar como criar seu primeiro repositrio e torn-lo disponvel na rede. Depois disso, o Captulo 2, Uso Bsico e o Apndice B, Subversion para Usurios de CVS vo mostrar o caminho mais rpido para se aprender a usar o cliente Subversion. Novos usurio Seu administrador provavelmente j disponibilizou um servidor Subversion, e voc precisa aprender a usar o cliente. Se voc nunca utilizou um sistema de controle de verso, ento o Captulo 1, Conceitos Fundamentais ser vital para introduzir e mostrar as idias por trs do controle de verso. O Captulo 2, Uso Bsico um guia do cliente do Subversion. Usurios avanados Seja voc um usurio ou um administrador, eventualmente seu projeto ir crescer muito. Voc ir querer aprender a fazer coisas avanadas com o Subversion, como usar ramos e fazer fuses (Captulo 4, Fundir e Ramificar), como usar as propriedades de suporte do Subversion (Captulo 3, Tpicos Avanados), como configurar as opes de tempo de execu o (Captulo 7, Customizando sua Experincia com Subversion), entre outras coisas. Estes captulos no so crticos no incio, porm no deixe de llos quando estiver familiarizado com o bsico. Desenvolvedores Presumidamente, voc j est familiarizado com o Subversion, e quer ou extend-lo ou construir um novo software baseado nas suas diversas APIs. O Captulo 8, Incorporando o Subversion foi feito justamente pra pra voc. O livro termina com um material de referncia o Captulo 9, Referncia Completa do Subversion um guia de referncia para todos os comandos do Subversion, e os apndixiv

Prefcio

ces cobrem um nmero considervel de tpicos teis. Estes captulos sero os que voc ir voltar com mais freqncia depois que terminar de ler o livro.

Convenes Usadas Neste LivroEsta seo cobre as vrias convenes usadas neste livro.

Convenes tipogrficasLargura constante Comandos usados, comando de sada, e opes Largura constante em itlico Usado para substituir itens no cdigo e texto Itlico Usado para nomes de arquivo e diretrio

conesEste cone representa uma nota relacionada ao texto citado.

Este cone representa uma dica til relacionada ao texto citado.

Este cone representa um aviso relacionado ao texto citado.

Organizao Deste LivroAbaixo esto listados os captulos e seus contedos esto listados: Prefcio Cobre a histria do Subversion bem como suas caractersticas, arquitetura e compomentes. Captulo 1, Conceitos Fundamentais Explica o bsico sobre controle de verso e os diferentes modelos de versionamento, o repositrio do Subversion, cpias de trabalho e revises. Captulo 2, Uso Bsico Faz um tour por um dia na vida de um usurio do Subversion. Demonstra como usar o cliente do Subversion para obter, modificar e submeter dados. Captulo 3, Tpicos Avanados Cobre as caractersticas mais complexas que os usurios regulares iro encontrar eventualmente, como metadados, travamento de arquivo(locking) e rotulagem de revises. Captulo 4, Fundir e Ramificar Discute sobre ramos, fuses, e rotulagem, incluindo as melhores prticas para a criao de ramos e fuses, casos de uso comuns, como desfazer alteraes, e como facilitar a troca de um ramo para o outro. xv

Prefcio

Captulo 5, Administrao do Repositrio Descreve o bsico de um repositrio Subversion, como criar, configurar, e manter um repositrio, e as ferramentas que podem ser usadas para isso. Captulo 6, Configurao do Servidor Explica como configurar um servidor Subversion e os diferentes caminhos para acessar seu repositrio: HTTP, o protocolosvn e o acesso local pelo disco. Tambm cobre os detalhes de autenticao, autorizao e acesso annimo. Captulo 7, Customizando sua Experincia com Subversion Explora os arquivos de configurao do cliente Subversion, a internacionalizao de texto, e como fazer com que ferramentas externas trabalhem com o subversion. Captulo 8, Incorporando o Subversion Descreve as partes internas do Subversion, o sistema de arquivos do Subversion, e a cpia de trabalho da rea administrativa do ponto de vista de um programador. Demonstra como usar as APIs pblicas para escrever um programa que usa o Subversion, e o mais importante, como contribuir para o desenvolvimento do Subversion. Captulo 9, Referncia Completa do Subversion Explica em detalhes todos os subcomandos do svn, svnadmin, e svnlook com abundncia de exemplos para toda a famlia! Apndice A, Guia Rpido de Introduo ao Subversion Para os impacientes, uma rpida explicao de como instalar o Subversion e iniciar seu uso imediatamente. Voc foi avisado. Apndice B, Subversion para Usurios de CVS Cobre as similaridades e diferenas entre o Subversion e o CVS, com numerosas sugestes de como fazer para quebrar todos os maus hbitos que voc adquiriu ao longo dos anos com o uso do CVS. Inclui a descrio de nmero de reviso do Subversion, versionamento de diretrios, operaes offline, update vs. status, ramos, rtulos, resoluo de conflitos e autenticao. Apndice C, WebDAV e Autoversionamento Descreve os detalhes do WebDAV e DeltaV, e como voc pode configurar e montar seu repositrio Subversion em modo de leitura/escrita em um compartilhamento DAV. Apndice D, Ferramentas de Terceiros Discute as ferramentas que suportam ou usam o Subversion, incluindo programas clientes alternativos, ferramentas para navegao no repositrio, e muito mais.

Este Livro LivreEste livro teve incio com a documentao escrita pelos desenvolvedores do projeto Subversion, a qual foi reunida em um nico trabalho e reescrito. Assim, ele sempre esteve sob uma licena livre. (Veja Apndice E, Copyright.) De fato, o livro foi escrito sob uma viso pblica, originalmente como parte do prprio projeto Subversion. Isto significa duas coisas: Voc sempre ir encontrar a ltima verso deste livro no prprio repositrio Subversion do livro. Voc pode fazer alteraes neste livro e redistribu-lo, entretanto voc deve fazlosob uma licena livre. Sua nica obrigao manter o crditos originais dos autores. claro que, ao invs de distribuir sua prpria verso deste livro, gostaramos muito mais que voc enviasse seu feedback e correes para a comunidade de desenvolvimento do Subversion.

xvi

Prefcio

O site deste livro est em desenvolvimento, e muitos dos tradutores voluntrios esto se reunindo no site http://svnbook.red-bean.com. L voc pode encontrar links para as ltimas verses lanadas e verses compiladas deste livro em diversos formatos, bem como as instrues de acesso ao repositrio Subversion do livro(onde est o cdigo-fonte em formato DocBook XML) Um feedback bem vindoe encorajado tambm. Por favor, envie todos os seus comentrios, reclamaes, e retificaes dos fontes do livro para o email .

AgradecimentosEste livro no existiria (nem seria til) se o Subversion no existisse. Assim, os autores gostariam de agradecer ao Brian Behlendorf e CollabNet, pela viso em acreditar em um arriscado e ambicioso projeto de Cdigo Aberto; Jim Blandy pelo nome e projeto original do Subversionns amamos voc, Jim; Karl Fogel, por ser um excelente amigo e grande lder na comunidade, nesta ordem.1 Agradecimentos a O'Reilly e nossos editores, Linda Mui e Tatiana Diaz por sua paciente e apoio. Finalmente, agrademos s inmeras pessoas que contriburam para este livro com suas revises informais, sugestes e retificaes. Certamente, esta no uma lista completa, mas este livro estaria incompleto e incorreto sem a ajuda de: David Anderson, Jani Averbach, Ryan Barrett, Francois Beausoleil, Jennifer Bevan, Matt Blais, Zack Brown, Martin Buchholz, Brane Cibej, John R. Daily, Peter Davis, Olivier Davy, Robert P. J. Day, Mo DeJong, Brian Denny, Joe Drew, Nick Duffek, Ben Elliston, Justin Erenkrantz, Shlomi Fish, Julian Foad, Chris Foote, Martin Furter, Dave Gilbert, Eric Gillespie, David Glasser, Matthew Gregan, Art Haas, Eric Hanchrow, Greg Hudson, Alexis Huxley, Jens B. Jorgensen, Tez Kamihira, David Kimdon, Mark Benedetto King, Andreas J. Koenig, Nuutti Kotivuori, Matt Kraai, Scott Lamb, Vincent Lefevre, Morten Ludvigsen, Paul Lussier, Bruce A. Mah, Philip Martin, Feliciano Matias, Patrick Mayweg, Gareth McCaughan, Jon Middleton, Tim Moloney, Christopher Ness, Mats Nilsson, Joe Orton, Amy Lyn Pilato, Kevin PilchBisson, Dmitriy Popkov, Michael Price, Mark Proctor, Steffen Prohaska, Daniel Rall, Jack Repenning, Tobias Ringstrom, Garrett Rooney, Joel Rosdahl, Christian Sauer, Larry Shatzer, Russell Steicke, Sander Striker, Erik Sjoelund, Johan Sundstroem, John Szakmeister, Mason Thomas, Eric Wadsworth, Colin Watson, Alex Waugh, Chad Whitacre, Josef Wolf, Blair Zajac e a comunidade inteira do Subversion.

Agradecimentos de Ben Collins-SussmanAgradeo a minha esposa Frances, quem, por vrios meses, comeou a ouvir, Mas docinho, eu estou trabalhando no livro, ao invs do habitual, Mas docinho, eu estou escrevendo um e-mail. Eu no sei onde ela arruma tanta pacincia! Ela meu equilbrio perfeito. Agradeo minha extensa famlia e amigos por seus sinceros votos de encorajamento, apesar de no terem qualquer interesse no assunto. (Voc sabe, tem uns que dizem: Voc escreveu um livro?, e ento quando voc diz que um livro de computador, eles te olham torto.) Agradeo aos meus amigos mais prximos, que me fazem um rico, rico homem. No me olhem assimvocs sabem quem so. Agradeo aos meus pais pela minha perfeita formao bsica, e pelos inacreditveis conselhos. Agradeo ao meu filho pela oportunidade de passar isto adiante.

Agradecimentos de Brian W. Fitzpatrick1

Oh, e agradecemos ao Karl, por ter dedicado muito trabalho ao escrever este livro sozinho.

xvii

Prefcio

Um grande obrigado minha esposa Marie por sua inacreditvel compreenso, apoio, e acima de tudo, pacincia. Obrigado ao meu irmo Eric, quem primeiro me apresentou programao voltada para UNIX. Agradeo minha me e minha av por seu apoio, sem falar nas longas frias de Natal, quando eu chegava em casa e mergulhava minha cabea no laptop para trabalhar no livro. Mike e Ben, foi um prazer trabalhar com vocs neste livro. Heck, um prazer trabalhar com voc nesta obra! Para todos da comunidade Subversion e a Apache Software Foundation, agradeo por me receberem. No h um dia onde eu no aprenda algo com pelo menos um de vocs. Finalmente, agradeo ao meu av que sempre me disse Liberdade igual responsabilidade. Eu no poderia estar mais de acordo.

Agradecimentos de C. Michael PilatoUm obrigado especial a Amy, minha melhor amiga e esposa por inacreditveis nove anos, por seu amor e apoio paciente, por me tolerar at tarde da noite, e por agentar o duro processo de controle de verso que impus a ela. No se preocupe, queridavoc ser um assistente do TortoiseSVN logo! Gavin, provavelmente no h muitas palavras neste livro que voc possa, com sucesso, pronunciar nesta fase de sua vida, mas quando voc, finalmente, aprender a forma escrita desta louca lngua que falamos, espero que voc esteja to orgulhoso de seu pai quanto ele de voc. Aidan, Daddy luffoo et ope Aiduh yike contootoo as much as Aiduh yike batetball, baseball, et bootball. 2 Me e Pai, agrao pelo apoio e entusiasmo constante. Sogra e Sogro, agradeo por tudo da mesma forma e mais um pouco por sua fabulosa filha. Tiro o chapu para Shep Kendall, foi atravs dele que o mundo dos computadores foi aberto pela primeira vez a mim; Ben Collins-Sussman, meu orientador pelo mundo do cdigo-aberto; Karl Fogel voc meu .emacs; Greg Stein, o difusor da programao prtica como-fazer; Brian Fitzpatrickpor compartilhar esta experincia de escrever junto comigo. s muitas pessoas com as quais eu estou constantemente aprendendoe continuo aprendendo! Finalmente, agradeo a algum que demonstra ser perfeitamente criativo em sua excelnciavoc.

O Que o Subversion?Subversion um sistema de controle de verso livre/open-source. Isto , o Subversion gerencia arquivos e diretrios, e as modificaes feitas neles ao longo do tempo. Isto permite que voc recupere verses antigas de seus dados, ou que examine o histrico de suas alteraes. Devido a isso, muitas pessoas tratam um sistema de controle de verso como uma espcie de mquina do tempo. O Subversion pode funcionar em rede, o que lhe possibilita ser usado por pessoas em diferentes computadores. Em certo nvel, a capacidade de vrias pessoas modificarem e gerenciarem o mesmo conjunto de dados de seus prprios locais o que fomenta a colaborao. Progressos podem ocorrer muito mais rapidamente quando no h um gargalo ni-

2

Traduo: Papai te ama e espera que voc goste de computadores assim como voc ir gostar de basquete, basebol e futebol. (Isso seria bvio?)

xviii

Prefcio

co por onde todas as modificaes devam acontecer. E como o trabalho est versionado, voc no precisa ter medo de que seu trabalho perca qualidade por no ter essa via nica para modificaesse os dados sofrerem alguma modificao indevida, apenas desfaa tal modificao. Alguns sistemas de controle de verso tambm so sistema de gerenciamento de configurao (GC). Estes sistemas so especificamente desenvolvimento para gerenciar rvores de cdigo-fonte, e possuem muitos recursos especficos para o desenvolvimento de softwarecomo identificao nativa de linguagens de programao, ou ferramentas de apoio para compilao de software. O Subversion, no entanto, no um sistema desse tipo. um sistema de carter geral que pode ser usado para gerenciar quaisquer conjuntos de arquivos. Para voc, estes arquivos podem ser cdigo-fontepara outros, podem ser qualquer coisa desde listas de compras de supermercado a arquivos de edio de vdeo, e muito mais.

Histrico do SubversionNo comeo do ano 2000, a CollabNet, Inc. (http://www.collab.net) comeou a procurar desenvolvedores para desenvolver um substituto para o CVS. A CollabNet j tinha uma suite colaborativa chamada CollabNet Enterprise Edition (CEE) cujo um de seus componentes era o controle de verso. Apesar de o CEE usar o CVS como seu sistema de controle de verso inicial, as limitaes do CVS ficaram evidentes desde o princpio, e a CollabNet sabia que eventualmente teria que procurar por algo melhor. Infelizmente, o CVS havia se firmado como um padro de fact no mundo open source principalmente porque no havia nada melhor, pelo menos sob licena livre. Ento a CollabNet decidiu desenvolver um novo sistema de controle de verso a partir do zero, mantendo as idias bsicas do CVS, mas sem os bugs e seus inconvenientes. Em Fevereiro de 2000, eles contactaram Karl Fogel, o autor de Open Source Development with CVS (Coriolis, 1999), e perguntaram se ele gostaria de trabalhar neste novo projeto. Coincidentemente, no momento Karl j estava discutindo o projeto para um novo sistema de controle de verso com seu amigo Jim Blandy. Em 1995, os dois iniciaram a Cyclic Software, uma empresa que mantinha contratos de suporte para o CVS, e apesar de terem vendido a empresa posteriormente, eles ainda usavam o CVS todos os dias em seus trabalhos. Suas frustraes com o CVS levou Jim a pensar cuidadosamente sobre melhores maneiras para gerenciar dados versionados, no que ele no apenas j tinha pensado no nome Subversion, mas tambm com o projeto bsico para armazenamento de dados do Subversion. Quando a CollabNet chamou, Karl concordou imediatamente em trabalhar no projeto, e Jim sugeriu empresa em que trabalhava, Red Hat Software, essencialmente a ced-lo para o projeto por um perodo de tempo indefinido. A CollabNet contratou Karl e Ben Collins-Sussman, e um projeto detalhado de trabalho comeou em Maio. Com a ajuda e o bem-vindo incentivo de Brian Behlendorf e Jason Robbins da CollabNet, e de Greg Stein ( poca, um desenvolvedor independente trabalhando no processo de especificao do WebDAV/DeltaV), o Subversion rapidamente atraiu uma comunidade ativa de desenvolvedores. Detectou-se que muitas pessoas tambm tinham as mesmas experincias frustrantes com o CVS, agora satisfeitas com a oportunidade de finalmente fazer algo sobre isso. A equipe do projeto original determinou alguns objetivos simples. Eles no queriam romper com a metodologia existente para controle de verso, eles apenas queriam corrigir o CVS. Eles decidiram que o Subversion deveria ser compatvel com as caractersticas do CVS, e manter o mesmo modelo de desenvolvimento, mas no reproduzir as falhas mais bvias do CVS. E mesmo que o novo sistema no fosse um substituto definitivo para o CVS, ele deveria ser suficientemente semelhante a este para que qualquer usurio do CVS pudesse migrar de sistema com pouco esforo. Depois de quatorze meses de desenvolvimento, o Subversion tornou-se auto-gerencivel em 31 de Agosto de 2001. Ou seja, os desenvolvedores do Subversion pararam de usar o CVS para gerir seu prprio cdigo-fonte, e comearam a usar o prprio Subversion no lugar. xix

Prefcio

Embora a CollabNet tenha iniciado o projeto, e ainda patrocine uma grande parte dos trabalhos (ela paga os salrios de alguns poucos desenvolvedores do Subversion em tempo integral), o Subversion mantido como a maioria dos projetos open source, gerenciado por um conjunto de regras transparentes e de senso-comum, fundamentadas na meritocracia. A licena adotada pela CollabNet perfeitamente compatvel com Definio Debian de Software Livre (DFSG). Em outras palavras, qualquer pessoa livre para baixar o cdigo do Subversion, modific-lo, e redistribu-lo conforme lhe convier; no necessrio pedir permisso CollabNet ou a quem quer que seja.

Caractersticas do SubversionAo discutir sobre que recursos o Subversion traz para o mbito do controle de verso, frequentemente til falar deles em termos de que avanos eles representam aos recursos do CVS. Se voc no est familiarizado com o CVS, voc pode no compreender todas essas caractersticas. E se voc no estiver familiarizado com controle de verso como um todo, voc pode ficar bem confuso a menos que voc leia antes Captulo 1, Conceitos Fundamentais, onde apresentamos uma suave introduo ao controle de verso. O Subversion proporciona: Versionamento de diretrios O CVS apenas rastreia o histrico de arquivos individuais, j o Subversion implementa um sistema de arquivos virtual sob controle de verso que rastreia modificaes a toda a rvore de diretrio ao longo do tempo. Os arquivos e os diretrios so versionados. Histrico de verses efetivo Como o CVS limitado apenas ao versionamento de arquivos, operaes como cpia e renomeaoque podem ocorrer com arquivos tambm, mas que so realmente alteraes no contedo de algum diretrio continenteno so suportadas no CVS. Adicionalmente, no CVS voc no pode substituir um arquivo versionado por alguma outra coisa com o mesmo nome sem que o novo item deixe de herdar o histrico do arquivo antigoque talvez seja at algo com o qual no mantenha nenhuma correlao. Com o Subversion, voc pode adicionar, excluir, copiar, e renomear ambos os arquivos ou diretrios. E cada novo arquivo adicionado comea com um histrico prprio e completamente novo. Commits atmicos Um conjunto de modificaes ou inteiramente registrado no repositrio, ou no registrado de forma nenhuma. Isto possibilita aos desenvolvedores criarem e registrarem alteraes como blocos lgicos, e tambm evita problemas que possam ocorrer quando apenas uma parte de um conjunto de alteraes seja enviada com sucesso ao repositrio. Versionamento de metadados Cada arquivo e diretrio tem um conjunto de propriedadeschaves e seus valoresassociados consigo. Voc pode criar e armazenar quaisquer pares chave/valor que quiser. As propriedades so versionadas ao longo do tempo, tal como os contedos de arquivo. Escolha das camadas de rede O Subversion tem uma noo abstrata do acesso ao repositrio, tornando-o mais fcil para as pessoas implementarem novos mecanismos de rede. O Subversion pode se associar ao servidor Apache HTTP como um mdulo de extenso. Isto d ao Subversion uma grande vantagem em estabilidade e interoperabilidade, alm de acesso instantneo aos recursos existentes oferecidos por este servidorautenticao, autorizao, compactao online, dentre outros. Um servidor Subversion mais leve e independente tambm est disponvel. Este servidor utiliza um protocolo especfico o qual pode ser facilmente ser tunelado sobre SSH.

xx

Prefcio

Manipulao consistente de dados O Subversion exprime as diferenas de arquivo usando um algoritmo diferenciado, o qual funciona de maneira idntica tanto em arquivos texto (compreensvel para humanos) quanto em arquivos binrios (incompreensvel para humanos). Ambos os tipos de arquivos so igualmente armazenados de forma compactada no repositrio, e as diferenas so enviadas em ambas as direes pela rede. Ramificaes e rotulagem eficiente O custo de se fazer ramificaes (branching) e de rotulagem (tagging) no precisa ser proporcional ao tamanho do projeto. O Subversion cria ramos e rtulos simplesmente copiando o projeto, usando um mecanismo semelhante a um hard-link. Assim essas operaes levam apenas uma pequena e constante quantidade de tempo. Hackability O Subversion no tem qualquer bagagem histrica; ele implementado como um conjunto de bibliotecas C compartilhadas com APIs bem definidas. Isto torna o Subversion extremamente manutenvel e usvel por outras aplicaes e linguagens.

Arquitetura do SubversionFigura 1, Arquitetura do Subversion ilustra uma viso em alto nvel da estrutura do Subversion.

Figura 1. Arquitetura do Subversion

xxi

Prefcio

Em uma ponta encontra-se um repositrio do Subversion que mantm todos os seus dados versionados. No outro extremo est o seu programa cliente Subversion, que gerencia cpias locais de partes desses dados versionados (chamadas de cpias de trabalho). Entre esses dois extremos esto mltiplas rotas por entre vrias camadas de Acesso ao Repositrio (RA). Algumas dessas rotas partem das redes de computadores at os servidores de rede, de onde ento acessam o repositrio. Outras desconsideram a rede completamente e acessam diretamente o repositrio.

Componentes do SubversionUma vez instalado, o Subversion consiste num conjunto de diversas partes. Uma breve viso geral sobre tudo o que voc dispe mostrada a seguir. No se preocupe se as breves descries acabarem fundindo a sua cucah muito mais pginas neste livro para acabar com essa confuso. svn O programa cliente de linha de comando. xxii

Prefcio

svnversion Um programa para informar o estado (em termos das revises dos itens presentes) da cpia de trabalho. svnlook Uma ferramenta para inspecionar um repositrio Subversion diretamente. svnadmin Uma ferramenta para criao, ajuste e manuteno de um repositrio Subversion. svndumpfilter Um programa para filtragem de fluxos de um repositrio Subversion. mod_dav_svn Um mdulo plugin para o servidor Apache HTTP, usado para disponibilizar seu repositrio a outros atravs da rede. svnserve Um especfico programa servidor independente, executvel como um processo daemon ou invocvel via SSH; uma outra forma de disponibilizar seu repositrio a outros atravs da rede. svnsync Um programa para fazer espelhamento incremental de um repositrio para outro atravs da rede. Uma vez que voc tenha instalado o Subversion corretamente, voc j deve estar pronto para iniciar. Os prximos dois captulos vo gui-lo pela uso do svn, o programa cliente de linha de comando do Subversion.

xxiii

Captulo 1. Conceitos FundamentaisEste captulo uma breve e casual introduo ao Subversion. Se voc novo em controle de verso, este captulo definitivamente para voc. Ns comearemos com uma discusso sobre os conceitos gerais de controle de verso, avanaremos para as idias especficas por trs do Subversion, e mostraremos alguns exemplos simples do Subversion em uso. Embora os exemplos neste captulo mostrem pessoas compartilhando colees de cdigo fonte de programas, tenha em mente que o Subversion pode gerenciar qualquer tipo de coleo de arquivos - ele no est limitado a ajudar programadores.

O RepositrioO Subversion um sistema centralizado de compartilhamento de informao. Em seu ncleo est um repositrio, que uma central de armazenamento de dados. O repositrio armazena informao em forma de uma rvore de arquivos - uma hierarquia tpica de arquivos e diretrios. Qualquer nmero de clientes se conecta ao repositrio, e ento l ou escreve nestes arquivos. Ao gravar dados, um cliente torna a informao disponvel para outros; ao ler os dados, o cliente recebe informao de outros. Figura 1.1, Um tpico sistema cliente/servidor ilustra isso.

Figura 1.1. Um tpico sistema cliente/servidor

Ento, por que razo isto interessante? At ao momento, isto soa como a definio de um tpico servidor de arquivos. E, na verdade, o repositrio uma espcie de servidor de arquivos, mas no de um tipo comum. O que torna o repositrio do Subversion especial que ele se lembra de cada alterao j ocorrida nele: de cada mudana em cada arquivo, e at mesmo alteraes na rvore de diretrios em si, como a adio, eliminao, e reorganizao de arquivos e diretrios. Quando um cliente l dados de um repositrio, ele normalmente v apenas a ltima verso da rvore de arquivos. Mas o cliente tambm tem a habilidade de ver os estados anteriores do sistema de arquivos. Por exemplo, um cliente pode perguntar questes de histrico como, O que este diretrio continha na ltima quarta-feira? ou Quem foi a ltima pessoa que alterou este arquivo, e que alteraes ela fez? Estes so os tipos de questes que esto no corao de qualquer sistema de controle de verso: sistemas que so projetados para monitorar alteraes nos dados ao longo do tempo.

Modelos de Versionamento1

Conceitos Fundamentais

A misso principal de um sistema de controle de verso permitir a edio colaborativa e o compartilhamento de dados. Mas diferentes sistemas usam diferentes estratgias para atingir esse objetivo. importante compreender essas diferentes estratgias por vrias razes. Primeiro, ir ajud-lo a comparar os sistemas de controle de verso existentes, no caso de voc encontrar outros sistemas similares ao Subversion. Alm disso, ir ajud-lo ainda a tornar o uso do Subversion mais eficaz, visto que o Subversion por si s permite trabalhar de diferentes formas.

O Problema do Compartilhamento de ArquivosTodos os sistemas de controle de verso tm de resolver o mesmo problema fundamental: como o sistema ir permitir que os usurios compartilhem informao, e como ele ir prevenir que eles acidentalmente tropecem uns nos ps dos outros? muito fcil para os usurios acidentalmente sobrescrever as mudanas feitas pelos outros no repositrio. Considere o cenrio mostrado em Figura 1.2, O problema para evitar. Vamos supor que ns temos dois colegas de trabalho, Harry e Sally. Cada um deles decide editar o mesmo arquivo no repositrio ao mesmo tempo. Se Harry salvar suas alteraes no repositrio primeiro, ento possvel que (poucos momentos depois) Sally possa acidentalmente sobrescrev-lo com a sua prpria nova verso do arquivo. Embora a verso de Harry no seja perdida para sempre (porque o sistema se lembra de cada mudana), todas as mudanas feitas por Harry no vo estar presentes na verso mais recente do arquivo de Sally, porque ela nunca viu as mudanas de Harry's para comear. O trabalho de Harry efetivamente se perdeu - ou pelo menos desapareceu da ltima verso do arquivo - e provavelmente por acidente. Trata-se definitivamente de uma situao que queremos evitar!

Figura 1.2. O problema para evitar

2

Conceitos Fundamentais

A Soluo Lock-Modify-UnlockMuitos sistemas de controle de verso usam o modelo lock-modify-unlock (travar-modificar-destravar) para resolver o problema de vrios autores destrurem o trabalho uns dos outros. Neste modelo, o repositrio permite que apenas uma pessoa de cada vez altere o arquivo. Essa poltica de exclusividade gerenciada usando locks (travas). Harry precisa travar (lock) um arquivo antes que possa fazer alteraes nele. Se Harry tiver travado o arquivo, ento Sally no poder trav-lo tambm, e portanto, no poder fazer nenhuma alterao nele. Tudo que ela pode fazer ler o arquivo, e esperar que Harry termine suas alteraes e destrave (unlock) o arquivo. Depois que Harry destravar o arquivo, Sally poder ter a sua chance de travar e editar o arquivo. A figura Figura 1.3, A soluo lock-modify-unlock demonstra essa soluo simples.

Figura 1.3. A soluo lock-modify-unlock

O problema com o modelo lock-modify-unlock que ele um pouco restritivo, muitas vezes se torna um obstculo para os usurios: Locks podem causar problemas administrativos. Algumas vezes Harry ir travar o arquivo e se esquecer disso. Entretanto, devido a Sally ainda estar esperando para editar o arquivo, suas mos esto atadas. E Harry ento sai de frias. Agora Sally tem que pedir a um administrador para destravar o arquivo que Harry travou. Essa situao acaba causando uma srie de atrasos desnecessrios e perda de tempo.

3

Conceitos Fundamentais

Locking pode causar serializao desnecessria. E se Harry est editando o comeo de um arquivo de texto, e Sally simplesmente quer editar o final do mesmo arquivo? Essas mudanas no vo se sobrepor afinal. Eles podem facilmente editar o arquivo simultaneamente, sem grandes danos, assumindo que as alteraes sero apropriadamente fundidas depois. No h necessidade de se trabalhar em turnos nessa situao. Locking pode criar falsa sensao de segurana. Suponha que Harry trave e edite o arquivo A, enquanto Sally simultaneamente trava e edita o arquivo B. Mas e se A e B dependem um do outro, e se as mudanas feitas em cada so semanticamente incompatveis? Subitamente A e B no funcionam juntos mais. O sistema de locking no foi suficientemente poderoso para prevenir o problema - ainda que de certa forma tenha proporcionado uma falsa sensao de segurana. fcil para Harry e Sally imaginar que travando os arquivos, cada um est comeando uma tarefa isolada segura, e assim no se preocupar em discutir as incompatibilidades que viro com suas mudanas. Locking freqentemente se torna um substituto para a comunicao real.

A Soluo Copy-Modify-MergeO Subversion, CVS, e muitos outros sistemas de controle de verso usam um modelo de copy-modify-merge (copiar-modificar-fundir) como uma alternativa ao locking. Nesse modelo, cada usurio se conecta ao repositrio do projeto e cria uma cpia de trabalho pessoal (personal working copy, ou cpia local) - um espelho local dos arquivos e diretrios do repositrio. Os usurios ento trabalham simultaneamente e independentemente, modificando suas cpias privadas. Finalmente, as cpias privadas so fundidas (merged) numa nova verso final. O sistema de controle de verso freqentemente ajuda com a fuso, mas, no final, a interveno humana a nica capaz de garantir que as mudanas foram realizadas de forma correta. Aqui vai um exemplo. Digamos que Harry e Sally criaram cada um a sua cpia de trabalho de um mesmo projeto, copiadas do repositrio. Eles trabalharam simultaneamente fazendo alteraes no arquivo A nas suas prprias cpias. Sally salva suas alteraes no repositrio primeiro. Quando Harry tentar salvar suas alteraes mais tarde, o repositrio vai inform-lo que seu arquivo A est desatualizado (out-of-date). Em outras palavras, o arquivo A do repositrio foi de alguma forma alterado desde a ltima vez que ele foi copiado. Ento Harry pede a seu programa cliente para ajud-lo a fundir (merge) todas as alteraes do repositrio na sua cpia de trabalho do arquivo A. Provavelmente, as mudanas de Sally no se sobrepem com as suas prprias; ento, uma vez que ele tiver ambos os conjuntos de alteraes integrados, ele salva sua cpia de trabalho de volta no repositrio. As figuras Figura 1.4, A soluo copy-modify-merge e Figura 1.5, A soluo copy-modify-merge (continuando) mostram este processo.

Figura 1.4. A soluo copy-modify-merge

4

Conceitos Fundamentais

Figura 1.5. A soluo copy-modify-merge (continuando)

5

Conceitos Fundamentais

Mas e se as alteraes de Sally sobrescreverem as de Harry? E ento? Essa situao chamada de conflito , e normalmente no um problema. Quando Harry pedir a seu cliente para fundir as ltimas alteraes do repositrio em sua cpia de trabalho local, sua cpia do arquivo A estar de alguma forma sinalizada como estando numa situao de conflito: ele ser capaz de ver ambos os conjuntos de alteraes conflitantes e manualmente escolher entre elas. Note que o software no tem como resolver os conflitos automaticamente; apenas pessoas so capazes de compreender e fazer as escolhas inteligentes. Uma vez que Harry tenha resolvido manualmente as alteraes conflitantes - talvez depois de uma conversa com Sally - ele poder tranqilamente salvar o arquivo fundido no repositrio. O modelo copy-modify-merge pode soar um pouco catico, mas, na prtica, ele funciona de forma bastante suave. Os usurios podem trabalhar em paralelo, nunca esperando uns pelos outros. Quando eles trabalham nos mesmos arquivos, verifica-se que a maioria de suas alteraes simultneas no se sobrepe afinal; conflitos no so muito freqentes. E a quantidade de tempo que eles levam para resolver os conflitos geralmente muito menor que o tempo perdido no sistema de locking. No fim, tudo se reduz a um fator crtico: a comunicao entre os usurios. Quando os usurios se comunicam mal, tanto conflitos sintticos como semnticos aumentam. Nenhum sistema pode forar os usurios a se comunicarem perfeitamente, e nenhum sistema pode detectar conflitos semnticos. Portanto, no h como confiar nessa falsa sensao de segurana de que o sistema de locking vai prevenir conflitos; na prtica, o lock parece inibir a produtividade mais do que qualquer outra coisa. Quando Lock Necessrio

6

Conceitos Fundamentais

Enquanto o modelo lock-modify-unlock geralmente considerado prejudicial colaborao, ainda h momentos em que ele apropriado. O modelo copy-modify-merge baseado no pressuposto de que os arquivos so contextualmente fundveis: isto , que os arquivos no repositrio sejam majoritariamente texto plano (como cdigo-fonte). Mas para arquivos com formatos binrios, como os de imagens ou som, freqentemente impossvel fundir as mudanas conflitantes. Nessas situaes, realmente necessrio que o arquivo seja alterado por um usurio de cada vez. Sem um acesso serializado, algum acabar perdendo tempo em mudanas que no final sero descartadas. Enquanto o Subversion primariamente um sistema copy-modify-merge, ele ainda reconhece a necessidade ocasional de locking em algum arquivo e assim fornece mecanismos para isso. Este recurso ser discutido mais tarde neste livro, em Travamento.

Subversion em AoChegou a hora de passar do abstrato para o concreto. Nesta seo, ns mostraremos exemplos reais de utilizao do Subversion

URLs do Repositrio SubversionAo longo de todo este livro, o Subversion utiliza URLs para identificar arquivos e diretrios versionados nos repositrios. Na maior parte, essas URLs usam a sintaxe padro, permitindo nomes de servidor e nmeros de porta serem especificados como parte da URL: $ svn checkout http://svn.example.com:9834/repos ... Mas existem algumas nuances no manuseio de URLs pelo Subversion que so notveis. Por exemplo, URLs contendo o mtodo de acesso file:// (usado para repositrios locais) precisam, de acordo com a conveno, ter como nome do servidor localhost ou nenhum nome de servidor: $ svn checkout file:///path/to/repos ... $ svn checkout file://localhost/path/to/repos ... Alm disso, usurios do esquema file:// em plataformas Windows precisaro utilizar um padro de sintaxe no-oficial para acessar repositrios que esto na mesma mquina, mas em um drive diferente do atual drive de trabalho. Qualquer uma das seguintes sintaxes de URLs funcionaro, sendo X o drive onde o repositrio reside: C:\> svn checkout file:///X:/path/to/repos ... C:\> svn checkout "file:///X|/path/to/repos" ... Na segunda sintaxe, voc precisa colocar a URL entre aspas de modo que o caractere de barra vertical no seja interpretado como um pipe. Alm disso, note que a URL utiliza barras normais, enquanto no Windows os caminhos (no URLs) utilizam barra invertida.

7

Conceitos Fundamentais

URLs file:// do Subversion no podem ser utilizadas em um browser comum da mesma forma que URLs file:// tpicas podem. Quando voc tenta ver uma URL file:// num web browser comum, ele l e mostra o contedo do local examinando o sistema de arquivos diretamente. Entretanto, os recursos do Subversion existem em um sistema de arquivos virtual (veja Camada de Repositrio), e o seu browser no vai saber como interagir com este sistema de arquivos. Por ltimo, convm notar que o cliente Subversion vai automaticamente codificar as URLs conforme necessrio, de forma semelhante a um browser. Por exemplo, se a URL contiver espaos ou algum caractere no-ASCII: $ svn checkout "http://host/path with space/project/espaa" ...ento o Subversion ir aplicar "escape" aos caracteres inseguros e se comportar como se voc tivesse digitado: $ svn checkout http://host/path%20with%20space/project/espa%C3%B1a Se a URL contiver espaos, certifique-se de coloc-la entre aspas, de forma que o seu shell trate-a inteiramente como um nico argumento do programa svn.

Cpias de Trabalho, ou Cpias LocaisVoc j leu sobre as cpias de trabalho; agora vamos demonstrar como o cliente do Subversion as cria e usa. Uma cpia de trabalho do Subversion uma rvore de diretrios comum no seu sistema de arquivos local, contendo uma coleo de arquivos. Voc pode editar esses arquivos conforme desejar, e se eles so arquivos de cdigo fonte, voc pode compilar o seu programa a partir deles da maneira usual. Sua cpia de local sua rea de trabalho privada: O Subversion jamais incorporar as mudanas de terceiros ou tornar as suas prprias alteraes disponveis para os outros, at que voc explicitamente o diga para fazer isso. Voc pode ter mltiplas cpias de trabalho do o mesmo projeto. Aps voc ter feito algumas alteraes nos arquivos de sua cpia de trabalho e verificado que elas funcionam corretamente, o Subversion lhe disponibiliza comandos para publicar (commit) suas alteraes para as outras pessoas que esto trabalhando com voc no mesmo projeto (gravando no repositrio). Se outras pessoas publicarem alteraes, o Subversion disponibiliza comandos para fundir (merge) essas alteraes em sua cpia de trabalho (lendo do repositrio). Uma cpia de trabalho tambm contm alguns arquivos extras, criados e mantidos pelo Subversion, para ajud-lo a executar esse comandos. Em particular, cada diretrio em sua cpia local contm um subdiretrio chamado .svn, tambm conhecido como o diretrio administrativo da cpia de local. Os arquivos em cada diretrio administrativo ajudam o Subversion a reconhecer quais arquivos possuem alteraes no-publicadas, e quais esto desatualizados em relao ao trabalho dos outros. Um tpico repositrio Subversion freqentemente detm os arquivos (ou cdigo fonte) para vrios projetos, geralmente, cada projeto um subdiretrio na rvore de arquivos do repositrio. Desse modo, uma cpia de trabalho de um normalmente corresponder a uma sub-rvore particular do repositrio. Por exemplo, suponha que voc tenha um repositrio que contenha dois projetos de software, paint e calc. Cada projeto reside em seu prprio subdiretrio, como mostrado 8

Conceitos Fundamentais

em Figura 1.6, O Sistema de Arquivos do Repositrio.

Figura 1.6. O Sistema de Arquivos do Repositrio

Para obter uma cpia local, voc deve fazer check out de alguma sub-rvore do repositrio. (O termo check out pode soar como algo que tem a ver com locking ou com reserva de recursos, o que no verdade; ele simplesmente cria uma cpia privada do projeto para voc.) Por exemplo, se voc fizer check out de /calc, voc receber uma cpia de trabalho como esta: $ svn checkout http://svn.example.com/repos/calc A calc/Makefile A calc/integer.c A calc/button.c Checked out revision 56. $ ls -A calc Makefile integer.c button.c .svn/

A lista de letras A na margem esquerda indica que o Subversion est adicionando um certo nmero de itens sua cpia de trabalho. Voc tem agora uma cpia pessoal do diretrio /calc do repositrio, com uma entrada adicional - .svn - a qual detm as informaes extras que o Subversion precisa, conforme mencionado anteriormente. Suponha que voc faa alteraes no arquivo button.c. Visto que o diretrio .svn se lembra da data de modificao e contedo do arquivo original, o Subversion tem como saber que voc modificou o arquivo. Entretanto o Subversion no torna as suas alteraes 9

Conceitos Fundamentais

pblicas at voc explicitamente lhe dizer para fazer isto. O ato de publicar as suas alteraes conhecido como committing (ou checking in) no repositrio. Para publicar as suas alteraes para os outros, voc deve usar o comando commit do Subversion. $ svn commit button.c -m "Fixed a typo in button.c." Sending button.c Transmitting file data . Committed revision 57. Agora as suas alteraes no arquivo button.c foram submetidas no repositrio, com uma nota descrevendo as suas alteraes (especificamente voc corrigiu um erro de digitao). Se outros usurios fizerem check out de /calc, eles vero suas alteraes na ltima verso do arquivo. Suponha que voc tenha um colaborador, Sally, que tenha feito check out de /calc ao mesmo tempo que voc. Quando voc publicar suas alteraes em button.c, a cpia de trabalho de Sally ser deixada intacta; o Subversion somente modifica as cpias locais quando o usurio requisita. Para atualizar o seu projeto, Sally pede ao Subversion para realizar um update na cpia de trabalho dela, usando o comando update do Subversion. Isto ir incorporar as suas alteraes na cpia local dela, bem como as alteraes de todos que tenham feito um commit desde que ela fez check out. $ pwd /home/sally/calc $ ls -A .svn/ Makefile integer.c button.c $ svn update U button.c Updated to revision 57. A sada do comando svn update indica que o Subversion atualizou o contedo de button.c. Note que Sally no precisou especificar quais arquivos seriam atualizados; o Subversion usou as informaes no diretrio .svn, e mais algumas no repositrio, para decidir quais arquivos precisariam ser atualizados. URLs do Repositrio Os repositrios do Subversion podem ser acessados atravs de diversos mtodos em um disco local, atravs de vrios protocolos de rede, dependendo de como o administrador configurou as coisas para voc. Qualquer local no repositrio, entretanto, sempre uma URL. A Tabela Tabela 1.1, URLs de Acesso ao Repositrio descreve como diferentes esquemas de URLs mapeiam para os mtodos de acesso disponveis.

Tabela 1.1. URLs de Acesso ao RepositrioEsquema file:/// http:// Mtodo de Acesso acesso direto ao repositrio (em um disco local). acesso via protocolo WebDAV em um servidor Apache especialmente configurado.

10

Conceitos Fundamentais

Esquema https:// svn:// svn+ssh://

Mtodo de Acesso mesmo que http://, mas com encriptao SSL. acesso via protocolo prprio em um servidor svnserve. mesmo que svn://, mas atravs de um tnel SSH.

Para obter mais informaes sobre como o Subversion analisa as URLs, veja URLs do Repositrio Subversion. Para obter mais informaes sobre os diferentes tipos de servidores de rede disponveis para Subversion, veja Captulo 6, Configurao do Servidor.

RevisesUma operao svn commit publica as alteraes feitas em qualquer nmero de arquivos o diretrios como uma nica transao atmica. Em sua cpia de trabalho, voc pode alterar o contedo de arquivos; criar, deletar, renomear e copiar arquivos e diretrios; e ento submeter um conjunto completo de alteraes em uma transao atmica. Por transao atmica, nos entendemos simplesmente isto: Ou so efetivadas todas as alteraes no repositrio, ou nenhuma delas. O Subversion tenta manter esta atomicidade em face de quebras ou travamentos do programa ou do sistema, problemas de rede ou outras aes de usurios. Cada vez que o repositrio aceita um commit, isto cria um novo estado na rvore de arquivos, chamado reviso. Cada reviso assinalada com um nico nmero natural, incrementado de um em relao reviso anterior. A reviso inicial de um repositrio recm criado numerada com zero, e consiste em nada alm de um diretrio raiz vazio. A figura Figura 1.7, O Repositrio ilustra uma forma simples para visualizar o repositrio. Imagine um array de nmeros de revises, iniciando em zero, alongando-se da esquerda para a direita. Cada nmero de reviso tem uma rvore de arquivos pendurada abaixo dela, e cada rvore um snapshot da forma como o repositrio podia ser visto aps um commit.

Figura 1.7. O Repositrio

11

Conceitos Fundamentais

Nmeros de Reviso Globais Ao contrrios de outros sistemas de controle de verso, os nmeros de reviso do Subversion se aplicam rvore inteira, no a arquivos individuais. Cada nmero de reviso refere-se a uma rvore inteira, um estado particular do repositrio aps determinadas alteraes serem submetidas. Uma outra forma de pensar a respeito imaginar que a reviso N representa o estado do sistema de arquivos do repositrio aps o N-simo commit. Quando os usurios do Subversion falam sobre a reviso nmero 5 do arquivo foo.c, eles realmente entendem o foo.c que aparece na reviso 5. Note que em geral, revises N e M de um arquivo podem no ser necessariamente diferentes! Muitos outros sistemas de controle de verso usam nmero de reviso por arquivo, ento este conceito pode parecer no usual primeira vista. (Usurios do CVS podem querer ver Apndice B, Subversion para Usurios de CVS para mais detalhes.)

importante notar que nem sempre as cpias de trabalho correspondem a uma nica reviso do repositrio; elas podem conter arquivos de vrias revises diferentes. Por exemplo, suponha que voc faa checkout de uma cpia de trabalho cuja reviso mais recente seja 4: calc/Makefile:4 integer.c:4 button.c:4 Neste momento, este diretrio de trabalho corresponde exatamente reviso nmero 4 no repositrio. Contudo, suponha que voc faa uma alterao no arquivo button.c, e publique essa alterao. Assumindo que nenhum outro commit tenha sido feito, o seu commit ir criar a reviso 5 no repositrio, e sua cpia de trabalho agora ir parecer com isto: calc/Makefile:4 integer.c:4 button.c:5 12

Conceitos Fundamentais

Suponha que neste ponto, Sally publique uma alterao no arquivo integer.c, criando a reviso 6. Se voc usar o comando svn update para atualizar a sua cpia de trabalho, ento ela ir parecer com isto: calc/Makefile:6 integer.c:6 button.c:6 A alterao de Sally no arquivo integer.c ir aparecer em sua cpia de trabalho, e a sua alterao no arquivo button.c ainda estar presente. Neste exemplo, o texto do arquivo Makefile idntico nas revises 4, 5, e 6, mas o Subversion ir marcar a sua cpia do arquivo Makefile com a reviso 6 para indicar que a mesma a corrente. Ento, depois de voc fazer uma atualizao completa na sua cpia de trabalho, ela geralmente corresponder exatamente a uma reviso do repositrio.

Como as Cpias de Trabalho Acompanham o RepositrioPara cada arquivo em um diretrio de trabalho, o Subversion registra duas peas de informaes essenciais na rea administrativa .svn/: em qual reviso o seu arquivo local baseado (isto chamado de reviso local do arquivo), e a data e a hora da ltima vez que a cpia local foi atualizada a partir do repositrio. Dadas estas informaes, conversando com o repositrio, o Subversion pode dizer em qual dos seguintes quatro estados um arquivo local est: No-Modificado, e corrente O arquivo no foi modificado no diretrio local, e nenhuma alterao foi publicada no repositrio desde a reviso corrente. O comando svn commit no arquivo no far nada, e um comando svn update tambm no.. Localmente alterado, e corrente O arquivo foi alterado no diretrio local, mas nenhuma alterao foi publicada no repositrio desde o ltimo update. existem alteraes locais que ainda no foram publicadas no repositrio, assim o comando svn commit no arquivo resultar na publicao dessas alteraes, e um comando svn update no far nada. No-Modificado, e desatualizado O arquivo no foi alterado no diretrio local, mas foi alterado no repositrio. O arquivo pode ser eventualmente atualizado, para sincroniz-lo com a ltima reviso pblica. O comando svn commit no arquivo no ir fazer nada, mas o comando svn update ir trazer as ltimas alteraes para a sua cpia local. Localmente Modificado, e desatualizado O arquivo foi alterado tanto no diretrio loca quanto no repositrio. O comando svn commit no arquivo ir falhar com o erro out-of-date (desatualizado). O arquivo deve ser atualizado primeiro; o comando svn update vai tentar fundir as alteraes do repositrio com as locais. Se o Subversion no conseguir completar a fuso de uma forma plausvel automaticamente, ele deixar para o usurio resolver o conflito. Isto pode soar como muito para acompanhar, mas o comando svn status mostrar para voc o estado de qualquer item em seu diretrio local. Para maiores informaes sobre este comando, veja Obtendo uma viso geral de suas alteraes. 13

Conceitos Fundamentais

Revises Locais MistasComo um princpio geral, o Subversion tenta ser to flexvel quanto possvel. Um tipo especial de flexibilidade a capacidade de ter uma cpia local contendo arquivos e diretrios com uma mistura de diferentes revises. Infelizmente esta flexibilidade tende a confundir inmeros novos usurios. Se o exemplo anterior mostrando revises mistas deixou voc perplexo, aqui est um exemplo mostrando tanto a razo pela qual o funcionalidade existe, quanto como fazer para us-la.

Atualizaes e Submisses so SeparadosUma das regras fundamentais do Subversion que uma ao de push no causa um pull, e vice versa. S porque voc est pronto para publicar novas alteraes no repositrio no significa que voc est pronto para receber as alteraes de outras pessoas. E se voc tiver novas alteraes em curso, ento o comando svn update deveria graciosamente fundir as alteraes no repositrio com as suas prprias, ao invs de forar voc a public-las. O principal efeito colateral dessa regra significa que uma cpia local tem que fazer uma escriturao extra para acompanhar revises mistas, bem como ser tolerante a misturas. Isso fica mais complicado pelo fato de os diretrios tambm serem versionados. Por exemplo, suponha que voc tenha uma cpia local inteiramente na reviso 10. Voc edita o arquivo foo.html e ento realiza um comando svn commit, o qual cria a reviso 15 no repositrio. Aps o commit acontecer, muitos novos usurios poderiam esperar que a cpia local estivesse na reviso 15, mas este no o caso! Qualquer nmero de alteraes poderia ter acontecido no repositrio entre as revises 10 e 15. O cliente nada sabe sobre essas alteraes no repositrio, pois voc ainda no executou o comando svn update , e o comando svn commit no baixou as novas alteraes no repositrio. Se por outro lado, o comando svn commit tivesse feito o download das novas alteraes automaticamente, ento seria possvel que a cpia local inteira estivesse na reviso 15 - mas ento ns teramos quebrado a regra fundamental onde push e pull permanecem como aes separadas. Portanto a nica coisa segura que o cliente Subversion pode fazer marcar o arquivo - foo.html com a reviso 15. O restante da cpia local permanece na reviso 10. Somente executando o comando svn update as alteraes mais recentes no repositrio sero baixadas, o a cpia local inteira ser marcada com a reviso 15.

Revises misturadas so normaisO fato , cada vez que voc executar um comando svn commit, sua cpia local acabar tendo uma mistura de revises. As coisas que voc acabou de publicar so marcadas com um nmero de reviso maior que todo o resto. Aps vrias submisses (sem atualizaes entre eles) sua cpia local ir conter uma completa mistura de revises. Mesmo que voc seja a nica pessoa utilizando o repositrio, voc ainda ver este fenmeno. Para analisar a sua mistura de revises use o comando svn status --verbose (veja Obtendo uma viso geral de suas alteraes para maiores informaes.) Freqentemente, os novos usurios nem tomam conscincia de que suas cpias locais contm revises mistas. Isso pode ser confuso, pois muitos comandos no cliente so sensveis s revises que eles esto examinando. Por exemplo, o comando svn log usado para mostrar o histrico de alteraes em um arquivo ou diretrio (veja Gerando uma lista de alteraes histricas). Quando o usurio invoca este comando em um objeto da cpia local, ele espera ver o histrico inteiro do objeto. Mas se a reviso local do objeto muito velha (muitas vezes porque o comando svn update no foi executado por um longo tempo), ento o histrico da verso antiga do objeto que ser mostrado.

Revises mistas so teisSe o seu projeto for suficientemente complexo, voc ir descobrir que algumas vezes interessante forar um backdate (ou, atualizar para uma reviso mais antiga que a que voc tem) de partes de sua cpia local para revises anteriores; voc ir aprender como fazer 14

Conceitos Fundamentais

isso em Captulo 2, Uso Bsico. Talvez voc queira testar uma verso anterior de um submdulo contido em um subdiretrio, ou talvez queira descobrir quando um bug apareceu pela primeira vez eu arquivo especfico. Este o aspecto de mquina do tempo de um sistema de controle de verso - a funcionalidade que te permite mover qualquer parte de sua cpia local para frente ou para trs na histria.

Revises mistas tm limitaesApesar de voc poder fazer uso de revises mistas em seu ambiente local, esta flexibilidade tem limitaes. Primeiramente, voc no pode publicar a deleo de um arquivo ou diretrio que no esteja completamente atualizado. Se uma verso mais nova do item existe no repositrio, sua tentativa de deleo ser rejeitada, para prevenir que voc acidentalmente destrua alteraes que voc ainda no viu. Em segundo lugar, voc no pode publicar alteraes em metadados de diretrios a menos que ele esteja completamente atualizado. Voc ir aprender a anexar propriedades aos itens em Captulo 3, Tpicos Avanados. Uma reviso em um diretrio local define um conjunto especfico de entradas e propriedades, e assim, publicar alteraes em propriedades de um diretrio desatualizado pode destruir propriedades que voc ainda no viu.

SumrioNs abordamos uma srie de conceitos fundamentais do Subversion neste captulo: Ns introduzimos as noes de repositrio central, cpia local do cliente, e o array de rvores de revises. Vimos alguns exemplos simples de como dois colaboradores podem utilizar o Subversion para publicar e receber as alteraes um do outro, utilizando o modelo copy-modify-merge. Ns falamos um pouco sobre a maneira como o Subversion acompanha e g