27.5. Introdução ao Subversion

O Subversion é um sistema de controle de versão de código-fonte aberto gratuito e amplamente considerado como sucessor do CVS, o que quer dizer que os recursos apresentados pelo CVS normalmente também estão presentes no Subversion. Ele é especialmente recomendável quando as vantagens do CVS são almejadas sem que seja necessário tolerar as desvantagens. Muitos desses recursos já foram apresentados brevemente na Seção 27.1.3, “Subversion”.

27.5.1. Instalando um servidor Subversion

A instalação de um banco de dados repositório em um servidor é um procedimento relativamente simples. O Subversion fornece uma ferramenta de administração dedicada para essa finalidade. Digite o comando a seguir para criar um novo repositório:

svnadmin create /path/to/repository

Outras opções podem ser relacionadas com svnadmin help. Em oposição ao CVS, o Subversion não é baseado no RCS, mas em tipos diferentes de repositório. O Banco de Dados Berkeley ou FSFS (um repositório que utiliza o sistema de arquivos diretamente) é usado normalmente. Não instale um repositório em sistemas de arquivos remotos, como NFS, AFS ou Windows SMB. O banco de dados requer mecanismos de bloqueio POSIX, não suportados por esses sistemas de arquivos.

O comando svnlook fornece informações sobre um repositório existente.

svnlook info /path/to/repository

É necessário configurar um servidor para permitir que usuários diferentes acessem o repositório. Use o servidor Web do Apache com o WebDAV para fazer isso, ou use o svnserve, o servidor fornecido com o Subversion. Quando o svnserve estiver em execução, o repositório poderá ser acessado com um URL com svn:// ou svn+ssh://. Usuários que podem se autenticar chamando svn podem ser definidos em /etc/svnserve.conf.

A decisão sobre o uso do Apache ou do svnserce depende de vários fatores. É recomendável pesquisar o manual do Subversion. Mais informações sobre o assunto podem ser encontradas na Seção 27.5.3, “Mais informações”.

27.5.2. Utilização e operação

Use o comando svn (similar ao cvs) para acessar um repositório do Subversion. Use o comando svn help para obter a descrição de um parâmetro de um comando:


checkout (co): Check out a working copy from a repository. 
usage: checkout URL[@REV]... [CAMINHO]

  If specified, REV determines in which revision the URL is first 
  looked up.

  If PATH is omitted, the basename of the URL will be used as 
  the destination. If multiple URLs are given each will be checked 
  out into a sub-directory of PATH, with the name of the sub-directory 
  being the basename of the URL. 
...

O conteúdo fornecido por um servidor configurado corretamente correspondente a determinado repositório pode ser acessado por qualquer cliente com um dos seguintes comandos:

svn list http://svn.example.com/path/to/project

ou

svn list svn://svn.example.com/path/to/project

Grave um projeto existente no diretório atual (registre a saída) com o comando svn checkout:

svn checkout http://svn.example.com/path/to/project nameofproject

O registro da saída cria um novo subdiretório nameofproject no cliente. Operações (adição, cópia, renomeação, exclusão) podem ser executadas em:

svn add file
svn copy oldfile newfile
svn move oldfile newfile
svn delete file

Esses comandos também podem ser usados em diretórios. Além disso, o Subversion pode registrar as propriedades de um arquivo ou diretório:

svn propset license GPL foo.txt

O exemplo anterior define o valor GPL para a propriedade license. Exiba propriedades com svn proplist:

svn proplist --verbose foo.txt
 Properties on 'foo.txt':
 license : GPL

Grave as mudanças no servidor com svn commit. Outro usuário pode incorporar suas mudanças no diretório de trabalho dele sincronizando com o servidor e usando svn update.

Diferentemente do CVS, o status de um diretório em operação no Subversion pode ser exibido sem acesso ao repositório com svn status. Mudanças locais são exibidas em cinco colunas, sendo a primeira a mais importante:

' '

Nenhuma mudança.

'A'

O objeto é marcado para adição.

'D'

O objeto é marcado para exclusão.

'M'

O objeto foi modificado.

'C'

O objeto está em conflito.

'I'

O objeto foi ignorado.

'?'

O objeto não está sendo mantido por controle de versão.

'!'

O objeto é reportado como ausente. Este flag é exibido quando o objeto é apagado ou movido sem o comando svn.

'~'

O objeto estava sendo mantido como um arquivo, mas foi substituído por um diretório, ou ocorreu o oposto.

A segunda coluna mostra o status das propriedades. O significado de todas as outras colunas pode ser lido no manual do Subversion.

27.5.3. Mais informações

O primeiro ponto de referência é a home page do projeto Subversion, em http://subversion.tigris.org/. Um manual altamente recomendável pode ser encontrado no diretório file:///usr/share/doc/packages/subversion/html/book.html depois da instalação do pacote subversion-doc e também está disponível online em http://svnbook.red-bean.com/svnbook/index.html.