Apache Suvbersion (SVN)
Subversion (SVN) é um sistema de controle de versão (VCS) open source que surgiu para substituir o limitado CVS. O SVN gerencia arquivos e diretórios e as alterações realizadas sobre eles através do tempo. Isso nos permite recuperar versões antigas dos seus dados ou examinar o histórico de mudanças.
Apesar de eu não ser muito fã do subversion (Git FTW!), eu também não o odeio, como o Linus e já precisei usar para um projeto na faculdade.
Efetue as instalações e configurações iniciais
Instale o Subversion
julio@julio-acer ~> sudo pacman -S subversion
Instale o Apache
julio@julio-acer ~> sudo pacman -S apache
Dicas para configurar o Apache estão disponível na Wiki.
Verifique se as seguintes linhas estão presentes no
/etc/httpd/conf/httpd.conf e adicione as que não estiverem: LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so
Certifique-se de que a linha `Include
/etc/httpd/conf/extra/httpd-ssl.conf` está descomentada no `/etc/httpd/conf/httpd.conf`
Gere um certificado SSL
[root@julio-acer ~]# cd /etc/httpd/conf/ [root@julio-acer conf]# openssl req -new -x509 -keyout server.key -out server.crt -days 365 -nodes Generating a 1024 bit RSA private key ..++++++ ........++++++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:BR State or Province Name (full name) [Some-State]:Sao Paulo Locality Name (eg, city) []:Sao Jose dos Campos Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:Julio Email Address []:julio@...
Adicione as seguintes linhas ao arquivo
`/etc/httpd/conf/extra/httpd-ssl.conf` para fazer o Apache suportar SVN ## Para o SVN <Location /svn> DAV svn SVNParentPath /srv/svn/repositorios AuthName "SVN Repositories" AuthType Basic AuthzSVNAccessFile /srv/svn/svn-policy AuthUserFile /srv/svn/svn-auth Satisfy Any Require valid-user </Location>[/sourcecode] ```bash
Configure os diretórios, usuários e permissões
Crie um grupo para acesso ssh aos repositórios
[root@julio-acer ~]# groupadd svnusers
Crie um diretório onde todos os repositórios serão mantidos
julio@julio-acer ~> mkdir -p /srv/svn/repositorios julio@julio-acer ~> chmod -R 755 /srv/svn/repositorios
Este diretório pode ser criado em outro local. Aqui deixei no /srv/svn pois é o diretório que utilizei quando instalei o rTorrent a partir do SVN, conforme esse Post.
Garanta a você e ao Apache acesso aos repositórios
julio@julio-acer ~> sudo gpasswd -a http svnusers Adding user http to group svnusers julio@julio-acer ~> sudo gpasswd -a julio svnusers Adding user julio to group svnusers
Faça logout para ter efeito.
Crie o arquivo /srv/svn/svn-policy e deixe-o parecido com o seguinte
julio@julio-acer ~> cat /srv/svn/svn-policy [/] * = r [projeto:/] julio = rw
Crie o arquivo /srv/svn/svn-auth com o htpasswd ou o htdigest
[root@julio-acer ~]# htpasswd -cs /srv/svn/svn-auth julio New password: Re-type new password: Adding password for user julio
Para adicionar outros usuários basta tirar o “-c” do comando.
Crie um repositório
julio@julio-acer ~> svnadmin create /srv/svn/repositorios/projeto
Altere as permissões
julio@julio-acer ~> sudo chown -R http.svnusers /srv/svn/repositorios/projeto julio@julio-acer ~> sudo chmod -R g-w /srv/svn/repositorios/projeto julio@julio-acer ~> sudo chmod -R g+w /srv/svn/repositorios/projeto/{db,locks}
A estrutura típica de um repositório se parece com o seguinte:
project |--branches |--tags |--trunk
Branches: Guarda cópias dos arquivos sendo desenvolvidos ou em manutenção, mas em uma linha de desenvolvimento separada. Por exemplo, o código para a v4 pode estar dentro de um Branchpara permitir pessoas trabalharem em mudanças futuras que não serão implementadas tão cedo. Isso permite elas fazerem seu trabalho sem colocar código prematuramente no trunk.
Tags: Guarda cópias do software em seus vários estágios de desenvolvimento, como v1, v2 e v3.
Trunk: - É usada para manter a versão estável mais atualizada do software.
Colocando um projeto sob controle de versão Supondo que já temos um projeto chamado codefest, vamos importar os seus arquivos para a pasta trunk do repositório “projeto”:
julio@julio-acer ~> svn import ~/codefest/ file:///srv/svn/repositorios/projeto/trunk -m 'importacao inicial' Adding /home/julio/codefest/amostras Adding (bin) /home/julio/codefest/amostras/codefest.xls Adding /home/julio/codefest/amostras/imagens Adding (bin) /home/julio/codefest/amostras/imagens/1.jpg Adding (bin) /home/julio/codefest/amostras/imagens/2.jpg Adding (bin) /home/julio/codefest/amostras/imagens/3.jpg Adding /home/julio/codefest/amostras/codefest.txt Adding /home/julio/codefest/código Adding /home/julio/codefest/código/matching.py Adding /home/julio/codefest/código/color_name.py Adding /home/julio/codefest/código/inicializador.py Adding /home/julio/codefest/código/image.py Adding /home/julio/codefest/código/dominant_color.py Committed revision 1.
Para listar o diretório trunk após o commit, basta usar o seguinte comando
julio@julio-acer ~> svn ls file:///srv/svn/repositorios/projeto/trunk amostras/ código/
Checkout
julio@julio-acer ~> svn co file:///srv/svn/repositorios/projeto/trunk ~/codefest-svn A /home/julio/codefest-svn/amostras A /home/julio/codefest-svn/amostras/codefest.xls A /home/julio/codefest-svn/amostras/imagens A /home/julio/codefest-svn/amostras/imagens/1.jpg A /home/julio/codefest-svn/amostras/imagens/2.jpg A /home/julio/codefest-svn/amostras/imagens/3.jpg A /home/julio/codefest-svn/amostras/codefest.txt A /home/julio/codefest-svn/código A /home/julio/codefest-svn/código/matching.py A /home/julio/codefest-svn/código/color_name.py A /home/julio/codefest-svn/código/inicializador.py A /home/julio/codefest-svn/código/image.py A /home/julio/codefest-svn/código/dominant_color.py Checked out revision 1.
Protocolos
file:// -> Básico, mas você só poderá trabalhar na mesma máquina que hospeda os repositórios. svn:// -> Utiliza um servidor para comunicar com o Subversion (Apache neste caso). svn+ssh:// -> Utiliza SSH para comunicar com o servidor http:// -> Amigável, utiliza WEBDAV para permitir comunicação via HTTP com os repositórios do Subversion. https:// -> Como o http, porém com criptografia SSL
Reinicie o Apache
julio@julio-acer ~> sudo /etc/rc.d/httpd restart Password: :: Restarting Apache Web Server [DONE]
Agora você deve conseguir navegar pelo projeto acessando https://localhost/svn/projeto/.
Links
- http://rockfloat.com/howto/gentoo-subversion.html ➜ Explicação para Gentoo (principal fonte)
- http://svnbook.red-bean.com/ ➜ Livro em Creative Commons
- http://ankhsvn.open.collab.net/ ➜ Para Visual Studio
- https://wiki.archlinux.org/index.php/Subversion_Setup
- http://en.wikipedia.org/wiki/WebDAV
- http://svnbook.red-bean.com/en/1.0/ch06s04.html
- http://subversion.apache.org/features.html
- http://www.javaworld.com/javaworld/jw-09-2007/jw-09-versioncontrol.html?page=1 ➜ Excelente texto comparando CVS, SVN, Mercurial e Bazaar