Tecnologia -> Repósitorios -> SVN -> Tutorial Subversion

Tutorial Subversion

Após sofrer um pouco com a utilização do subversion, fiz este tutorial para facilitar minha vida e para ajudar também alguém que possa precisar.
Para este tutorial levamos em consideração que o subversion já está instalado e configurado no servidor. A partir daí seguem alguns comandos básicos (executados no terminal) para efetuar a criação e utilização de repositórios do subversion no linux.
No subversion, não existe a revisão de um determinado arquivo. Os arquivos não tem versões independentes. Todos os arquivos são parte de uma mesma revisão, e a modificação de um único arquivo altera a revisão de todos.
O subversion é um sistema de controle de versões que utiliza o conceito de branches, tags trunk. Abaixo seguem alguns conceitos para melhor compreensão:

Trunk

A pasta trunk contém os projetos que estão em desenvolvimento. Todas as atualizações efetuadas dia-a-dia são armazenadas na pasta trunk.

Branches

A pasta branches é aquela que contém “linhas de desenvolvimento” de tal projeto, que entre elas podem haver poucas diferenças, porém uma independe da outra.
Quando a equipe decide que o projeto está pronto para ser liberado como uma versão, a pasta trunk é copiada para a pasta branch e dado um nome de versão. Este branch é congelado e não sofre mais alterações, apenas correções. Rigorosos testes são efetuados.

Tags

Quando os testes efetuados encima de um branch estão completos, a versão que se encontra no branch é copiada para a pasta tags, formando assim um “release” ou uma versão “liberada”. Esta pasta tag é empacotada e enviada para o cliente. Qualquer modificação em branch,deve ser copiada para a pasta de tags, após todos os testes.
Svn considera tag apenas uma variação de um branch, e na prática é exatamente como um branch, apenas uma cópia da ramificação atual da árvore.


svnadmin

Uma ferramenta para criar, ajustar ou reparar um repositório Subversion.

Criando um repositório

svnadmin create
ou
svnadmin create /

*Para alterar alguma coisa no repositório é necessário, após a criação, baixar uma cópia de trabalho, através do comando “checkout”, alterar e usar o comando “commit” para enviar alterações.


svnserve

Um programa servidor independente, que roda como um processo daemon ou pode ser invocado via SSH. É um modo de tornar o repositório disponível na rede.

Tornando o repositório disponível na rede através do protocolo svn

svnserve -d -r

Desta forma, pode-se acessar o repositório de outras máquinas, através do ip ou hostname.
svn ls svn://

svn

O programa cliente para linha de comando.
Comandos para as funcionalidades do controle de versão (checkout, commit, update, etc.)

*Cada comando possui subcomandos para ações específicas.

Importando arquivo ou conteúdo de diretório para o repositório


svn import svn:// -m
ou
svn import  file:/// -m  *É necessario o uso de um protocolo (svn, file, etc.), pois o svn só trabalha com url’s.

*Ao importar um diretório, para usar o conceito de branch, tag e trunk,é necessário que se importe uma pasta à qual contém o projeto a ser armazenado no repositório contendo as pastas branch e tag (ambas vazias) e trunk (com os arquivos do projeto).


Adicionando arquivos ou diretórios

svn add

*Os arquivos serão adicionados ao repositório no próximo commit.

Removendo arquivos do repositório

svn rm
svn commit *Exclui da cópia local e dá um commit para o repositório

ou
svn rm *Para excluir diretamente do repositório


Listar todos os repositórios disponíveis no servidor srvbuild.


svn ls
ou
svn list

Há também outra forma de listar o conteúdo do repositório, passando diretamente o caminho onde ele se encontra no disco.

svn ls file:///

Outros parâmetros podem ser passados, como formas diferentes de listar o conteúdo do repositório.

svn ls –recursive *Desce recursivamente aos conteúdos de cada diretório
svn ls –verbose *Lista informações adicionais

Baixar uma cópia dos arquivos disponíveis no repositório


svn co
ou
svn checkout

Adicionalmente podem ser passados alguns parâmetros para baixar revisões específicas.

svn co svn:/// -r
ou
svn co file:/// -r  *Neste caso para acessar diretamente o local onde se encontra o repositório

Visualizar informações referentes à uma cópia de trabalho ou item remoto


svn info
ou
svn info


Atualizar uma cópia local com a disponível no repositório


svn update *Se estiver na pasta local de trabalho
ou
svn update

Listar modificações feitas na cópia de trabalho.

svn diff *Se estiver na pasta local de trabalho
ou
svn diff
svn diff lista as linhas dos arquivos que sofreram modificações daquelas que estão no repositório.

Listar os arquivos modificados na cópia de trabalho

svn status *Se estiver na pasta local de trabalho
ou
svn status
svn status lista os arquivos que sofreram modificações daqueles que estão no repositório.

Enviar as alterações efetuadas na cópia local para o repositório.


svn commit -m *Se estiver na pasta à qual possui os arquivos locais do repositório
ou
svn commit -m *A frase é o relato das alterações que estão sendo postadas


Liberar uma “release” para o repositório

Após efetuar todos os testes encima do projeto em desenvolvimento o mesmo deve ser disponibilizado como uma cópia estável para a pastabranches do projeto que está sendo desenvolvido. Para isso, é necessário fazer um checkout da ultima versão do projeto no repositório e simplesmente copiar a pasta trunk para dentro da pasta branches.

Trabalhando com a cópia local:
svn checkout /
    cd
svn copy trunk branches/ *Copiando a pasta trunk para a pasta branches
svn status *Para listar os arquivos que sofreram modificações.
svn commit *Somente agora as alterações vão para o repositório

Trabalhando diretamente no repositório
O comando svn copy pode operar sobre diretórios ou diretamente sobre as URL’s do repositório.
svn copy //trunk //branches -m

Visualizar logs de alterações

svn log  *Mostra as descrições das alterações feitas nos arquivos ou diretórios
ou
svn log –verbose  *Mostra as descrições e os arquivos que sofreram alterações

Propriedades

É possível a atribuição de propriedades à arquivos ou diretórios contidos no repositório.

Listar propriedades de um projeto

svn propget
ou
svn status *Se estiver na pasta à qual possui os arquivos locais do repositório
ou
svn status

Setar propriedades em um projeto

svn propset copyright ‘’ svn://srvbuild/repos/sgiapi-testes
ou
svn propset -R
ou
svn propset -F

*As propriedades devem ser setadas em uma cópia local, e realizar commit para efetivação no repositório.

Existem vários tipos de propriedades definidas pelo subversion que podem ser atribuidas aos projetos.

Ligações Externas (svn:externals)


As definições externas são um tipo especial de propriedades, que criam um link à arquivos em outro local no repositório. São um mapeamento de um diretório local para a URL.

Alguns comandos para trabalhar com definições externas:


Setar a propriedade svn:externals para uma cópia local

svn propset svn:externals “
svn commit *Para enviar as ligações externas ao repositório

Desta forma, é criado um link à pasta  dentro do fazendo com que, após o commit, sem que se realize umcheckout sobre o repositório, automaticamente se baixe os fontes referentes à definição externa. É bastante útil, caso possua uma API, oulibs que sejam necessários para vários projetos. Sendo que quando se realiza manutenção sobre a API ou sobre as libs, a mesma se aplica a todos os projetos que fazem dela uma definição externa.

Listar Ligações externas à um projeto

svn propget svn:externals


*Lembrando que os exemplos entre “<…>” deverão ser substituídos pelo caminho do arquivo ou diretório ou url.