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 e trunk. Abaixo seguem alguns conceitos para melhor compreensão:
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.
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.
*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.
Desta forma, pode-se acessar o repositório de outras máquinas, através do ip ou hostname.
Comandos para as funcionalidades do controle de versão (checkout, commit, update, etc.)
*Cada comando possui subcomandos para ações específicas.
*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).
*Os arquivos serão adicionados ao repositório no próximo commit.
Há também outra forma de listar o conteúdo do repositório, passando diretamente o caminho onde ele se encontra no disco.
Outros parâmetros podem ser passados, como formas diferentes de listar o conteúdo do repositório.
Adicionalmente podem ser passados alguns parâmetros para baixar revisões específicas.
Trabalhando com a cópia local:
Trabalhando diretamente no repositório
O comando svn copy pode operar sobre diretórios ou diretamente sobre as URL’s do repositório.
*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.
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:
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.
*Lembrando que os exemplos entre “<…>” deverão ser substituídos pelo caminho do arquivo ou diretório ou url.
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 e 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 importsvn:// -m
ou
svn importfile:/// -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 –recursivesvn ls –verbose* Desce recursivamente aos conteúdos de cada diretório* Lista informações adicionais
Baixar uma cópia dos arquivos disponíveis no repositório
svn coou
svn checkout
Adicionalmente podem ser passados alguns parâmetros para baixar revisões específicas.
svn co svn://ou/ -r
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
ousvn update
Listar modificações feitas na cópia de trabalho.
svn diff *Se estiver na pasta local de trabalhosvn diff lista as linhas dos arquivos que sofreram modificações daquelas que estão no repositório.
ousvn diff
Listar os arquivos modificados na cópia de trabalho
svn status *Se estiver na pasta local de trabalhosvn status lista os arquivos que sofreram modificações daqueles que estão no repositório.
ousvn status
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órioousvn 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órioousvn 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
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.