Vous êtes sur la page 1sur 29

Tutorial - Subversion

Andr Atanasio M. Almeida e Maio/2008

Conte do u
1 Introduo ca 1.1 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 1.2 Sobre o tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Viso geral a 2.1 Arquitetura e componentes . . . . . . . . . . . . . . . . . . . . 2.2 Modelo de versionamento . . . . . . . . . . . . . . . . . . . . . 2.3 Revises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 3 Gerenciando repositrios o 3.1 Ferramentas . . . . . . . . . . . . . . . 3.1.1 svnadmin . . . . . . . . . . . . 3.1.2 svnlook . . . . . . . . . . . . . 3.2 Disponibilizando o repositrio na rede . o 3.2.1 Servidor personalizado . . . . . 3.2.2 Tunelamento SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 4 6 6 7 8 10 10 11 12 13 13 14 16 17 18 19 20 20 22 23 23 24 24

4 Fazendo uso do cliente 4.1 Criando uma cpia de trabalho . . . . . o 4.2 Atualizando sua cpia de trabalho . . . . o 4.3 Fazendo alteraes na cpia de trabalho co o 4.4 Analisando suas alteraes . . . . . . . . co 4.4.1 svn status . . . . . . . . . . . . . 4.4.2 svn di . . . . . . . . . . . . . . . 4.4.3 svn revert . . . . . . . . . . . . . 4.5 Resolvendo conitos . . . . . . . . . . . 4.6 Submetendo as alteraes . . . . . . . . co 4.7 Analisando a evoluo . . . . . . . . . . ca 1

4.7.1 svn log . . . . . . . . . . . . . . 4.7.2 svn cat . . . . . . . . . . . . . . 4.7.3 svn list . . . . . . . . . . . . . . 4.8 Adicionando um projeto no repositrio o 4.9 Concluindo operaes interrompidas . . co 4.10 Outros comandos . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

24 25 25 25 26 27

Cap tulo 1 Introduo ca


