Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalando_e_configurando_o_subversion_e_o_websvn_no_centos_6.3_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Instalando e Configurando o Subversion e o WebSVN no CentOS 6.3 ======
  
 +No mundo dos softwares open-source,​ o Concurrent Versions System (CVS) foi a ferramenta escolhida
 +para controle de versão por muitos anos. E com razão. O próprio CVS é um software open-source
 +também, e seu modus operandi não-restritivo e o suporte a operações de rede permitiram que diversos
 +programadores distribuídos geograficamente compartilhassem seus trabalhos. Ele atende à natureza
 +colaborativa do mundo open-source como um todo. O CVS e seu modelo de desenvolvimento semi-
 +caótico se tornou um marco da cultura open-source.
 +
 +Mas o CVS também tinha seus defeitos, e simplesmente corrigir estes defeitos prometia ser um enorme
 +esforço. Chega o Subversion. Desenvolvido para ser um sucessor do CVS, os criadores do Subversion
 +pretendiam ganhar a simpatia dos usuários CVS de duas maneiras—criando um sistema open-source
 +com o projeto (e a “aparência”) semelhante ao do CVS, e tentando evitar muitos de seus conhecidos
 +defeitos. Por mais que o resultado não seja necessariamente a próxima grande evolução no projeto
 +de controle de versão, o Subversion é muito poderoso, muito usável, e muito flexível. E agora muitos
 +projetos open-source,​ quase todos recém-iniciados,​ preferem agora o Subversion ao CVS.
 +
 +Prepare o seu sistema com o seguinte script http://​wiki.douglasqsantos.com.br/​doku.php/​confinicialcentos6_en para que não falte nenhum pacote ou configuração.
 +
 +Vamos instalar os pacotes necessários
 +
 +<sxh bash>
 +yum check-update && yum install subversion-devel mod_dav_svn subversion mod_ssl httpd -y
 +</​sxh>​
 +
 +Agora vamos inserir o apache na inicialização do sistema
 +<sxh bash>
 +chkconfig --add httpd
 +chkconfig httpd on
 +</​sxh>​
 +
 +Agora vamos criar o diretório home do svn
 +<sxh bash>
 +mkdir -p /home/svn
 +</​sxh>​
 +
 +Agora vamos criar o primeiro projeto do svn
 +<sxh bash>
 +svnadmin create /​home/​svn/​ShellScript --fs-type fsfs
 +</​sxh>​
 +
 +Vamos acertar as permissões do diretório do svn
 +<sxh bash>
 +chown -R apache:​apache /home/svn
 +</​sxh>​
 +
 +Agora vamos criar um virtual host para o nosso Subversion
 +<sxh apache>
 +vim /​etc/​httpd/​conf.d/​svn.conf
 +<​VirtualHost *:80>
 +  ServerName svn.douglasqsantos.com.br
 +  Redirect / https://​svn.douglasqsantos.com.br/​
 +</​VirtualHost>​
 +
 +<​VirtualHost *:443>
 + ​ServerAdmin admin@douglasqsantos.com.br
 + ​ServerName svn.douglasqsantos.com.br
 +
 + <​Location /svn>
 +    DAV svn
 +    SVNParentPath /home/svn
 +    AuthType Basic
 +    AuthName "​Subversion Repository"​
 +    AuthUserFile /​home/​svn/​passwd
 +    SVNListParentPath on
 +    AuthzSVNAccessFile /​home/​svn/​authz
 +    Require valid-user
 +    SSLRequireSSL
 +</​Location>​
 +
 + ​ErrorLog /​var/​log/​httpd/​svn.error.log
 + ​LogLevel warn
 + ​CustomLog /​var/​log/​httpd/​svn.access.log combined
 + ​ServerSignature Off
 + ​SSLEngine On
 + ​SSLCertificateFile /​etc/​httpd/​ssl/​apache.pem
 + ​SSLCertificateKeyFile /​etc/​httpd/​ssl/​apache.key
 +</​VirtualHost>​
 +</​sxh>​
 +
 +Para não precisar utilizar o dns para resolver o virtual host vamos acertar o /etc/hosts no cliente
 +<sxh bash>
 +vim /etc/hosts
 +127.0.0.1 ​      ​localhost
 +127.0.1.1 ​      ​douglas
 +192.168.1.40 ​   svn.douglasqsantos.com.br ​    svn
 +192.168.1.40 ​   websvn.douglasqsantos.com.br ​ websvn
 +</​sxh>​
 +
 +Agora vamos fazer um teste para verificarmos se estamos chegando no servidor pelo cliente
 +<sxh bash>
 +ping svn.douglasqsantos.com.br -c 3
 +PING svn.douglasqsantos.com.br (192.168.1.40) 56(84) bytes of data.
 +64 bytes from svn.douglasqsantos.com.br (192.168.1.40):​ icmp_seq=1 ttl=64 time=0.383 ms
 +64 bytes from svn.douglasqsantos.com.br (192.168.1.40):​ icmp_seq=2 ttl=64 time=0.332 ms
 +64 bytes from svn.douglasqsantos.com.br (192.168.1.40):​ icmp_seq=3 ttl=64 time=0.734 ms
 +
 +--- svn.douglasqsantos.com.br ping statistics ---
 +3 packets transmitted,​ 3 received, 0% packet loss, time 2001ms
 +rtt min/​avg/​max/​mdev = 0.332/​0.483/​0.734/​0.178 ms
 +</​sxh>​
 +
 +Vamos agora acertar as chaves para a conexão via https
 +
 +Vamos criar o diretório para armazenar as chaves e vamos acessá-lo
 +<sxh bash>
 +mkdir /​etc/​httpd/​ssl
 +cd /​etc/​httpd/​ssl
 +</​sxh>​
 +
 +Agora vamos gerar as chaves
 +<sxh bash>
 +openssl req -new -x509 -days 365 -nodes -out apache.pem -keyout apache.key
 +Generating a 1024 bit RSA private key
 +..............++++++
 +...........................................++++++
 +writing new private key to '​apache.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]:​Parana
 +Locality Name (eg, city) []:Curitiba
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:​Douglas ​
 +Organizational Unit Name (eg, section) []:Douglas
 +Common Name (eg, YOUR name) []:Douglas
 +Email Address []:​douglas@douglasqsantos.com.br
 +</​sxh>​
 +
 +Agora vamos criar um usuário para poder acessar os nossos projetos no Subversion com o htpasswd
 +<sxh bash>
 +htpasswd -cm /​home/​svn/​passwd douglas
 +New password: #senha
 +Re-type new password: #senha
 +Adding password for user douglas
 +</​sxh>​
 +
 +Agora vamos acertar as permissões do Subversion para podermos acessar os nossos projetos
 +<sxh bash>
 +vim /​home/​svn/​authz
 +[ShellScript:/​]
 +douglas = rw
 +</​sxh>​
 +
 +Aqui estou especificando que o usuário douglas vai ter acesso de leitura e escrita no projeto ShellScript porém poderíamos ter douglas = r o usuário douglas teria somente acesso de leitura ou ainda douglas = aqui o usuário não teria acesso algum no projeto ShellScript
 +
 +Agora vamos adicionar a porta padrão para os virtualhosts do apache trabalhar em https
 +<sxh apache>
 +vim /​etc/​httpd/​conf.d/​ssl.conf
 +[...]
 +Listen 443
 +#Temos que adicionar a linha abaixo
 +NameVirtualHost *:443
 +
 +</​sxh>​
 +
 +Agora vamos adicionar a porta padrão para os virtualhost do apache trabalhar com http
 +<sxh bash>
 +sed -i '​s/#​NameVirtualHost \*:​80/​NameVirtualHost \*:​80/​g'​ /​etc/​httpd/​conf/​httpd.conf
 +</​sxh>​
 +
 +Agora vamos reiniciar o apache
 +<sxh bash>
 +/​etc/​init.d/​httpd restart
 +</​sxh>​
 +
 +Para um teste simples acesse https://​svn.douglasqsantos.com.br/​svn/​ShellScript/​ vamos ter uma página com o seguinte conteúdo
 +<sxh bash>
 +ShellScript - Revision 0: /
 +</​sxh>​
 +
 +Agora vamos instlar o WebSVN e suas dependências
 +<sxh bash>
 +yum install websvn -y
 +</​sxh>​
 +
 +
 +Agora vamos fazer alguns acertos no WebSVN ​
 +
 +Deixe o arquivo como abaixo
 +<sxh apache>
 +vim /​etc/​httpd/​conf.d/​websvn.conf
 +<​VirtualHost *:80>
 +  ServerName websvn.douglasqsantos.com.br
 +  Redirect / https://​svn.douglasqsantos.com.br/​
 +</​VirtualHost>​
 +
 +<​VirtualHost *:443>
 + ​ServerAdmin admin@douglasqsantos.com.br
 + ​ServerName websvn.douglasqsantos.com.br
 + ​DocumentRoot "/​usr/​share/​websvn/"​
 +
 +<​Directory "/​usr/​share/​websvn/">​
 +  DirectoryIndex wsvn.php
 +  Options MultiViews
 +  Order allow,deny
 +  Allow from all
 +  AuthType Basic
 +  AuthName "​WebSVN Repository"​
 +  AuthUserFile /​home/​svn/​passwd
 +  Require valid-user
 +</​Directory>​
 +
 + ​ErrorLog /​var/​log/​httpd/​websvn.error.log
 + ​LogLevel warn
 + ​CustomLog /​var/​log/​httpd/​websvn.access.log combined
 + ​ServerSignature Off
 + ​SSLEngine On
 + ​SSLCertificateFile /​etc/​httpd/​ssl/​apache.pem
 + ​SSLCertificateKeyFile /​etc/​httpd/​ssl/​apache.key
 +</​VirtualHost>​
 +</​sxh>​
 +
 +Agora vamos acertar o WebSVN para efetuar a autenticação
 +<sxh php>
 +vim /​etc/​websvn/​config.php
 +[...]
 +$config->​parentPath("/​home/​svn/"​);​
 +[...]
 +$config->​useAuthenticationFile('/​home/​svn/​authz'​);​
 +[...]
 +</​sxh>​
 +
 +Vamos fazer um ultimo ajuste no websvn
 +<sxh bash>
 +sed -i "​s|$locwebsvnhttp = '/​websvn';​|$locwebsvnhttp = '';​|g"​ /​usr/​share/​websvn/​wsvn.php
 +</​sxh>​
 +
 +Agora vamos reiniciar o nosso apache
 +<sxh bash>
 +/​etc/​init.d/​httpd restart
 +</​sxh>​
 +
 +Agora podemos testar em https://​websvn.douglasqsantos.com.br/​
 +
 +Agora vamos criar mais um projeto para teste 
 +
 +Vamos no servidor criar um novo projeto ​
 +<sxh bash>
 +svnadmin create /​home/​svn/​douglas --fs-type fsfs
 +</​sxh>​
 +
 +Vamos acertar as permissões do nosso projeto ​
 +<sxh bash>
 +chown apache:​apache -R /​home/​svn/​douglas
 +</​sxh>​
 +
 +
 +Vamos acertar as permissões do acesso aos repositórios
 +<sxh bash>
 +vim /​home/​svn/​authz
 +[ShellScript:/​]
 +douglas = rw
 +[douglas:/]
 +douglas = rw
 +</​sxh>​
 +
 +
 +Agora vamos instalar em um cliente o Subversion para testar
 +<sxh bash>
 +yum install subversion -y
 +</​sxh>​
 +
 +Agora vamos criar a estrutura de diretórios para os nossos projetos
 +<sxh bash>
 +mkdir -p /​home/​douglas/​ShellScript/​{trunk,​tags,​branches}
 +mkdir -p /​home/​douglas/​douglas/​{trunk,​tags,​branches}
 +</​sxh>​
 +
 +Agora vamos fazer um teste de importação de projeto
 +<sxh bash>
 +svn import /​home/​douglas/​douglas https://​svn.douglasqsantos.com.br/​svn/​douglas -m '​Importando o projeto inicial'​
 +Erro validando o certificado de servidor para '​https://​svn.douglasqsantos.com.br:​443':​
 + - O certificado não foi emitido por uma autoridade confiável. Use sua
 +   ​impressão digital para validar o certificado manualmente
 + - O nome do servidor do certificado não bate.
 +Informações do certificado:​
 + - Nome do servidor: Douglas
 + - Validade: de Tue, 11 Oct 2011 18:02:28 GMT até Wed, 10 Oct 2012 18:02:28 GMT
 + - Emissor: Douglas, Douglas , Curitiba, Parana, BR
 + - Impressão digital: a7:​47:​2d:​63:​ae:​ec:​e3:​28:​1f:​e7:​0d:​53:​62:​00:​15:​fe:​0b:​c9:​26:​2c
 +(R)ejeitar, aceitar (t)emporariamente ou aceitar (p)permanente?​ p
 +Área de autenticação:​ <​https://​svn.douglasqsantos.com.br:​443>​ Subversion Repository
 +Senha para '​root':​ #ENTER
 +Área de autenticação:​ <​https://​svn.douglasqsantos.com.br:​443>​ Subversion Repository
 +Usuário: douglas
 +Senha para '​douglas': ​
 +Adicionando ​   /​home/​douglas/​douglas/​trunk
 +Adicionando ​   /​home/​douglas/​douglas/​branches
 +Adicionando ​   /​home/​douglas/​douglas/​tags
 +
 +-----------------------------------------------------------------------
 +ATTENTION ​ Your password for authentication realm:
 +
 +   <​https://​svn.douglasqsantos.com.br:​443>​ Subversion Repository
 +
 +can only be stored to disk unencrypted ​ You are advised to configure
 +your system so that Subversion can store passwords encrypted, if
 +possible. ​ See the documentation for details.
 +
 +You can avoid future appearances of this warning by setting the value
 +of the '​store-plaintext-passwords'​ option to either '​yes'​ or '​no'​ in
 +'/​root/​.subversion/​servers'​.
 +-----------------------------------------------------------------------
 +Store password unencrypted (yes/no)? no
 +
 +Commit da revisão 1.
 +</​sxh>​
 +
 +Agora vamos listar o nosso projeto no servidor
 +<sxh bash>
 +
 +svn list https://​svn.douglasqsantos.com.br/​svn/​douglas
 +Área de autenticação:​ <​https://​svn.douglasqsantos.com.br:​443>​ Subversion Repository
 +Senha para '​douglas': ​
 +
 +-----------------------------------------------------------------------
 +ATTENTION ​ Your password for authentication realm:
 +
 +   <​https://​svn.douglasqsantos.com.br:​443>​ Subversion Repository
 +
 +can only be stored to disk unencrypted ​ You are advised to configure
 +your system so that Subversion can store passwords encrypted, if
 +possible. ​ See the documentation for details.
 +
 +You can avoid future appearances of this warning by setting the value
 +of the '​store-plaintext-passwords'​ option to either '​yes'​ or '​no'​ in
 +'/​root/​.subversion/​servers'​.
 +-----------------------------------------------------------------------
 +Store password unencrypted (yes/no)? no
 +branches/
 +tags/
 +trunk/
 +</​sxh>​
 +
 +Agora vamos voltar para o WebSVN para dar uma olhada em nosso projetos acesse https://​websvn.douglasqsantos.com.br/​
 +
 +Agora selecione o projeto douglas, como pode ser notado temos a estrutura que importamos para o svn
 +
 +Agora vamos efetuar algumas modificações
 +
 +Primeiro temos que fazer um checkout do repositório no cliente
 +
 +Vamos criar os diretórios para efetuar o checkout
 +<sxh bash>
 +mkdir /​home/​douglas/​projeto1
 +cd /​home/​douglas/​projeto1
 +</​sxh>​
 +
 +Vamos fazer o checkout
 +<sxh bash>
 +
 +svn co https://​svn.douglasqsantos.com.br/​svn/​douglas
 +Área de autenticação:​ <​https://​svn.douglasqsantos.com.br:​443>​ Subversion Repository
 +Senha para '​douglas': ​
 +
 +-----------------------------------------------------------------------
 +ATTENTION ​ Your password for authentication realm:
 +
 +   <​https://​svn.douglasqsantos.com.br:​443>​ Subversion Repository
 +
 +can only be stored to disk unencrypted ​ You are advised to configure
 +your system so that Subversion can store passwords encrypted, if
 +possible. ​ See the documentation for details.
 +
 +You can avoid future appearances of this warning by setting the value
 +of the '​store-plaintext-passwords'​ option to either '​yes'​ or '​no'​ in
 +'/​root/​.subversion/​servers'​.
 +-----------------------------------------------------------------------
 +Store password unencrypted (yes/no)? no
 +A    douglas/​trunk
 +A    douglas/​branches
 +A    douglas/​tags
 +Gerado cópia de trabalho para revisão 1.
 +</​sxh>​
 +
 +Agora que já temos o checkout vamos fazer modificações no projeto
 +<sxh bash>
 +
 +cd /​home/​douglas/​projeto1/​douglas/​trunk
 +</​sxh>​
 +
 +Agora vamos copiar alguns arquivos para o projeto para testarmos o SVN
 +<sxh bash>
 +
 +cp -Rf /​etc/​network .
 +</​sxh>​
 +
 +Vamos verificar o status do SVN
 +<sxh bash>
 +
 +svn status
 +?       ​network
 +</​sxh>​
 +
 +Como pode ser notado o network está sem atributo então temos que marcar ele para ser atualizado no repositório
 +
 +Agora vamos marcar o network para ser atualizado no repositório
 +<sxh bash>
 +
 +svn add network
 +A         ​network
 +A         ​network/​if-down.d
 +A         ​network/​if-down.d/​wpasupplicant
 +A         ​network/​if-down.d/​avahi-autoipd
 +A         ​network/​if-down.d/​upstart
 +A         ​network/​if-down.d/​postfix
 +A         ​network/​if-pre-up.d
 +A         ​network/​if-pre-up.d/​wpasupplicant
 +A         ​network/​if-pre-up.d/​wireless-tools
 +A         ​network/​if-post-down.d
 +A         ​network/​if-post-down.d/​wpasupplicant
 +A         ​network/​if-post-down.d/​wireless-tools
 +A         ​network/​if-post-down.d/​avahi-daemon
 +A         ​network/​if-up.d
 +A         ​network/​if-up.d/​wpasupplicant
 +A         ​network/​if-up.d/​openssh-server
 +A         ​network/​if-up.d/​avahi-autoipd
 +A         ​network/​if-up.d/​upstart
 +A         ​network/​if-up.d/​ntpdate
 +A         ​network/​if-up.d/​postfix
 +A         ​network/​if-up.d/​avahi-daemon
 +A         ​network/​interfaces
 +</​sxh>​
 +
 +
 +Vamos listar agora o status dos novos arquivos novamente
 +<sxh bash>
 +
 +svn status
 +A       ​network
 +A       ​network/​if-up.d
 +A       ​network/​if-up.d/​ntpdate
 +A       ​network/​if-up.d/​upstart
 +A       ​network/​if-up.d/​openssh-server
 +A       ​network/​if-up.d/​avahi-daemon
 +A       ​network/​if-up.d/​wpasupplicant
 +A       ​network/​if-up.d/​avahi-autoipd
 +A       ​network/​if-up.d/​postfix
 +A       ​network/​interfaces
 +A       ​network/​if-down.d
 +A       ​network/​if-down.d/​upstart
 +A       ​network/​if-down.d/​wpasupplicant
 +A       ​network/​if-down.d/​avahi-autoipd
 +A       ​network/​if-down.d/​postfix
 +A       ​network/​if-pre-up.d
 +A       ​network/​if-pre-up.d/​wpasupplicant
 +A       ​network/​if-pre-up.d/​wireless-tools
 +A       ​network/​if-post-down.d
 +A       ​network/​if-post-down.d/​avahi-daemon
 +A       ​network/​if-post-down.d/​wpasupplicant
 +A       ​network/​if-post-down.d/​wireless-tools
 +</​sxh>​
 +
 +Como podemo ser notado temos o atributo A agora
 +
 +  - A item: O arquivo, diretório, ou link simbólico item está agendado para ser adicionado ao repositório.
 +  - C item: O arquivo item está em um estado de conflito. Isto é, as modificações recebidas do servidor durante um update se sobrepõem às alterações locais feitas por você em sua cópia de trabalho. Você deve resolver este conflito antes de submeter suas alterações ao repositório.
 +  - D item: O arquivo, diretório, ou link simbólico item está agendado para ser excluído do repositório.
 +  - M item: O conteúdo do arquivo item foi modificado.
 +
 +Agora vamos fazer o update do nosso repositório
 +<sxh bash>
 +
 +svn commit -m '​Adicionado o diretorio network'​
 +Adicionando ​   trunk/​network
 +Adicionando ​   trunk/​network/​if-down.d
 +Adicionando ​   trunk/​network/​if-down.d/​avahi-autoipd
 +Adicionando ​   trunk/​network/​if-down.d/​postfix
 +Adicionando ​   trunk/​network/​if-down.d/​upstart
 +Adicionando ​   trunk/​network/​if-down.d/​wpasupplicant
 +Adicionando ​   trunk/​network/​if-post-down.d
 +Adicionando ​   trunk/​network/​if-post-down.d/​avahi-daemon
 +Adicionando ​   trunk/​network/​if-post-down.d/​wireless-tools
 +Adicionando ​   trunk/​network/​if-post-down.d/​wpasupplicant
 +Adicionando ​   trunk/​network/​if-pre-up.d
 +Adicionando ​   trunk/​network/​if-pre-up.d/​wireless-tools
 +Adicionando ​   trunk/​network/​if-pre-up.d/​wpasupplicant
 +Adicionando ​   trunk/​network/​if-up.d
 +Adicionando ​   trunk/​network/​if-up.d/​avahi-autoipd
 +Adicionando ​   trunk/​network/​if-up.d/​avahi-daemon
 +Adicionando ​   trunk/​network/​if-up.d/​ntpdate
 +Adicionando ​   trunk/​network/​if-up.d/​openssh-server
 +Adicionando ​   trunk/​network/​if-up.d/​postfix
 +Adicionando ​   trunk/​network/​if-up.d/​upstart
 +Adicionando ​   trunk/​network/​if-up.d/​wpasupplicant
 +Adicionando ​   trunk/​network/​interfaces
 +Transmitindo dados do arquivo .................
 +Commit da revisão 2.
 +</​sxh>​
 +
 +Vamos agora em https://​svn.douglasqsantos.com.br/​websvn para analisarmos o nosso repositório
 +
 +Selecione douglas agora já notamos que estamos na revisão 2, agora navegue pelo seu projeto para analisar
 +
 +Agora vamos deletar o diretório network do repositório pois ele não deve estar no repositório,​ no cliente
 +<sxh bash>
 +
 +svn delete network/
 +D         ​network/​if-up.d/​ntpdate
 +D         ​network/​if-up.d/​upstart
 +D         ​network/​if-up.d/​openssh-server
 +D         ​network/​if-up.d/​avahi-daemon
 +D         ​network/​if-up.d/​wpasupplicant
 +D         ​network/​if-up.d/​avahi-autoipd
 +D         ​network/​if-up.d/​postfix
 +D         ​network/​if-up.d
 +D         ​network/​interfaces
 +D         ​network/​if-down.d/​upstart
 +D         ​network/​if-down.d/​wpasupplicant
 +D         ​network/​if-down.d/​avahi-autoipd
 +D         ​network/​if-down.d/​postfix
 +D         ​network/​if-down.d
 +D         ​network/​if-pre-up.d/​wpasupplicant
 +D         ​network/​if-pre-up.d/​wireless-tools
 +D         ​network/​if-pre-up.d
 +D         ​network/​if-post-down.d/​avahi-daemon
 +D         ​network/​if-post-down.d/​wpasupplicant
 +D         ​network/​if-post-down.d/​wireless-tools
 +D         ​network/​if-post-down.d
 +D         ​network
 +</​sxh>​
 +
 +Como eu já estou no diretório /​home/​douglas/​projeto1/​douglas/​trunk preciso somente passar o nome do diretório que quero remover caso contrário tem que passar a PATH do diretório a remover
 +
 +Agora vamos atualizar no repositório
 +<sxh bash>
 +
 +svn commit -m '​Removendo o diretorio network'​
 +Apagando ​      ​trunk/​network
 +
 +Commit da revisão 3.
 +</​sxh>​
 +
 +Agora novamente no WebSVN verefique se o seu diretório network foi apagado do repositório
 +
 +Agora vamos fazer um teste de modificação
 +<sxh bash>
 +vim /​home/​douglas/​projeto1/​douglas/​trunk/​ola.sh
 +#!/bin/bash
 +
 +echo "​Ola"​
 +</​sxh>​
 +
 +Agora vamos subir este arquivo para o repositório
 +
 +Primeiro temos que marcar ele para ser atualizado
 +<sxh bash>
 +
 +svn add ola.sh ​
 +A         ​ola.sh
 +</​sxh>​
 +
 +Agora vamos mandar atualizar ele no repositório
 +<sxh bash>
 +
 +svn commit -m 'Teste de modificacao'​
 +Adicionando ​   trunk/​ola.sh
 +Transmitindo dados do arquivo .
 +Commit da revisão 4.
 +</​sxh>​
 +
 +Agora acesse novamente https://​websvn.douglasqsantos.com.br/​ para verificar se o arquivo se encontra lá
 +
 +Agora vamos efetuar uma modificação no arquivo
 +<sxh bash>
 +
 +vim /​home/​douglas/​projeto1/​douglas/​trunk/​ola.sh
 +#!/bin/bash
 +#script para gerar um looping infinito
 +
 +while true;
 +do
 +echo "​Ola";​
 +done
 +</​sxh>​
 +
 +Agora vamos verificar o atributo do arquivo
 +<sxh bash>
 +
 +svn status
 +M       ​ola.sh
 +</​sxh>​
 +
 +Agora vamos atualizar o arquivo ​
 +<sxh bash>
 +
 +svn commit -m 'Teste de modificação'​
 +Enviando ​      ​trunk/​ola.sh
 +Transmitindo dados do arquivo .
 +Commit da revisão 5.
 +</​sxh>​
 +
 +Agora vamos verificar a diferença dos arquivos em https://​websvn.douglasqsantos.com.br/​
 +
 +Em douglas/​trunk/​ola.sh agora selecione Diferenças com a anterior ​
 +
 +Agora vamos poder acompanhar a diferença entre as versões dos arquivos ​
 +
 +Agora vamos modificar mais uma vez o arquivo para fazer um teste de diferença de arquivos ​
 +
 +<sxh bash>
 +
 +vim /​home/​douglas/​projeto1/​douglas/​trunk/​ola.sh
 +#!/bin/bash
 +#script para gerar um looping infinito
 +
 +while true;
 +do
 +echo "$(ls -lhaiR /)";
 +done
 +</​sxh>​
 +
 +Agora vamos verificar a diferença do arquivo atual com o da ultima versão
 +<sxh bash>
 +
 +svn diff /​home/​douglas/​projeto1/​douglas/​trunk/​ola.sh
 +Index: /​home/​douglas/​projeto1/​douglas/​trunk/​ola.sh
 +======================================================================================================================================================================
 +--- /​home/​douglas/​projeto1/​douglas/​trunk/​ola.sh ​ (revisão 5)
 ++++ /​home/​douglas/​projeto1/​douglas/​trunk/​ola.sh (cópia de trabalho)
 +@@ -3,5 +3,5 @@
 + 
 + while true;
 + do
 +-echo "​Ola";​
 ++echo "$(ls -lhaiR /)";
 + done
 +</​sxh>​
 +
 +Como pode ser notado ele nos mostra todas as diferenças dos arquivos muito útil para a geração de patchs, vamos gerar um patch para teste
 +<sxh bash>
 +
 +svn diff ola.sh > ola.patch
 +</​sxh>​
 +
 +Vamos analisar agora o nosso patch
 +<sxh bash>
 +
 +cat ola.patch ​
 +Index: ola.sh
 +======================================================================================================================================================================
 +--- ola.sh ​ (revisão 5)
 ++++ ola.sh ​ (cópia de trabalho)
 +@@ -3,5 +3,5 @@
 + 
 + while true;
 + do
 +-echo "​Ola";​
 ++echo "$(ls -lhaiR /)";
 + done
 +</​sxh>​
 +
 +Agora vamos fazer um chekcout em outro diretório para utilizar o patch
 +<sxh bash>
 +
 +mkdir -p /​tmp/​douglas
 +cd /​tmp/​douglas
 +svn co https://​svn.douglasqsantos.com.br/​svn/​douglas
 +A    douglas/​trunk
 +A    douglas/​trunk/​ola.sh
 +A    douglas/​branches
 +A    douglas/​tags
 +Gerado cópia de trabalho para revisão 5.
 +</​sxh>​
 +
 +Vamos verificar o arquivo ola.sh
 +<sxh bash>
 +
 +cat /​tmp/​douglas/​douglas/​trunk/​ola.sh ​
 +#!/bin/bash
 +#script para gerar um looping infinito
 +
 +while true;
 +do
 +echo "​Ola";​
 +done
 +</​sxh>​
 +
 +Como pode ser notado temos o arquivo sem as modificações que fizemos vamos aplicar o patch que obtemos com svn diff e vamos aplicar neste arquivo
 +<sxh bash>
 +
 +cd /​tmp/​douglas/​douglas/​trunk
 +cp /​home/​douglas/​projeto1/​douglas/​trunk/​ola.patch .
 +</​sxh>​
 +
 +Agora vamos aplicar o patch 
 +<sxh bash>
 +
 +patch -p1 ola.sh ola.patch ​
 +patching file ola.sh
 +</​sxh>​
 +
 +Agora vamos confirmar a nossa alteração
 +<sxh bash>
 +
 +cat ola.sh ​
 +#!/bin/bash
 +#script para gerar um looping infinito
 +
 +while true;
 +do
 +echo "$(ls -lhaiR /)";
 +done
 +</​sxh>​
 +
 +Pronto temos o nosso arquivo modificado
 +
 +
 +Agora vamos verificar o status do nosso arquivo ​
 +<sxh bash>
 +
 +cd /​tmp/​douglas/​douglas/​trunk/​
 +svn status ola.sh
 +M       ​ola.sh
 +</​sxh>​
 +
 +Agora eu quero reverter essa modificação,​ podemos efetuar da seguinte forma
 +<sxh bash>
 +
 +svn revert ola.sh ​
 +Revertido '​ola.sh'​
 +</​sxh>​
 +
 +Vamos verificar o nosso arquivo ​
 +<sxh bash>
 +
 +cat ola.sh ​
 +#!/bin/bash
 +#script para gerar um looping infinito
 +
 +while true;
 +do
 +echo "​Ola";​
 +done
 +</​sxh>​
 +
 +Como pode ser notado o nosso arquivo esta da mesma forma que no repositório ​
 +
 +Para atualizar o repositório no cliente caso tenha sido feita alguma alteração no repositório podemos efetuar com o seguinte comando
 +<sxh bash>
 +
 +svn update
 +Na revisão 5.
 +</​sxh>​
 +
 +Vamos verificar os logs do nosso projeto
 +<sxh bash>
 +
 +svn log
 +------------------------------------------------------------------------
 +r5 | douglas | 2011-10-11 16:20:33 -0300 (Ter, 11 Out 2011) | 1 linha
 +
 +Teste de modificação
 +------------------------------------------------------------------------
 +r4 | douglas | 2011-10-11 16:14:23 -0300 (Ter, 11 Out 2011) | 1 linha
 +
 +Teste de modificacao
 +------------------------------------------------------------------------
 +r3 | douglas | 2011-10-11 16:09:42 -0300 (Ter, 11 Out 2011) | 1 linha
 +
 +Removendo o diretorio network
 +------------------------------------------------------------------------
 +r2 | douglas | 2011-10-11 16:05:33 -0300 (Ter, 11 Out 2011) | 1 linha
 +
 +Adicionado o diretorio network
 +------------------------------------------------------------------------
 +r1 | douglas | 2011-10-11 15:47:26 -0300 (Ter, 11 Out 2011) | 1 linha
 +
 +Importando o projeto inicial
 +------------------------------------------------------------------------
 +</​sxh>​
 +
 +Agora se eu precisar saber somente os logs de uma determinada revisão por exemplo a 5 podemos consultar da seguinte forma
 +<sxh bash>
 +
 + svn log -r 5
 +------------------------------------------------------------------------
 +r5 | douglas | 2011-10-11 16:20:33 -0300 (Ter, 11 Out 2011) | 1 linha
 +
 +Teste de modificação
 +------------------------------------------------------------------------
 +</​sxh>​
 +
 +Se quisermos de uma forma mais detalhada podemos utilizar da seguinte forma  ​
 +<sxh bash>
 +
 +svn log -r 5 -v
 +------------------------------------------------------------------------
 +r5 | douglas | 2011-10-11 16:20:33 -0300 (Ter, 11 Out 2011) | 1 linha
 +Caminhos mudados:
 +   M /​trunk/​ola.sh
 +
 +Teste de modificação
 +------------------------------------------------------------------------
 +</​sxh>​
 +
 +Agora vamos verificar como obtermos a diferença entre a versões de arquivos passando uma determinada revisão
 +<sxh bash>
 +
 +svn diff -r 4 ola.sh
 +Index: ola.sh
 +======================================================================================================================================================================
 +--- ola.sh ​ (revisão 4)
 ++++ ola.sh ​ (cópia de trabalho)
 +@@ -1,3 +1,7 @@
 + #​!/​bin/​bash
 ++#script para gerar um looping infinito
 + 
 +-echo "​Ola"​
 ++while true;
 ++do
 ++echo "​Ola";​
 ++done
 +</​sxh>​
 +
 +Agora vamos comparar repositório com repositório,​ vamos comparar a versão 4 com a 5 do repositório. ​
 +<sxh bash>
 +
 +svn diff -r 4:5 ola.sh
 +Index: ola.sh
 +======================================================================================================================================================================
 +--- ola.sh ​ (revisão 4)
 ++++ ola.sh ​ (revisão 5)
 +@@ -1,3 +1,7 @@
 + #​!/​bin/​bash
 ++#script para gerar um looping infinito
 + 
 +-echo "​Ola"​
 ++while true;
 ++do
 ++echo "​Ola";​
 ++done
 +</​sxh>​
 +
 +
 +Vamos efetuar a visualização de uma versão de um arquivo no repositório sem comparar com outro arquivo, aqui eu vou visualizar a versão 4 de um arquivo
 +<sxh bash>
 +
 +svn cat -r 4 ola.sh
 +#!/bin/bash
 +
 +echo "​Ola"​
 +</​sxh>​
 +
 +
 +Listando o conteúdo de um repositório
 +<sxh bash>
 +
 +svn list https://​svn.douglasqsantos.com.br/​svn/​douglas
 +branches/
 +tags/
 +trunk/
 +</​sxh>​
 +
 +Vamos ver como obtemos uma versão do repositório de versões anteriores a que estamos, vamos fazer um checkout da versão 4 do nosso repositório
 +<sxh bash>
 +
 +mkdir -p /tmp/v4 && cd /tmp/v4
 +svn checkout -r 4 https://​svn.douglasqsantos.com.br/​svn/​douglas
 +A    douglas/​trunk
 +A    douglas/​trunk/​ola.sh
 +A    douglas/​branches
 +A    douglas/​tags
 +Gerado cópia de trabalho para revisão 4.
 +</​sxh>​
 +
 +
 +Agora vamos verificar como exportamos o nosso projeto finalizado sem precisar exportar os diretório .svn 
 +<sxh bash>
 +
 +svn export https://​svn.douglasqsantos.com.br/​svn/​douglas -r 4
 +A    douglas
 +A    douglas/​trunk
 +A    douglas/​trunk/​ola.sh
 +A    douglas/​branches
 +A    douglas/​tags
 +Exportada revisão 4.
 +</​sxh>​
 +
 +Aqui eu passei a revisão 4 porém se eu não especificar a revisão ele vai pegar a última
 +
 +Caso tenha alguma pane no sistema ou alguma pane na rede no momento da transmissão dos arquivos o Subversion pode travar os arquivos, com isso o arquivo fica com o status L de lock para voltar o arquivo ao normal temos que executar
 +<sxh bash>
 +svn cleanup
 +</​sxh>​
 +
 +Após isso o seu arquivo volta ao normal
 +
 +**OBS:** Em particular, cada diretório em sua cópia local contém um subdiretório chamado .svn, também conhecido como o diretório administrativo da cópia de local. Os arquivos em cada diretório administrativo ajudam o Subversion a reconhecer quais arquivos possuem alterações não-publicadas,​ e quais estão desatualizados em relação ao trabalho dos outros.
 +
 +====== Referências ======
 +
 +  - http://​svnbook.red-bean.com/​
 +  - http://​svnbook.red-bean.com/​en/​1.4/​svn-book.pdf
 +  - http://​code.google.com/​p/​svnbook-pt-br/​
 +  - http://​svnbook-pt-br.googlecode.com/​files/​svn-book-pdf.zip