Depois de sofrer com pequenos detalhes na instalação do SVN, decidi postar todas as minhas anotações efetuada durante a instalação e configuração. Sendo assim, abaixo o meu mini-howto.

Requisitos de software (RPMs):

  • apache2
  • apache2-doc
  • apache2-prefork
  • libapr1
  • libapr-util1
  • neon
  • subversion
  • subversion-server
  • subversion-tools
  • subversion-python
  • python-pygments
  • python-setuptools
  • viewvc

Após a instalação dos pacote acima, altere o path no arquivo /etc/sysconfig/svnserve.

 SVNSERVE_OPTIONS="-d -R -r /srv/svn/repos"

Adicione o usuario e grupo SVN:

 useradd -d /srv/svn -s /bin/false svn ; groupadd svn

Na pasta principal do repositório SVN crie as pasta como no exemplo abaixo:

# mkdir -p /srv/svn/repos
# mkdir -p /srv/svn/user_access
# mkdir -p /srv/svn/html

Levante o serviço SVN:

# rcsvnserve restart
Shutting down svnserve                    done
Starting svnserve                         done

Configurando o APACHE

Insira os modulos DAV e DAV_SVN:

# a2enmod dav
# a2enmod dav_svn

Edite o arquivo apache2 em sysconfig:

# vi /etc/sysconfig/apache2

Insira o conteudo abaixo:

APACHE_SERVER_FLAGS="SVN_VIEWCVS"

E também verifique a presenças dos módulos dav e dav_svn:

APACHE_MODULES="... dav dav_svn"

Gerenciando usuários

Crie um arquivo de senha e de grupo de usuarios:

# touch /srv/svn/user_access/svn_passwdfile
# touch /srv/svn/user_access/svn_groupfile
# chown wwwrun:root /srv/svn/user_access/*
# chmod 640 /srv/svn/user_access/*

Adicione o usuario e a senha:

# htpasswd2 /srv/svn/user_access/svn_passwdfile cabelo
New password:
Re-type new password:

Defina o grupo do usuário no arquivo svn_groupfile

neti_committers: cabelo
neti_readers: cabelo pedrinho guilherme

Criando um repositório:

A seguir, os comando para criar um repositório:

# cd /srv/svn/repos
# svnadmin create project1
# chown -R wwwrun:root project1/{dav,db,locks}

Edite o arquivo /etc/apache2/conf.d/subversion.conf como no exemplo abaixo:

<IfModule mod_alias.c>
Alias /repos    /rede1/svn/html
</IfModule>
<Directory /rede1/svn/html>
Options         +Indexes +Multiviews -FollowSymLinks
IndexOptions    FancyIndexing \
ScanHTMLTitles \
NameWidth=* \
DescriptionWidth=* \
SuppressLastModified \
SuppressSize
order allow,deny
allow from all
</Directory>
<Location /repos/project1>
DAV svn
SVNPath /srv/svn/repos/project1
# Limit write access to certain people
AuthType Basic
AuthName "Authorization for project1 required"
AuthUserFile /srv/svn/user_access/project1_passwdfile
AuthGroupFile /srv/svn/user_access/project1_groupfile
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require group project1_committers
</LimitExcept>
# Limit read access to certain people
<Limit GET PROPFIND OPTIONS REPORT>
Require group project1_committers
Require group project1_readers
</Limit>
</Location>

Configurando o ViewVC

No arquivo /srv/viewcvs/vewcvs.conf, insira os projetos:

# vi /srv/viewcvs/vewcvs.conf

Insira as linhas abaixo:

svn_roots:
project1 : /srv/svn/repos/project1 ,
project2 : /srv/svn/repos/project2

Reinicie o Apache:

# rcapache2 restart

Algumas Dicas:

Verificando as informações de um repositório

# svnlook info /srv/svn/repos/project1/
cabelo
2010-05-12 18:20:18 -0300 (Qua, 12 Mai 2010)
20
- Versao de entrega.

Criando um diretorio:

$ svn mkdir http://10.0.0.250/repos/project1/NOME-DIRETORIO

Importando um projeto para SVN

# svn import /tmp/myproject http://10.0.0.250/repos/project1 -m "initial import"
Fazendo um CheckOut:
$ svn co http://10.0.0.250/repos/project1
$ svn co http://10.0.0.250/repos/project1 -r 20
Comando commit  e update
# svn commit button.c
# svn commit --message "Corrected number of cheese slices."
# svn update
# svn commit --message "Add a few more things"
Backup e restore:
# svnadmin dump /srv/svn/repos/project1  > /tmp/backup.dump
# svnadmin load /srv/svn/repos/project1 < /tmp/backup.dump

Editando a string de log:

$ svnadmin setlog /path/to/repository  -r 10662 --bypass-hooks message_file.txt

Copiando, movendo, adicionando e excluindo arquivos.

#  svn add arquivo.ext
#  svn delete arquivo.ext
#  svn copy arquivo1.ext arquivo2.ext
#  svn move arquivo1.ext arquivo2.ext

Para modificar as propriedades no código fonte, basta inserir as tag abaixo e executar o comando conforme o exemplo:

/* $URL$
$Rev$
$Author$
$Date$
$Id$
*/
# svn propset svn:keywords "URL Rev Author Date Id"  was

Bom… por hoje é só…