Subversion [2, 3] um sistema open-source para controle de verso. Ou e a seja, gerencia arquivos e diretrios ao longo do tempo. Para executar tal o tarefa, Subversion faz uso de um repositrio central, onde so inseridas as o a rvores de diretrios que se deseja gerenciar. Tal repositrio assemelha-se a a o o um servidor de arquivos, exceto o fato de lembrar toda alterao feita nos ca arquivos e diretrios. Um sistema de controle de verso permite a recuperao o a ca de verses antigas de dados ou a anlise da histria de como os dados foram o a o mudando ao longo do tempo. Subversion foi desenvolvido com o objetivo de substituir o CVS [1]. Procurou-se manter o seu funcionamento o mais prximo do que o CVS, o e mas buscando corrigir as falhas e limitaes do antigo sistema de controle de co verso. a Caracter sticas do Subversion: Versionamento de diretrios: implementado um sistema de arquivos o e versionado que registra alteraes `s rvores de diretrios completas ao co a a o longo do tempo. No Subversion so gerenciados no s as variaes a a o co no contedo dos arquivos mas tambm qualquer variao na estrutura u e ca dos diretrios. Lembrando que no CVS s h controle de verso nos o o a a arquivos. Histrico verdadeiro: poss o e vel inform-lo de operaes como cpia ou a co o renomeao de arquivos, assim ele consegue distinguir, por exemplo, ca que dois arquivos com mesmo nome tm histrias completamente difere o entes. Ou quando renomeia-se um arquivo, ele mantm o histrico e o inicial. 3

Commits atmicos: quando feito um commit, ou vo todas as modio e a caes ou no vai nenhuma. Isso evita inconsistncias no repositrio. co a e o Por exemplo, quando faz-se controle de verso em cdigo fonte de softa o ware, evita que um dos desenvolvedores submeta ao repositrio apenas o parte de suas modicaes, o que provavelmente geraria uma verso co a inconsistente do software. Metadados versionados: poss associar um conjunto de propriedades e vel (pares chave-valor) a cada objeto gerenciado (arquivos ou diretrios). o Acesso ex vel: permite acessar o repositrio de diversas formas. Atualo mente poss e vel, por exemplo, acessar via SSH ou HTTP, mas seus mecanismos de acesso foram implementados de forma a permitir que facilmente se implemente novos servidores/clientes para acesso ao repositrio. o Tratamento de dados consistente: expressa diferenas usando um algoc ritmo de diferenciao binria que trabalha de forma idntica tanto em ca a e arquivos binrios como em textos. a

1.1

Instalao ca

Subversion foi implementado sob uma camada portvel chamada APR (do a ingls, Apache Portable Runtime). Isso signica que pode rodar em qualquer e sistema operacional que o servidor Apache rode, tal como: Windows, Linux, todas variaes de BSD, Mac OS X, Netware, etc. co A maneira mais fcil de instalar Subversion atravs dos pacotes de a e e binrios, que podem ser obtidos no s a tio ocial [2]. Alternativamente, e poss vel tambm instalar a partir do cdigo fonte, seguindo as instrues e o co presentes no arquivo INSTALL.

1.2

Sobre o tutorial

No restante do tutorial apresentaremos uma viso geral do Subversion (Caa p tulo 2), contendo informaes como uma listagem comentada dos principais co componentes do sistema e uma gura que ilustra a relao destes. Assim ca como uma explicao sobre revises, conceito de extrema importncia no ca o a Subversion. 4

Informaes acerca da administrao de repositrios, assim como da disponico ca o bilio do mesmo atravs da rede, so apresentadas no Cap ca e a tulo 3. Finalmente, no Cap tulo 4 apresentaremos como trabalhar com Subversion do ponto de vista de um usurio comum, que quer apenas fazer uso de um a repositrio j criado para gerenciar os seus arquivos e/ou projetos. o a

Cap tulo 2 Viso geral a


Neste cap tulo iremos apresentar uma viso geral acerca da estrutura e funa cionamento do Subversion.

2.1

Arquitetura e componentes

A seguir apresentamos uma lista dos principais componentes do Subversion juntamente com suas funcionalidades. svn: cliente em linha de comando. svnlook: ferramenta para inspeo de repositrios. ca o svnadmin: ferramenta para criao, ajuste e reparo de repositrios. ca o svndumplter: ferramenta para ltragem em arquivos de dump. Pode ser utilizada para reestrurar um repositrio. o o mod dav svn: plug-in para servidor Apache usado para tornar repositrios dispon veis em rede atravs do protocolo HTTP. e svnserve: servidor standalone, executvel como um processo deamon ou a uma outra forma de tornar o repositrio invocvel atravs de SSH. E a e o dispon em rede. vel A Figura 2.1 apresenta a arquitetura do Subversion.

Figura 2.1: Arquitetura do Subversion

2.2

Modelo de versionamento

Assim como o CVS, Subversion usa um modelo copy-modify-merge. Neste modelo, cada usurio acessa o repositrio e cria sua prpria cpia de traa o o o balho de objetos gerenciados (arquivos e diretrios) pelo sistema de controle o de verso. Usurios ento trabalham em paralelo, modicando suas cpias a a a o privadas. Ao nal das modicaes, as cpias privadas so colapsadas aos co o a objetos correntes no repositrios e geram uma nova e nal verso do objeto. o a Os sistemas de controle de verso freqentemente oferecem ferramentas de a u aux a esta tarefas, entretando as decises em caso de conito recaem sob lio o 7

o usurio. a O modelo copy-modify-merge pode parecer um pouco catico se como parado com modelos como lock-modify-unlock (onde no existem situaes de a co conitos), mas na prtica funciona bem. Usurios podem trabalhar em para a alelo, nunca tendo de esperar por outro e quando trabalham em um mesmo arquivo, a grande maioria das modicaes no possuem sobreposio. Conco a ca itos so raros e o tempo que se gasta resolvendo tais conitos muito menor a e que o tempo perdido em esperas por unlocks.

2.3

Revises o

Toda vez que um usurio realiza um commit de suas alteraes, criado um a co e novo estado da rvore do sistema de arquivos. A tal estado d-se o nome a a de reviso. Em outras palavras, uma reviso refere-se a uma dada verso a a a da rvore do sistema de arquivos gerenciada. Cada reviso associada a a a e um unico nmero natural, que maior que o nmero da reviso anterior. u e u a Quando um repositrio criado, ou seja ainda vazio, recebe o nmero de o e u reviso 0. a Nos utilitrios do Subversion, tal como o svn, poss referenciar rea e vel vises atravs da opo --revision (-r) passando uma unica reviso (svn o e ca a SUBCOMANDO --revision REV) ou, ainda, passar um intervalo de revises o demitando por duas delas (svn SUBCOMANDO --revision REV1:REV2). E poss referenciar uma reviso pelo nmero, palavra chave ou data. vel a u So aceitas as seguintes palavras chave: a HEAD: ultima reviso no repositrio. Normalmente, quando no se faz a o a uma referncia a uma reviso, esta a utilizada. e a e BASE: reviso intacta do usurio. a a COMMITED: ultima reviso na qual um item foi alterado. a PREV: reviso anterior ` ultima reviso na qual o item foi alterado, ou a a a seja, COM M IT ED 1. E importante observar que cada cpia de trabalho contm um subdiretrio o e o administrativo chamado .svn. Para cada arquivo em um diretrio, mantida o e uma cpia nesta rea administrativa. Esta cpia mantida inalterada, tal o a o e qual chegou pelo ultimo update. Referenciamos tal cpia como cpia intacta. o o 8

Para referenciar uma reviso atravs de datas utiliza-se chaves {}. A a e reviso associada a data ser a mais recente cuja data seja inferior ou igual a a a passada. Observe que, quando a hora no determinada, a 00h a utilizada a e e e quando o dia no determinado, o dia atual utilizado. A seguir alguns a e e exemplos vlidos de datas: a {2008-05-04} {13:00} {13:00:00.200000} {"2008-05-04 13:00"} {2008-05-04T13:00} {20080504T1300}

