Subversion: Controlo Total sobre o Software – 2ª Parte

Nesta 2.ª parte do artigo sobre Subversion (a 1.ª parte encontra-se na edição n.º 17), vamos ver como deveremos usar o Subversion no dia-a-dia e também algumas das ferramentas que existem actualmente e que se integram bastante bem com o Subversion. Com estas ferramentas poderemos tirar mais partido do Subversion, uma vez que nos vão fornecer um conjunto de funcionalidades acrescidas (entre as quais: disponibilidade do código online, autenticação e autorização no repositório, gestão das alterações feitas a cada revisão, facilidade em aferir as diferenças entre as modificações feitas numa cópia local de trabalho e o repositório central de código), como veremos em seguida.

No fim deste artigo apresenta-se bibliografia recomendada para quem desejar extender os seus conhecimentos sobre este sistema de controlo de versões de software, cada vez mais utilizado hoje em dia.

Ciclo Normal de Trabalho com SVN

Checkout Inicial

Na maior parte das vezes, começa-se a usar um repositório de Subversion fazendo um checkout ao projecto em questão. Ao fazer isto, é criada na máquina local uma cópia do projecto. Esta cópia contém a HEAD (última revisão) do repositório SVN que é especificado na linha de comandos:

$ svn checkout http://svn.exemplo.pt/repositorio/trunk
A  trunk/subversion.dsw
A  trunk/svn_check.dsp
A  trunk/Makefile
A  trunk/configure
A  trunk/ficheiroA.c
...
Checked out revision 327.

Apesar do exemplo acima fazer checkout da directoria /trunk, pode-se igualmente escolher uma subdirectoria do repositório ao especificar o subdirectório no URL:

$ svn checkout http://svn.exemplo.pt/repositorio/trunk/documentacao/pdfs
A   trunk/documentacao/pdfs/faq.pdf
A   trunk/documentacao/pdfs/userguide.pdf
A   trunk/documentacao/pdfs/manual-de-instalacao.pdf
...
Checked out revision 327.

Uma vez que o Subversion usa o modelo copia-modifica-unifica em vez do modelo bloqueia-modifica-desbloqueia, o utilizador pode logo começar a fazer alterações aos ficheiros e directorias na sua cópia de trabalho. Esta cópia de trabalho é igual a qualquer outra colecção de ficheiros e directorias no computador. O utilizador pode editar e alterar os ficheiros, navegar e mover pastas, ou até mesmo apagar a cópia de trabalho inteira e trabalhar numa nova. Apesar de realmente ser uma colecção de ficheiros e directorias como qualquer outra, é preciso sempre avisar o Subversion se se quiser re-arranjar qualquer ficheiro ou directoria dentro da cópia de trabalho. Por isso, deve-se sempre usar os comandos svn copy ou svn move em vez dos comandos normais (Ctrl-C ou Ctrl-X, por exemplo) para que essas alterações sejam reflectidas a todos os utilizadores quando fizerem um svn update nas suas cópias de trabalho.

Cada directoria na cópia de trabalho local contém uma área administrativa, uma sub-directoria chamada .svn. Normalmente, um comando de listagem de directórios não mostra esta sub-directoria, mas é no entanto uma directoria muito importante que não se deve nunca apagar ou alterar. O Subversion depende desta directoria para gerir a cópia de trabalho de cada utilizador.

Pode-se também fazer um checkout especificando uma nova directoria que vai passar a ser a nova cópia de trabalho depois do URL do repositório, nos parâmetros do comando de checkout:

$ svn checkout http://exemplo.efacec.pt/repositorio/trunk/documentacao/pdfs directoriaNova
A   directoriaNova/faq.pdf
A   directoriaNova/userguide.pdf
A   directoriaNova/manual-de-instalacao.pdf
...
Checked out revision 327.

Isto coloca a cópia de trabalho numa directoria chamada directoriaNova em vez da directoria trunk como tínhamos visto previamente.

Ciclo normal de trabalho

O Subversion tem bastantes funcionalidades, opções, possibilidades de uso, mas para uma utilização diária só se irá usar um sub-conjunto limitado das funcionalidades do Subversion. O ciclo de trabalho é tipicamente o seguinte:

  • Fazer um update à cópia de trabalho
    • svn update
  • Fazer as alterações necessárias aos ficheiros da cópia de trabalho
    • svn add
    • svn delete
    • svn copy
    • svn move
  • Examinar as alterações feitas
    • svn status
    • svn diff
    • svn revert
  • Unificar as alterações feitas por outros utilizadores na cópia de trabalho local
    • svn update
    • svn resolved
  • E por fim, e só agora, fazer uma submissão das alterações feitas na cópia de trabalho local para o repositório de SVN
    • svn commit

