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 apacheDicas 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.confestá 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]
 
- 
- 
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/repositoriosEste 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 svnusersFaç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 htpasswdou ohtdigest[root@julio-acer ~]# htpasswd -cs /srv/svn/svn-auth julio New password: Re-type new password: Adding password for user julioPara adicionar outros usuários basta tirar o -cdo 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- WEBDAVpara 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