Cap tulo 3 Gerenciando repositrios o


Neste cap tulo abordaremos essencialmente as ferramentas administrativas svnadmin e svnlook, alm de mostrar como congurar e executar o svnserve, e que permite o acesso dos clientes ao repositrio atravs da rede. o e Antes de falar dos utilitrios em si, mostraremos como criar um repositrio a o e apresentaremos os cuidados que devem ser tomados na criao para se evica tar problemas futuros. Para criar um repositrio utilizamos a ferramenta svnadmin com o subo comando create da seguinte forma. > svnadmin create DIRETORIO Isto criar um novo repositrio na pasta caminho/para/repositrio. Saliena o o tamos que a pasta DIRETORIO deve existir e estar vazia. Alertamos que repositrios devem ser criados em pastas do sistema de arquivos local, nunca o utilize um sistema de arquivos remoto, tal como NFS, AFS ou Windows SMB. Este um requisito do Berkeley DB (banco de dados utilizado pelo e Subversion), que necessita de um sistema de arquivos que implemente uma semntica de locking padro POSIX estrito, alm da habilidade de mapear a a e arquivos diretamente na memria do processo. Caso este requisito no seja o a cumprido, os resultados so imprevis a veis. Erros misteriosos podem ocorrer ou pode-se levar meses antes de descobrir que o repositrio est corrompido. o a

3.1

Ferramentas

Diversas so as ferramentas disponibilizadas pelo Subversion para gerencia amento, mas neste tutorial iremos nos restringir a falar sobre svnadmin e 10

svnlook, pois elas fornecem as funcionalidades que so utilizadas na grande a maioria das vezes. Sugerimos a consulta ao livro [3] para maiores esclarecimentos.

3.1.1

svnadmin

svnadmin a ferramenta para manipulao de repositrios. Ela permite a e ca o criao e a manuteno deles. As chamadas so normalmente realizadas da ca ca a seguinte forma. > svnadmin SUBCOMANDO REPOSITORIO REPOSITORIO indica a pasta onde encontra-se o repositrio. Utilize o subcomando help para listar os subcomandos dispon veis para o utilitrio a svnadmin. Se quiser ajuda acerca de um subcomando, utilize svnadmin help SUBCOMANDO. A seguir listamos os principais subcomandos e suas funcionalidades. create: cria um novo repositrio. o dump: cria cpia de um conjunto de revises de um repositrio usando um o o o formato de arquivo de dump portvel. a hotcopy: cria uma cpia de um repositrio. o o load: carrega um conjunto de revises em um repositrio. Os dados devem o o estar no mesmo formato do arquivo gerado pelo subcomando dump. lstxns: lista os nomes de transaes no comitadas. co a recover: executa os procedimentos de recuperao em um repositrio. Geralca o mente faz-se necessrio depois de um erro fatal. a rmtxns: remove transaes do repositrio. co o setlog: substitui o valor corrente da propriedade que contm a mensagem e de log de commit. verify: verica o contedo do repositrio. u o

11

3.1.2

svnlook

svnlook uma ferramenta para examinar as revises e transaes em um e o co capaz apenas de fazer leituras nos repositrios, nunca rerepositrio. E o o alizando alteraes. As chamadas so normalmente realizadas da seguinte co a forma. > svnlook SUBCOMANDO REPOSITORIO REPOSITORIO indica a pasta onde encontra-se o repositrio. Quando o no especicada a reviso a consultar, a mais recente (HEAD) utilizada. a e a e Utilize o subcomando help para listar os subcomandos. Se quiser ajuda acerca de um subcomando, utilize svnlook help SUBCOMANDO. A seguir listamos os principais subcomandos e suas funcionalidades. cat: imprime o contedo de um arquivo. u changed: lista os arquivos e diretrios na rvore alterados na ultima reviso. o a a date: imprime a data da ultima reviso. a di: imprime as diferenas em duas revises de um mesmo arquivo. c o dirs-changed: lista os diretrios que foram alterados na ultima reviso. o a history: exibe pontos relevantes na histria de um objeto versionado. o info: imprime as seguintes informaes sobre a rvore: autor, data, hora e co a mensagem de log. Informaes estas relativas a ultima reviso, caso co a nada de diferente seja especicado. log: imprime a mensagem de log da rvore. a propget: imprime o valor de uma propriedade de um objeto. proplist: imprime nomes e valores do conjunto de propriedades de um objeto. tree: imprime a rvore. a youngest: imprime o maior nmero de reviso. u a

12

3.2

Disponibilizando o repositrio na rede o

H diversas maneiras de disponibilizar o repositrio na rede. Neste tutorial a o iremos apenas apresentar duas delas, atravs de um servidor personalizado e e atravs de tunelamento SSH. A grande vantagem do segundo mtodo e e e utilizar as contas do prprio sistema para fazer o controle de acesso, alm de o e manter seus arquivos criptografados durante transmisses na rede. Quando o utilizamos o servidor personalizado necessrio criar um arquivo com pares e a usurio/senha. a

