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]
-
-
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 ohtdigest
[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 servidorhttp://
→ Amigável, utilizaWEBDAV
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