Subversion

Subversion

Subversion é sistema de controle de versões (VCS - Version Control System) de código aberto. Usando Subversion, você pode salvar o histórico dos seus arquivos fontes e documentos. Ele gerencia arquivos e diretórios ao longo do tempo. Uma árvore de arquivos é colocada em um respositório central. O repositório é muito parecido com um servidor de arquivos comum, exceto pelo fato de que lembra de cada mudança feita ao longo do tempo nos arquivos e diretórios.

Este tutorial vai ensinar a usar o Subversion (svn) localmente para fazer controle de versão no código, ou seja, como setar um repositório local do Subversion sem usar o Apache. De lambuja, seguem também alguns comandos muito interessantes para o seu dia a dia.

Seguir um tutorial como este ajudará a entender como usar controle de versão nos seus projetos particulares, e ainda permitir que você se familiarize com o Subversion usado em outros projetos, como por exemplo no projeto Gnome.

De maneira alguma pretende-se cobrir todos os aspectos desta excelente ferramenta. E foi pensando nisso que decidimos compartilhar no final do tutorial algumas das melhores referências sobre o Subversion. Considere este tutorial como seu ponto de partida, e em seguida leia o que recomendamos.

Esperamos que este texto seja útil no seu aprendizado.

Instalação

Para acessar o repositório do Subversion utilizando o protocolo HTTP, você deve instalar e configurar um servidor web. Apache2 funciona com o Subversion.

Para instalar o Subversion, execute o seguinte comando no prompt de comando:

sudo apt-get install subversion libapache2-svn

Configuração do Servidor

Estes passos assumem que você instalou os pacotes mencionados acima no seu sistema. Esta seção explica como criar um repositório Subversion e acessar o projeto.

Criar repositório Subversion

O repositório pode ser criado através do seguinte comando:

svnadmin create /path/to/repos/project

Importando arquivos

Depois de criar o repositório você pode importar arquivos para o repositório. Para importar um diretório, digite o seguinte comando em uma janela do terminal:

svn import /path/to/import/directory file:///path/to/repos/project

Métodos de Acesso

'Esquema'

'Método de Acesso'

file://

acesso direto ao repositório (no disco local)

http://

Acesso através do protocolo WebDAV a um servidor web Apache2 com Subversion

https://

Mesmo que http://, mas com criptografia SSl

svn://

Acesso via protocolo personalizado a um servidor svnserve

svn+ssh://

Mesmo que svn://, mas através de um túnel SSH

Neste seção, veremos como configurar o Subversion para todos estes métodos de acesso. Aqui, cobrimos o básico. Para utilizações mais avançadas, refira-se ao livro do subversion.