3.2.1

Servidor personalizado

O primeiro passo realizar as conguraes, que so feitas na pasta conf do e co a repositrio. o Abra o arquivo svnserve.conf para edio. Descomente as linhas listadas ca as seguir. ... # anon-access = none # auth-access = write ... # password-db = passwd ... # realm = My Repository ... As propriedades anon-access e auth-access denem os n veis de acesso para usurios annimos e autenticados, respectivamente. So valores aceitos a o a para estas propriedades: none, read e write. A propriedade password-db indica o arquivo de pares usurio/senha. a Abra o arquivo passwd para edio e adicione os pares usurio/senha, ca a conforme necessrio, seguindo o exemplo apresentado no arquivo. a Conclu a etapa de congurao, passamos a inicializao do servidor, da ca ca que realizada com a seguinte chamada. e > svnserve -d -r REPOSITORIO --listen-host IPSERVIDOR REPOSITORIO indica a pasta onde est o repositrio e IPSERVIDOR a o indica o endereo IP da mquina onde reside o repositrio. Para garantir c a o 13

que o servidor ser inicializado quando a mquina for restartada, adicione a a a seguinte linha na crontab. @reboot svnserve -d -r REPOSITORIO --listen-host IPSERVIDOR A URL para a raiz do repositrio car svn://IPSERVIDOR/. o a

3.2.2

Tunelamento SSH

O primeiro passo criar um grupo, sugiro svnusers, e adicionar nele os e usurios que se deseja que tenham acesso ao Subversion. a Crie um usurio para administrar os repositrios, sugiro svnadmin, e a o adicione ele no grupo svnusers. Este deve ser o usurio utilizado para a executar comandos como svnadmin e svnlook. Para todo usurio do grupo svnusers, edite o seu arquivo .bashrc adia cionando a seguinte linha. Isso far com que os arquivos criados atravs dos a e comandos svn, svnadmin e svnlook tenham um n de permisso adequado. vel a umask 002 Altere o dono e o grupo do repositrio respectivamente para root e o svnusers. Em seguida altere as permisses do repositrio de forma a pero o mitir leitura e escrita para o usurio root e membros do grupo svnusers, a assim como remova todas as permisses para os outros usurios. Segue os o a comandos para tal nalidade. chown -R root.svnusers <REPOSITORIO> chmod -R u+wrx,g+wrx,o-wrx <REPOSITORIO> Crie um wrapper para o executvel svnserve, que ca em /usr/bin. Isso a restringir o acesso dos clientes no sistema de arquivos do servidor apenas a para a pasta REPOSITORIO, alm de tornar a URL mais simples. Altere e o nome de svnserve para svnserve.bin. Crie o arquivo svnserve com o contedo apresentado na Figura 3.1. u Altere as permisses de svnserve de forma que apenas o usurio root o a tenha permisso de escrita, mas o restante possa ler e executar. a chmod u+wrx,g+rx-w,o+xr-w svnserve 14

#!/bin/sh # wrap in order to put root in by default # Script implemented by Adrian Robert <arobert@cogsci.ucsd.edu> exec /usr/bin/svnserve.bin -r <REPOSITORIO> $@ Figura 3.1: Wrapper para svnserve. Edite o arquivo conf/svnserve.conf do repositrio. Descomente as o seguintes linhas. ... # anon-access = none # auth-access = write ... # realm = My Repository ... As propriedades anon-access e auth-access denem os n veis de acesso para usurios annimos e autenticados, respectivamente. So valores aceitos a o a para estas propriedades: none, read e write. A URL para acessar a raiz do repositrio car svn+ssh://SERVIDOR. o a No utilitrio svn utilize a opo --username para indicar o usurio, caso os a ca a nomes de usurio sejam distintos no cliente e no servidor. a Quando desejar adicionar um usurio do sistema ao Subversion, adicioa ne-o ao grupo svnusers e adicione a seguinte linha no .bashrc do novo usurio. a umask 002

15

Cap tulo 4 Fazendo uso do cliente