O diagrama seguinte exemplifica melhor o ciclo normal de desenvolvimento com o Subversion.

Subversion: ciclo normal de trabalho

Propriedades do Subversion

O Subversion permite criar propriedades com versão nos ficheiros e directorias (com os nomes que se quiser), bem como propriedades sem versão nas revisões. A única restrição encontra-se nas propriedades com o prefixo svn: que são propriedades reservadas ao Subversion nesse espaço de nomes (namespace). Enquanto que as propriedades fora deste espaço de nomes podem ser usadas para controlar o comportamento do Subversion, os utilizadores não podem criar ou alterar propriedades do espaço de nomes svn:. Estas são:

  • Propriedades com versão
    • svn:executable – Se está presente num ficheiro, o cliente de SVN fará o ficheiro executável em cópias de trabalho em ambiente Unix; Em ambiente Windows, para ser executável basta ter a extensão .exe ou .bat.
    • svn:mime-type – Se está presente num ficheiro, o valor indica o tipo MIME do ficheiro. Isto permite ao cliente de SVN decidir se uma fusão (merging) contextual é possível de ser feita durante um update, e pode também afectar como o ficheiro se comporta quando é procurado via web browser;
    • svn:ignore – Se está presente numa directoria, o valor é uma lista de padrões de ficheiros sem versão a serem ignorados pelo subcomando svn status ou outros; Por exemplo, *.log *.dmp core.*;
    • svn:keywords – Se está presente num ficheiro, o valor diz ao cliente de SVN como expandir palavras-chave (keywords) particulares dentro do ficheiro;
    • svn:eol-style – Se está presente num ficheiro, o valor diz ao cliente de SVN como manipular o fim de uma linha no ficheiro na cópia de trabalho; Por exemplo, CRLF (em Windows) ou CR (em Unix/Linux);
    • svn:externals – Se está presente numa directoria, o valor é uma lista com vários caminhos (paths) e URLs a que o cliente de SVN deverá fazer checkout; Esta propriedade é muito útil quando se precisa de usar código-fonte de terceiras fontes mas que não precisamos que estejam versionadas no repositório de SVN;
    • svn:special – Se está presente num ficheiro, indica que o ficheiro não é um ficheiro normal, mas um link simbólico ou outro tipo especial de objecto;
    • svn:needs-lock – Se está presente num ficheiro, indica ao cliente de SVN para colocar o ficheiro só para leitura na cópia de trabalho, como uma nota de que esse ficheiro deverá ser bloqueado (locked) antes da sua edição (para desta forma ganhar propriedades de escrita e garantir que só um utilizador pode alterar esse ficheiro).
  • Propriedades sem versão
    • svn:author – Se está presente, contém o nome do utilizador autenticado que criou a revisão (se não estiver presente, a revisão foi feita anonimamente);
    • svn:date – contém o tempo UTC em que a revisão foi criada, no formato ISO. O valor vem do relógio do servidor;
    • svn:log – contém a mensagem de log que descreve a revisão; Esta mensagem pode ser alterada após um commit, caso hajam enganos na mensagem que se queria ter colocado no commit;
    • svn:autoversioned – Se está presente, a revisão foi criada com a funcionalidade de versionamento automático.

URLs dos repositórios Subversion

Os repositórios de Subversion podem ser acedidos através de vários métodos – localmente no disco (directamente) ou através de vários protocolos de rede (indirectamente). A localização de um repositório, no entanto, é sempre um URL. Em seguida apresenta-­se uma tabela que descreve como os diferentes URLs mapeam os diferentes métodos de acesso a um repositório Subversion.

EsquemaMétodo de acesso
file://Acesso directo ao repositório (disco local).
http://Acesso via protocolo WebDAV para o servidor Apache do Subversion
https://O mesmo que para http:, mas com encriptação SSL (mais seguro)
svn://Acesso via protocolo svn a um servidor a correr svnserve
svn+ssh://O mesmo que svn:, mas através de um túnel SSH

Se se usar o SVN em DOS, as barras devem ser como numa directoria em Linux (/) e não da forma nativa (\).Exemplo: file:///repositorio/pasta/ e não file:///repositoriopasta

Ajuda do SVN

Um dos mais importantes comandos do SVN é o svn help. A qualquer momento, um

svn help sub-comando

descreve a sintaxe, os switches que podem ser usados e o comportamento normal desse sub-comando.