Acesso direto ao repositório (file://)

Este é o método de acesso mais simples. Ele não requer que nenhum processo de servidor do Subversion esteja rodando. Este método de acesso é usado para acessar o Subversion da mesma máquina. A sintaxe do comando que deve ser digitada no terminal é:

svn co file:///path/to/repos/project

ou

svn co file://localhost/path/to/repos/project

NOTA Se você não especificar o nome do host, então são três barras (///) -- duas para o protocolo (file, neste caso) mais a primeira barra no caminho do arquivo. Se você especificar o nome do host, você deve usar duas barras (//).

As permissões do repositório dependem de suas permissões no sistema de arquivos. Se o usuário tem permissões para ler/escrever, ele pode fazer checkout e commit para o repositório.

Acesso via protocolo personalizado (svn://)

Depois que o repositório Subversion é criado, você pode configurar o controle de acesso. Você pode editar o arquivo /path/to/repos/project/conf/svnserve.conf para configurar o controle de acesso. Por exemplo, para ativar a autenticação, você deve descomentar as seguintes linhas no arquivo de configuração:

# [general]
# password-db = passwd

Depois de descomentar as linhas acima, você pode manter a lista de usuários no arquivo passwd. Então, edite o arquivo paswd no mesmo diretório e adicione o novo usuário. A sintaxe é a seguinte:

username = password

Para mais detalhes, por favor refira-se ao arquivo.

Agora, para acessar o Subversion via o protocolo personalizado svn://, ou da mesma máquina ou de máquinas diferentes, você pode executar o svnserver usando o comando svnserve. A sintaxe é a seguinte:

$ svnserve -d --foreground -r /path/to/repos
# -d -- modo daemon
# --foreground -- executa em primeiro plano (útil para depuração)
# -r -- raíz do diretório para servir

Para mais detalhes de utilização, por favor refira-se a:

$ svnserve --help

Uma vez que você executou o comando svnserve, o Subversion inicia escutando a porta padrão (3690). Para acessar o repositório do projeto, você deve rodar o seguinte comando de um prompt de comando:

svn co svn://hostname/project project --username user_name

Baseado na configuração do servidor, a senha será solicitada. Uma vez que você estiver autenticado, é feito o checkout do código do repositório. Para sincronizar o repositório do projeto com sua cópia local, você pode rodar o sub-comando update. A sintaxe para o comando, entrada em um prompt de comando, é a seguinte:

cd project_dir ; svn update

Para mais detalhes sobre como usar cada sub-comando do Subversion, você pode referir-se ao manual. Por exemplo, para aprender mais sobre o comando co (checkout), por favor, execute o seguinte comando de seu prompt de comando:

svn co help

Acesso via protocolo personalizado com criptografia SSL

A configuração e o processo de servidor é o mesmo que no método svn://. Para detalhes, por favor refira-se a seção acima. Este passo assume que você seguiu o passo acima e iniciou o servidor Subversion usando o comando svnserve.

Também é assumido que o servidor ssh está executando na máquina que está permitindo conexões de entrada. Para confirmar, por favor tente logar na máquina utilizando ssh. Se você pode logar, tudo está perfeito. Se você não pode logar-se, resolva isso antes de continuar.

O protocolo svn+ssh:// é utilizado para acessar o repositório Subversion com criptografia SSL. A transferência de dados é criptografada usando este método. Para acessar o repositório do projeto (por exemplo com um checkout), você deve usar o seguinte comando:

svn co svn+ssh://hostname/var/svn/repos/project

Você deve usar o caminho completo (/path/to/repos/project) para acessar o repositório Subversion usando este método de acesso.

Com base na configuração do servidor, a senha será solicitada. Você deve digitar a senha que você utilizou para logar-se no ssh. Uma vez que estiver autenticado, será feito o checkout do código no repositório do Subversion.

Criando um Repositório

Para começar, vamos escolher o local onde você vai criar seu repositório. Como sugestão vamos escolhe dentro de /var/local e depois alterar o diretório para pertencer ao seu usuário/grupo, assim você poderá fazer commit sem precisar do sudo, do contrário você não terá permissão de escrita no repositório:

sudo svnadmin create myProject
sudo chown -R myUser:myUser myProject

Substitua myProject por um nome que desejar, e substitua myUser pelo nome do seu usuário (no ubuntu, seu usuário tem um grupo próprio).

Agora vamos criar a infrastrutura recomendada no svn-book para projetos, que deverá ser algo como:

|– MyProject
   |– branches
   | # Somente para desenvolvimentos experimentais, onde você poderá usar
   | # para trabalhar em uma nova feature e depois fazer um merge dela com o
   | # mainline trunk
   |– tags
   | # Onde armazenamos snapshots da data do Release de uma dada versão,
   | # cada snapshot será uma tag no diretório tags com nome dado por você.
      |– ver005
      |– ver010
      |– ver015
   |– trunk
     # É no trunk que as coisas acontecem. Quase todos os commit seus iram
     # para esse diretório, portanto certifique-se de só fazer commit
     # quando o código estiver pronto, testado e sem erros.

Para criar os diretórios acima vamos usar o comando mkdir do svn, como abaixo:

svn mkdir file:///var/local/MyProject/branches
svn mkdir file:///var/local/MyProject/tags
svn mkdir file:///var/local/MyProject/trunk

Chegou o momento de importar para o trunk do seu novo repositório aquele seu diretório antigo que você queira versionar, vá até o diretório e utilize o comando import do svn:

svn import . file:///var/local/MyProject/trunk

Se você fez tudo como acima, chegou a hora então de fazer chekout no seu home e ter uma pasta de trabalho para recomeçar o desenvolvimento:

svn co file:///var/local/MyProject/ ~/MyProject

Pronto, agora é só trabalhar no código dentro do diretório ~/MyProject/trunk e lembrar de sempre fazer commit no final das atividades. A seguir apresento dicas de comandos legais do Subversion.

Comandos do Subversion

Para ver o status da sua cópia local comparando com o status do servidor, use:

svn status -u

Mantendo sua cópia local sincronizada com o servidor, use:

svn update

Para commitar atualizações, use:

svn commit

Para ver o log de cada um dos arquivos, ordenando cronologicamente, use:

svn log | tac

E para ver o log de somente um arquivo específico, utilize:

svn log file_name | tac

Para ver a diferença entre um dado arquivo em uma dada revisão e o estado atual do seu arquivo no repositório, use:

svn diff -r revision_number file_name

Para ver a diferença entre revisões de seeu arquivo no repositório, use:

svn diff -r revision_number_1:revision_number_2 file_name

Para reverter o estado de um arquivo de cópia local para uma dada revisão, use (ou use -R para um diretório):

svn revert file
svn revert -R directory

Para criar uma nova tag ou uma branch experimental, use:

svn copy src_dir tag_dir

Para consultar o help de qualquer comando, use:

svn help command

Conclusão e bibliografia recomendada

Este tutorial não tinha a intenção de cobrir todos os tópicos de Subversion, mas sim introduzí-lo aos aspectos fundamentais, assim você poderá seguir sozinho seus estudos sobre versionamento. Uma série de Websites na internet podem levá-lo a ter as mais diversas experiências com o svn. Divirta-se com os links a seguir:

  • Os desenvolvedores do Subversion escreveram um livro sobre o software que é considerado a Bíblia do svn. Este livro possui uma versão em português. Recomendamos que você leia com calma o livro ao menos uma vez, retornando sempre que tiver dúvidas. Visite svnbook-pt_BR e aproveite.

  • O Projeto Gnome utiliza subversion nos seus repositórios. Todos os sub-projetos estão mantidos lá e o primeiro passo para quem quiser contribuir com o Gnome é visitar a wiki deles, conhecer detalhes sobre a estrutura de diretórios adotado no projeto e entender como funciona o versionamento de um projeto tão grande. Visite wiki e em seguida o svn do Projeto Gnome.

  • Os caras do blog ultimolog.com escreveram um tutorial divertido sobre subversion, com explicações que introduzem controle de versão suavemente. Recomendamos sua leitura em ultimolog.com.

  • Este tutorial é igualmente importante, apesar de inglês. Considere também lê-lo para entender outros aspectos sobre subversion, características não discutidas neste tutorial são apresentadas lá. Visite a página do Xavier e obtenha mais informações.

Subversion (last edited 2013-11-12 01:07:21 by rudineiw)