Neste cap tulo apresentaremos como utilizar o cliente do Subversion. Essencialmente nos concentraremos em apresentar as funcionalidades da ferramenta svn, cujas chamadas normalmente so realizadas da seguinte forma. a > svn SUBCOMANDO Salientamos que normalmente, se no for 100% das vezes, as chamadas a ao svn so feitas de dentro de sua cpia de trabalho. Fica subentendido o a o projeto, ou sendo mais preciso, o n da rvore do repositrio, que deve ser vel a o utilizado. A grande maioria dos subcomandos permitem referenciar qualquer reviso a atravs da opo --revision (-r). Quando a reviso no especicada, e ca a a e considera-se a HEAD. Para informar ao servidor o usurio que est acessando o repositrio, a a o utilize a opo --username. O servidor ir solicitar a senha para este usurio. ca a a Caso no se utilize esta opo, o servidor entender que deseja-se acessar o a ca a repositrio utilizando a conta cujo nome de usurio igual `quele usado no o a e a cliente. Quando se utiliza tunelamento SSH para acessar o servidor poss e vel registrar sua mquina cliente na servidora e a partir da no ser mais solica a a itado senha. O procedimento para isso o seguinte. No cliente execute este e comando. ssh-keygen -b 1024 -t rsa

16

Digite ENTER para todos os parmetros solicitados. Isso ir criar suas a a chaves RSA pblica e privada. Copie sua chave pblica .ssh/id rsa.pub u u para sua conta no servidor com o nome .ssh/authorized keys. Utilize o subcomando help para obter a lista de subcomandos. Caso deseje obter maiores informaes sobre um subcomando, utilize svn help co SUBCOMANDO.

4.1

Criando uma cpia de trabalho o

Normalmente, a primeira coisa que um usurio (cliente) do Subversion tem a que fazer criar uma cpia de trabalho da pasta de interesse do repositrio. e o o Para se fazer isso, utiliza-se o subcomando checkout conforme apresentado a seguir. > svn checkout URL DIRNAME A URL indica a forma de acesso, repositrio e pasta. Atualmente esto o a dispon veis 5 tipos de acesso, que so caracterizados na Tabela 4.1. Segue um a exemplo onde o acesso feito atravs de um servidor svnserve na mquina e e a zeus da rede local, a um repositrio em /data/repos e a pasta do projeto o chamado meuprojeto. DIRNAME indica o nome da pasta que ser criada a pela execuo da instruo para abrigar a cpia de trabalho. Em nosso ca ca o exemplo, a pasta a ser criada projetoX. e > svn checkout svn://zeus/data/repos/meuprojeto/trunk projetoX Esquema le:/// http:// https:// svn:// svn+ssh// Mtodo de acesso e acesso direto (disco local) acesso via protocolo WebDAV (servidor Apache) mesmo que anterior, mas com criptograa SSL acesso via protocolo personalizado a um servidor svnserve mesmo que anterior, mas atravs de tunelamento SSH e

Tabela 4.1: Mtodos de acesso ao repositrio, atualmente dispon e o veis no Subversion Atravs do subcomando checkout poss fazer cpia de qualquer ree e vel o viso, no s a mais recente. a a o 17

4.2

Atualizando sua cpia de trabalho o

Quando trabalha-se em um projeto com uma equipe, constantemente ser a necessrio atualizar a sua cpia de trabalho do projeto. Para sincronizar a o sua cpia com a verso mais recente no repositrio, utiliza-se o subcomando o a o update da seguinte forma. > svn update Consideramos que o comando foi invocado quando a pasta corrente era a raiz da cpia de trabalho. Quando termina de executar, o subcomando o update imprime a lista de arquivos atualizados, juntamente com uma letra (para cada arquivo). Tais letras indicam o que houve com o arquivo. Na Tabela 4.2 so listados os cdigos (letras) juntamente com seus signicados. a o Cdigo o U A D R G C Signicado atualizado ou diretrio adicionado o ou diretrio removido o ou diretrio foi substitu o do sofreu merge (sem conito) com alteraes conitantes co

arquivo arquivo arquivo arquivo arquivo arquivo

Tabela 4.2: Cdigos utilizados pelo subcomando update da ferramenta svn o Os 3 primeiros itens na tabela so alto-explicativos, mas os 3 ultimos a necessitam de alguns esclarecimentos. O cdigo R indica que o arquivo foi o removido e que um novo arquivo foi adicionado com o mesmo nome. Isso signica que o arquivo no tem nada a ver com o anterior e que tem um a histrico complemente diferente. o O cdigo G indica que o arquivo no repositrio foi alterado desde a sua o o ultima atualizao na cpia de trabalho e que o arquivo tambm sofreu al ca o e teraes na cpia de trabalho, entretanto as alteraes no so conitantes e co o co a a foram automaticamente colapsadas. O cdigo C indica algo semelhante ao cdigo G. A grande diferena que o o c e h, desta vez, um conito que no pode ser resolvido de forma automtica. a a a Ainda neste cap tulo apresentaremos como resolver conitos.

18

4.3

Fazendo alteraes na cpia de trabalho co o

Para fazer alteraes em arquivos j gerenciados pelo Subversion, no co a a e necessrio fazer nada alm de utilizar o editor de sua preferncia. Mas caso a e e arquivos ou pastas sejam adicionados ou removidos, ou ainda, a arvore de diretrios seja reestruturada necessrio informar ao sistema tais alteraes. o e a co A seguir listamos os subcomando utilizados para tal nalidade. add: agenda a adio de um arquivo ou pasta ao repositrio. No prximo ca o o commit tais arquivos e pasta sero adicionados ao repositrio. Caso um a o diretrio seja adicionado, todos os objetos lho tambm sero. o e a delete: agenda a remoo de um arquivo do repositrio. Depois do primeiro ca o commit o arquivo ou pasta no mais existir na cpia de trabalho e a a o repositrio. Claro que a remoo no repositrio apenas da reviso o ca o e a HEAD. Nas revises anteriores ele permanecer existindo como sempre o a existiu. copy: replica um arquivo ou pasta na cpia de trabalho ou repositrio mano o tendo o histrico. o move: faz o mesmo que um copy seguido de um delete. mkdir: cria um novo diretrio sob o controle de verso. o a A seguir apresentamos alguns exemplos de uso destes subcomandos. > svn add novoarquivo.txt # Consideramos que novoarquivo.txt j existe na cpia de a o # trabalho, mas n~o existe no repositrio. a o > svn delete arquivoantigo.txt # Consideramos que arquivoantigo.txt um arquivo j gerene a # ciado antes da execu~o desta instru~o. ca ca > svn copy minhafoto.png fotoandre.png # Consideramos que minhafoto.png um arquivo j gerenciado e a # antes da execu~o desta instru~o. ca ca > svn move fotoandre.png fotoatanasio.png 19

# Consideramos que fotoandre.png um arquivo j gerenciado e a # antes da execu~o desta instru~o. ca ca > svn mkdir novapasta # Cria o diretrio novapasta na cpia de trabalho e agenda a o o # adi~o dele no repositrio. ca o No subcomando add obrigatoriamente h como parmetro um arquivo ou a a diretrio local. No subcomando delete h obrigatoriamente como parmetro o a a um arquivo ou diretrio que pode ser local ou remoto (repositrio). No subo o comando copy h obrigatoriamente dois parmetros, um fonte e um destino. a a Fonte e destino podem fazer qualquer combinao entre arquivo local e reca moto (repositrio). No subcomando move tambm h um fonte e um destino, o e a mas desta vez os dois tm que ser do mesmo tipo. Ou local e local ou remoto e e e remoto.

4.4

Analisando suas alteraes co

Antes de fazer um commit de suas alteraes para o repositrio altamente reco o e comendvel realizar uma vericao em tais alteraes. Visando esta tarefa, a ca co so fornecidas diversas ferramentas, tais como status, diff e revert. a

4.4.1

svn status

Se utilizado svn status sem parmetros na raiz da sua cpia de trabalho, e a o ele ir detectar todas as alteraes locais em arquivos e pastas. Neste moa co mento, o que se faz comparar cada arquivo com sua cpia intacta na pasta e o administrativa .svn. De forma semelhante ao que faz o subcomando update exibida a lista e de objetos modicados juntamente com cdigos. Salientamos que com o o subcomando status no h escrita em arquivo algum, apenas leituras so a a a realizadas. So 5 colunas de cdigo seguida de uma coluna com o nome do a o objeto. Na primeira coluna apresentado o estado do objeto conforme segue. e A objeto foi agendo para adio no repositrio. ca o C arquivo est conitante, ou seja, durante o ultimo update as alteraes a co recebidas do repositrio sobreporam com as alteraes feitas na cpia o co o de trabalho. Antes do commit deve-se resolver este conito. 20

D objeto foi agendado para remoo no repositrio. ca o M o contedo do arquivo foi alterado. u X o diretrio no versionado, mas est relacionado ` denies externas o e a a a co do Subversion. ? o arquivo ou diretrio no est sob o controle de verso. o a a a ! o arquivo ou diretrio est sob o controle de verso, mas est ausente ou ino a a a completo na cpia de trabalho. Para se resolver este problema pode-se o utilizar os subcomandos update e revert. O primeiro dos subcomandos seria utilizado para obter o arquivo do repositrio e o segundo para o obter uma cpia de sua cpia intacta na pasta administrativa. o o o arquivo ou diretrio est no repositrio como um tipo, mas na cpia de o a o o trabalho de outro tipo. Por exemplo, arquivo em um e diretrio e e o em outro. Isso pode ocorrer por alteraes nas pastas sem o uso dos co comandos svn delete e svn add. Na segunda coluna informado o estado das propriedades do arquivo ou e diretrio. So dois valores poss o a veis, M indica que houve alterao nas proca priedades e espao em branco indica que nada foi alterado nas propriedades c do item. Na terceira coluna h a indicao se o arquivo ou diretrio est bloqueado a ca o a na pasta .svn da cpia de trabalho. O cdigo L indica bloqueio e o espao em o o c branco a ausncia de bloqueio. Tal bloqueio ocorre durante um commit. Caso e o item esteja bloqueado e um commit no esteja em execuo, signica que a ca houve algum problema durante a ultima execuo do commit e ser necessrio ca a a executar um svn cleanup para resolver o problema. Na quarta coluna h a indicao de que o arquivo ou diretrio est agena ca o a dado para adio ou foi modicado com um histrico anexado. So dois ca o a cdigos poss o veis + ou espao em branco. O cdigo + indica tal situao e o c o ca espao em branco a ausncia. c e Na quinta coluna h a indicao de que o item foi movido para um branch a ca atravs do comando svn branch. Dois valores so poss e a veis S ou espao em c branco. Utilizando a opo --verbose (-v), o subcomando status passa a exibir ca o estado de todos os item, independentemente de ter sido alterado ou no. a 21

