47.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 47.1.3, “subversion”.

47.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 sim no Banco de dados Berkeley. 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, , servidor do pacote do 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 47.5.3, “Para obter mais informações”.

47.5.2. Utilização e operação

Use o comando svn (similar ao cvs) para acessar um repositório do subversion. 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. O subversion pode registrar adicionalmente 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 em seu diretório de trabalho 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 o 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.

Use o comando svn help para obter a descrição de um parâmetro de um comando:

svn help
proplist proplist (plist, pl): List all properties on files, dirs, or revisions.
usage: 1. proplist [PATH...] 
2. proplist --revprop -r REV [URL]

  1. Lists versioned props in working copy. 
  2. Lists unversioned remote props on repos revision.
...

47.5.3. Para obter 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.