Professional Documents
Culture Documents
ndice
Subversion ................................................................................................................................3 Instalao ................................................................................................................................. 4 Utilizao em Linha de Comandos .............................................................................................5 1. Criao do repositrio .......................................................................................................5 2. Criao da pasta de trabalho .............................................................................................6 2.1 Checkout .........................................................................................................................6 3. Criar/Adicionar ficheiros e Commit ....................................................................................8 4. Update (actualizao da pasta de trabalho) .......................................................................9 4.1 Resoluo de Conflictos ................................................................................................... 9 5. Revert (reverter para o ficheiro original).......................................................................... 12 6. Apagar, mover ou copiar ficheiros ................................................................................... 12 7. Update para reviso antiga.............................................................................................. 14
Subversion
Estou a fazer este documento para vos explicar mais ou menos como funciona o Subversion e como que nos podemos organizar para trabalhar. O Subversion um programa para o controlo de verses e til tanto para trabalhos de grupo, como para trabalhos a solo. Para trabalhos de grupo, podemos trabalhar ao mesmo tempo, dividindo trabalho e ter a certeza que trabalhamos sempre com os ficheiros mais actuais. Se o elemento A estiver a trabalhar no ficheiro1 e o elemento B estiver a mexer no ficheiro2 (e houver dependncia entre os dois ficheiros, como no caso de vrias classes numa aplicao Java), ento o A pode ter a certeza que ir ter sempre o trabalho mais actual que o B est a fazer. Se por acaso dois utilizadores estiverem a mexer no mesmo ficheiro de forma distinta e os dois decidirem gravar o seu trabalho no repositrio (commit), ir haver um conflito entre as duas verses. O subversion permite ver as alteraes entre os dois ficheiros e decidir com que ficheiro vamos ficar, ou melhor ainda, com que pedaos do documento que vamos ficar (no fundo pode-se gerar um terceiro ficheiro com bocados do ficheiro1 e ficheiro2). Ainda em trabalho em grupo, muito mais fcil partilhar os documentos uns com os outros, sem ser necessrio estar a pegar nos ficheiros todos, meter num ZIP, enviar por mail ou passar por pen e depois o outro colega ter de Unzippar tudo para uma nova pasta e ver o que que lhe interessa passar ou no, correndo o risco de juntar mal o cdigo do trabalho do colega com o dele. Para trabalhar a solo, tambm til para ir mantendo um backup do trabalho j feito. Muitas vezes chegamos a um determinado ponto do trabalho em que nos apercebemos que afinal o que fizmos 2 ou 3 dias atrs at estava correcto e que agora fomos pelo caminho errado. Sem Subversion no d para voltar a esse trabalho anterior. Com o Subversion basta fazer um revert para uma reviso anterior e temos de volta o nosso trabalho antigo (e at podemos manter parte do trabalho que temos actualmente).
Instalao
O Subversion est disponvel em linha de comandos (e tal como o Linux, tem vrias distribuies diferentes) e tambm est disponvel em aplicao com interface grfica. A distribuio Slik, em linha de comandos est disponvel aqui: http://www.sliksvn.com/en/download (verso Slik Subversion) Outras distribuies esto na pgina do Subversion (Apache): http://subversion.apache.org/packages.html Para instalar a verso GUI (muito mais fcil de mexer e integra-se no ambiente do Windows), h o Tortoise: http://tortoisesvn.net/downloads
1. Criao do repositrio
Primeiro temos de criar um repositrio. O repositrio mais ou menos uma base de dados e l que iremos guardar todos os nossos projectos, com todas as suas revises (iteraes). O repositrio pode manter todos os nossos projectos e para nossa organizao, convm criar subpastas para cada projecto, ou ento podemos criar um repositrio para cada projecto, para dividir completamente os trabalhos. Isto j depende do gosto de cada um. A criao do repositrio s vai ser feita uma vez e a partir da s precisamos de saber o caminho para o repositrio e mais nada. Para o criarmos usamos o svnadmin que o comando de administrao de subversion: svnadmin create <caminho-para-repositrio> Exemplo: imaginem que querem criar a pasta Repositorio e j esto nessa pasta C:\Repositorio (Windows) ou ~/Repositorio (Linux). Podem ento usar os comandos svnadmin create C:\Repositorio (Windows), svnadmin create ~/Repositorio (Linux), ou svnadmin create . (uma vez que o . (ponto) denomina a pasta onde nos encontramos). Depois de fazerem isto, o repositrio criado e no convm mexer mais nesta pasta directamente. Se o fizerem podem corromper o repositrio. Apesar dos ficheiros dos nossos projectos virem aqui parar, no podemos aceder-lhes directamente. A partir daqui todas as alteraes necessrias sero feitas com o comando svn.
2.1 Checkout
Depois de criada a pasta, entramos para essa pasta e l que iremos fazer checkout: svn checkout <URL-para-repositrio> <pasta-de-trabalho> Em vez de checkout, podemos abreviar para co). Ateno que temos URL-para-repositrio e no caminho-para-repositrio. Isto tem a ver com o facto de agora o comando svn necessitar de um caminho em forma de URL para o nosso repositrio e portanto utilizar o formato de pastas especfico de cada sistema operativo, no ir funcionar. Para repositrios locais (no nosso computador) utiliza-se o protocolo para ficheiros locais: file://<caminho> Para repositrios em web-servers utiliza-se http://<server>:<porta> Tambm se pode usar o protocolo svn://, especfico para Subversion, mas isso agora no interessa! Exemplo (usando o repositrio e pasta de trabalho j criadas nos outros pontos): svn co file:///Repositorio C:\Users\Nome\Desktop\projecto, ou svn co file:///Repositorio . (se j estivermos na pasta de trabalho) ATENO: Pastas com nomes separados no funcionam bem!! C:\Users\Fbio Silva\Desktop\projecto no ir funcionar por causa do espao no nome. Mais vale ir primeiro para a pasta e depois usar o ponto . para se referirem pasta actual. A pasta do repositrio encontra-se em C:\Repositorio, portanto como no podemos simplesmente escrever file://C:\Repositorio (sintaxe incorrecta), temos de alterar para file:///Repositorio. Isto corresponde a indicar a raz (/) e a sua sub-pasta Repositorio.
Se o repositrio estivesse por exemplo em C:\Users\NomeUtilizador\Desktop\Repositorio, ento iria usar-se: file:///Users/NomeUtilizador/Desktop/Repositorio De notar que o Windows aceita o separador de pastas /, apesar de a sua sintaxe normal ser \. Temos agora uma pasta de trabalho a ser controlada pelo Subversion e l que iremos adicionar todos os nossos ficheiros de trabalho. Foi criada uma pasta escondida .svn. No mexer nesta pasta!
Esta mensagem indica-nos que enquanto altervamos o nosso ficheiro localmente, algum o alterou de outro lado e fez um commit, invalidando assim o nosso commit! Somos agora obrigados a fazer um update para obter a verso mais recente do repositrio. Claro que como cada um dos utilizadores escreveu algo diferente e conflituoso, um update ir avisar-nos que existe um conflito com o nosso ficheiro modificado que estamos a tentar submeter: Conflict discovered in 'texto.txt'. Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: p: postpone diz para ignorar por agora o conflicto. Mais tarde tratamos da resoluo do problema. De qualquer maneira no podemos fazer commit enquanto o conflicto existir. diff-full mostra as diferenas entre o(s) ficheiro(s) em conflicto. edita os ficheiros num editor (que por enquanto ainda no est definido, logo no funciona) mine-conflict diz para juntar as duas verses e que ao ser encontrado um conflito, as nossas alteraes iro prevalecer. theirs-conflict diz para juntar as duas verses e que ao ser encontrado um conflito, a verso da outra pessoa que ir prevalecer e que as nossas alteraes sero descartadas. show all options, mostra mais opes, tais como: mine-full serve para indicarmos que no queremos juntar o nosso ficheiro ao do outro utilizador e muito menos queremos resolver as situaes de conflito. O nosso ficheiro ir ficar como est, e o do outro completamente descartado. theirs-full o contrrio do mine-full, indicando que o ficheiro do outro utilizador que est correcto por inteiro e que o nosso pode ir para o lixo.
s: mf:
tc:
Imaginemos agora a seguinte situao: O ficheiro texto.txt tem agora as seguintes linhas: Linha1 Linha2 Linha3 Ambos os utilizadores A e B tm a mesma verso do ficheiro e agora os dois decidem alterar o ficheiro, mas em linhas diferentes:
10
O utilizador A altera o ficheiro para: Linha1 -> Eu sou o A Linha2 Linha3 O utilizador B altera o ficheiro para: Linha1 Linha2 -> Eu sou o B Linha3 Se o utilizador A fizer commit, a verso do repositrio ser a que tem a linha 1 alterada. O utilizador B ao fazer update (depois de um commit falhado, por exemplo) no ir receber nenhum aviso de conflicto, uma vez que o ficheiro sofreu um merGe automtico...da aparecer a mensagem: G texto.txt Updated to revision ##. O merge a mistura entre as duas verses. Uma vez que no haviam conflictos na mesma linha, o svn misturou o ficheiro e se agora o formos abrir, iremos ver: Linha1 -> Eu sou o A Linha2 -> Eu sou o B Linha3 Agora sim, podemos fazer um commit uma vez que j no h conflicto e ento o utilizador A ter de fazer um update para receber a nova verso do ficheiro. Aviso: convm falar sempre com a outra pessoa, alertando para o facto de ter havido um conflito ou um merge, de forma a que no se gerem problemas (ou que o conflicto no volte a surgir).
11
Nesta situao um revert ou um commit no iro funcionar. Ou se restaura o ficheiro (se por acaso ele foi movido por engano, convm ir busc-lo sua nova localizao e copi-lo de novo para a pasta de trabalho), ou ento poder-se- fazer um update (svn up) e ento o ficheiro ser reposto com a verso que est no repositrio. Qualquer alterao que tivesse sido feita localmente e no tivesse sofrido um commit ir obviamente perder-se. A maneira correcta para apagar um ficheiro usar o comando delete (ou del, remove, rm): svn del texto.txt ou ento svn del . (para todos os ficheiros da pasta) Se por acaso nos enganmos, basta utilizar o revert e o update para voltarmos a ficar com os ficheiros. Para mover ficheiros o comando o move (mv, ren, rename): svn mv texto.txt readme.txt
12
O svn ir mostrar que o ficheiro readme.txt foi adicionado e que o ficheiro texto.txt foi apagado: A D readme.txt texto.txt
Se fizermos agora commit as alteraes sero gravadas e os outros utilizadores que faam update iro sofrer a adio do ficheiro readme.txt e iro ficar sem o ficheiro texto.txt. Para se copiar um ficheiro o comando o copy (cp): svn cp readme.txt copia_de_readme.txt O resultado : A copia_de_readme.txt Se fizermos um status (svn st), teremos: A + copia_de_readme.txt Podemo agora fazer um commit para ficarmos com os 2 ficheiros no repositrio. - readme.txt - copia_de_readme.txt
13
14