A sa tambm sofre alteraes nas colunas, apenas mantendo o mesmo da e co signicado na primeira coluna. Na segunda coluna apresentada a reviso do item na cpia de trabalho. e a o Na terceira coluna apresentada a ultima reviso onde houve alterao no e a ca item. Na quarta, o ultimo usurio a alterar o item e na quinta o item em a questo. a importante salientar que as opes do svn status que mencionamos E co at agora no acessam informaes do repositrio, apenas limitam-se as ine a co o formaes contidas na cpia de trabalho. Para fazer acesso ao repositrio co o o e necessrio utilizar a opo --show-updates (-u). O efeito dele na sa a a ca da e insero de uma coluna no lugar da segunda e o deslocamento a direita do ca restante das colunas. Nesta coluna que inserida, dois valores podem aparee cer, so eles: * ou espao em branco. Na presena do *, houve alterao no a c c ca repositrio que ainda no foi recebida pela cpia de trabalho. o a o

4.4.2

svn di

Atravs do uso do subcomando diff poss vericar o que exatamente e e vel foi alterado em um dado arquivo. O formato utilizado na sa o unied di format, que imprime um da e no in de linhas removidas e + nas linhas adicionadas. cio A seguir apresentamos alguns exemplos de uso do subcomando diff. > svn diff # Mostra as modifica~es feitas em todos os arquivos desde co # o ltimo update. u > svn diff arquivo.txt # Mostra as modifica~es em arquivo.txt desde o ltimo co u # update. > svn diff -r 3 arquivo.txt # Mostra as diferenas em arquivo.txt, comparando o arquivo c # corrente em sua cpia de trabalho e na revis~o 3. o a > svn diff -r 3:7 arquivo.txt # Mostra as diferenas em arquivo.txt, comparando o arquivo c # presente na revis~o 3 e na revis~o 7. a a 22

4.4.3

svn revert

O subcomando revert faz com que o item retorne para o estado em que se encontra na cpia intacta no diretrio administrativo .svn. Ou seja, alo o teraes em seu contedo ou alteraes promovidas atravs de subcomandos co u co e como add e delete so desfeitas. a

4.5

Resolvendo conitos

Quando atualizamos a cpia de trabalho atravs do subcomando update e o e algum dos itens aparece com status C, isso signica que tanto no repositrio o como na cpia de trabalho o item foi alterado e tais modicaes sobrepemo co o se. Nesta situao o usurio tem que resolver o problema, chamado conito, ca a manualmente, ou seja, decidir a verso que deve prevalecer. a Na ocorrncia de um conito, o sistema faz o seguinte. e Conforme j hav a amos comentado, h o aviso do conito na sada do a update. Insere-se marcadores no arquivo para determinar a regio do conito. a Para cada arquivo conitante, h 3 arquivos extras na cpia de trabalho a o .mine, .rOLDREV e .rNEWREV. O primeiro uma cpia do arquivo de e o sua cpia de trabalho antes do update. O segundo a reviso BASE o e a de antes do update e o terceiro a reviso HEAD. Em outras palavras, e a o primeiro deixa como estava antes do update, o segundo desfaz suas alteraes e o terceiro simplesmente recebe o que vem do repositrio. co o Neste ponto, no ser permitido realizar um commit at que os 3 arquivos a a e temporrios sejam removidos. Tem-se ento 3 opes. a a co Resolver o conito editando o arquivo. Copiar um dos arquivos temporrios sob o arquivo de trabalho. a Executar um svn revert <arquivo> para desfazer suas alteraes. co Uma vez que tenha resolvido o conito, necessrio informar ao sistema e a atravs do subcomando resolved, que remover os arquivos temporrios. S e a a o no ser necessrio seu uso no caso em que se utilizar o subcomando revert a a a para resolver o problema. O uso do resolved se d da seguinte forma. a 23

> svn resolved ARQUIVO

4.6

Submetendo as alteraes co

Quando o usurio conclui as alteraes na cpia de trabalho, hora de suba co o e met-las ao repositrio. O subcomando utilizado para tal tarefa o commit. e o e Ele envia todas as alteraes na cpia de trabalho para o repositrio. A co o o seguir a forma como invoc-lo da raiz da cpia de trabalho. a o > svn commit -m descri~o geral das modifica~es ca co E altamente recomendvel denir uma mensagem de log junto com o a commit. Esta mensagem ser de grande utilidade para avaliaes acerca da a co evoluo das alteraes, assim como para os usurios entenderem o que os ca co a outros esto fazendo. H 3 maneiras de denir tal mensagem. a a A primeira maneira atravs da opo --message (-m), que deve ser e e ca seguida da mensagem entre aspas duplas. A segunda, atravs da opo e e ca --file, que deve ser seguida pelo nome do arquivo com a mensagem. E a ultima no passar parmetros e da ser aberto um editor de textos para e a a a que a mensagem seja denida.

4.7

Analisando a evoluo ca

Diversas so as ferramentas para anlise da evoluo dos objetos gerenciados. a a ca Uma delas j vimos, que o subcomando diff. Outras so: log, cat e list. a e a

4.7.1

svn log

Esta ferramenta exibe uma lista com nmeros de revises, acompanhado de u o nome do usurio que gerou a reviso, alm de data e mensagem de log. E a a e uma ferramenta de extrema utilidade para vericar o que zeram, quando e os responsveis pelas modicaes. A seguir apresentamos como invocar o a co subcomando para ver a lista de todas as revises. o > svn log

24

Atravs da opo --revision (-r) poss e ca e vel aplicar ltros `s revises a o poss tambm ver o histrico de apenas um item, se passarmos exibidas. E vel e o ele como parmetro. Assim podemos ver as revises em que ele foi alterado, a o por exemplo. Outra opo interessante a --verbose (-v), que exibe uma lista detalca e hada de itens alterados na reviso. a

4.7.2

svn cat

Esta ferramenta permite a visualizao de um determinado arquivo em qualca quer das revises. Seu uso se d da seguinte forma. o a > svn cat --revision REV ARQUIVO

4.7.3

svn list

O subcomando list permite visualizar o contedo de uma pasta diretamente u no repositrio, sem a necessidade de realizao de um checkout. O seu uso o ca se d da seguinte forma. a > svn list URL A seguir apresentamos um exemplo onde acessada a pasta raiz do proe jeto chamado meuprojeto. > svn list svn://zeus/data/repos/meuprojeto/trunk Atravs do uso da opo --verbose (-v) exibida uma listagem mais e ca e detalhada, onde h informaes como reviso, usurio e data da ultima moda co a a icao, alm do tamanho se o item for um arquivo. ca e

4.8

Adicionando um projeto no repositrio o

O subcomando import utilizado para fazer a cpia de uma rvore de die o a retrio no versionada para o repositrio. O seu uso se d da seguinte forma. o a o a > svn import LOCALDIR URL

25

O efeito disto ser a adio de todo o contedo da pasta LOCALDIR a ca u na pasta do repositrio indicada pela URL. A seguir apresentamos um exo emplo onde o contedo da pasta temp adicionado na raiz do repositrio u e o /data/repos da mquina zeus. a > svn import temp svn://zeus/data/repos/ Digamos que na pasta temp houvesse apenas uma pasta chamada projetonovo. Como efeito ter amos a adio da pasta projetonovo na ra do ca z repositrio. o Sugere-se que a pasta de um projeto contenha apenas 3 pastas com os seguintes nomes: branches, tags e trunk. Na pasta trunk insere-se o contedo u do projeto em si e funcionaria como sua raiz. Na pasta tags colocariamse verses bem denidas do projeto, por exemplo: release-1.0 e release-2.0. o Seria uma forma de registrar verses de um sistema entregue ao cliente e o assim poder recuperar uma cpia completa dos fontes daquela verso. A o a pasta branches tem um nome auto-explicativo. Seria utilizada para fazer ramicaes de um projeto. A seguir apresentado um exemplo de como co e criar uma tag. > svn copy svn://zeus/data/repos/meuprojeto/trunk \ svn://zeus/data/repos/meuprojeto/tags/release-1.0 \ -m "Vers~o 1.0 de Meu Projeto" a Tal comando cria um tag para a verso 1.0 de meuprojeto. a

4.9

Concluindo operaes interrompidas co

Quando o Subversion modica a sua cpia de trabalho, num update por o exemplo, ele tenta fazer isso de uma forma segura. Antes de alterar qualquer coisa, ele gera um arquivo de log listando as tarefas que sero realizadas, s a o ento que ele executa as tarefas listadas e no nal remove o arquivo de a e log. Caso a operao seja interrompida por algum motivo, o arquivo de log ca permanece no disco. Da basta reexecutar as tarefas l listadas e o sistema a retorna a um estado consistente. O subcomando cleanup faz exatamente esta atividade de reexecuo. ca Seu uso se d da seguinte forma. a > svn cleanup 26

4.10

Outros comandos

Outros subcomandos de grande utilidades so: export, info, propdel, a propedit, propget, proplist e propset. O primeiro cria cpia no vero a sionada de uma rvore e o segundo apresenta informaes sobre um item a co local ou remoto. O restante dos subcomandos utilizado para gerenciar e propriedades de itens.

27

Bibliograa
[1] CVS Concurrent Versions http://www.nongnu.org/cvs/. [2] CollabNet. Subversion http://subversion.tigris.org/. System, Site, May May 2008. 2008.

Ocial

[3] B. Collins-Sussman, B. Fitzpatrick, and M. Pilato. Version Control with Subversion. OReilly, 2004.

28

Vous aimerez peut-être aussi