Artigos‎ > ‎Compartilhamento de Arquivos‎ > ‎SVN‎ > ‎

Copiar Repositório SUBVERSION de um servidor para outro


Primeiramente gostaria de salientar que não sou o autor principal do conteúdo deste artigo. A minha intenção é de mostrar o que outros autores tem realizado (referenciando links para o conteúdo original) neste blog até como um guia pessoal para uso próprio e ainda compartilhar minhas anotações e pequenas modificações que realizo no conteúdo, desejando que possa ajudar mais alguém em algum lugar.
First and foremost, I take no credit for any of this post’s content. I am really just taking what others have done (which I have links to bellow) and am putting it on my blog for a personal reference and hopefully the small changes that I made to their guides will help someone somewhere.

link:  http://svn.apache.org/repos/asf/subversion/trunk/notes/svnsync.txt 

Utilize o comando svnsync

Crie os dois repositórios: https://sites.google.com/site/ubuntu4us/artigos/compartilhamento-de-arquivos/svn/subversion-no-ubuntu

Certifique-se que o repositório destino tem o mesmo UUID que o fonte para permitir o uso de "svn switch --relocate":
FONTE:
svnlook uuid /srv/svn/edifast
f7446eaa-ab0d-4029-b9f1-d1d914f79d88
DESTINO:
svnadmin setuuid /srv/svn/edifast f7446eaa-ab0d-4029-b9f1-d1d914f79d88

Crie um arquivo com o seguinte conteúdo no servidor DESTINO:
sudo cp /srv/svn/edifast/hooks/pre-revprop-change.tmpl /srv/svn/edifast/hooks/pre-revprop-change
sudo chmod +x /srv/svn/edifast/hooks/pre-revprop-change
sudo nano /srv/svn/edifast/hooks/pre-revprop-change
#!/bin/sh 
USER="$3"
if [ "$USER" = "manager" ]; then exit 0; fi
echo "Only the manager user may change revision properties" >&2
exit 1
E depois este também no servidor DESTINO: 
sudo cp /srv/svn/edifast/hooks/start-commit.tmpl /srv/svn/edifast/hooks/start-commit
sudo chmod +x /srv/svn/edifast/hooks/start-commit
sudo nano /srv/svn/edifast/hooks/start-commit
#!/bin/sh 
USER="$2"
if [ "$USER" = "manager" ]; then exit 0; fi
echo "Only the manager user may commit new revisions" >&2
exit 1
Agora no servidor DESTINO inicialize a sincronização da seguinte forma:
svnsync initialize https://cloud.edifast.com.br/svn/edifast https://edifast.dyndns-office.com/svn/edifast --sync-username manager --sync-password password --source-username manager --source-password password
Para iniciar a sincronização utilize o comando na ORIGEM:
svnsync synchronize https://cloud.edifast.com.br/svn/edifast

ou no DESTINO:
svnsync synchronize file:///srv/svn/edifast

Caso fique travado no meio do caminho pode-se desbloquear com o comando:
svn propdel svn:sync-lock --revprop -r 0  https://cloud.edifast.com.br/svn/edifast --username manager --password password
ou no DESTINO:
svn propdel svn:sync-lock --revprop -r 0  file:///srv/svn/edifast --username manager --password password

Uma boa dica é recomeçar com:
svnsync --non-interactive synchronize https://cloud.edifast.com.br/svn/edifast &
ou
svnsync --non-interactive synchronize file:///srv/svn/edifast &

E ao final executar:
svnsync --non-interactive copy-revprops https://cloud.edifast.com.br/svn/edifast ${REV} &
Sendo ${REV} o número da cópia de trabalho em:
svn info https://edifast.dyndns-office.com/svn/edifast

Voce poderá verificar como esta o servidor de DESTINO com o seguinte comando:
svnsync info https://cloud.edifast.com.br/svn/edifast

Quando quiser utilizar o servidor DESTINO como oficial voce precisará fazer o seguinte:
svn propdel --revprop -r 0 svn:sync-lock file:///srv/svn/edifast
svn propdel --revprop -r 0 svn:sync-from-uuid file:///srv/svn/edifast
svn propdel --revprop -r 0 svn:sync-last-merged-rev file:///srv/svn/edifast
svn propdel --revprop -r 0 svn:sync-from-url file:///srv/svn/edifast
sudo rm /srv/svn/edifast/hooks/pre-revprop-change
sudo rm /srv/svn/edifast/hooks/start-commit

Liste as propriedades com o comando:
svn proplist --revprop -r 0 file:///srv/svn/edifast
svn:sync-from-uuid
svn:sync-lock
svn:sync-currently-copying
svn:sync-last-merged-rev
svn:date
svn:sync-from-url

E depois:
svn propget --revprop -r 0 svn:sync-from-url file:///srv/svn/edifast

Se precisar alterar utilize o comando no DESTINO:
svn propset svn:sync-from-url --revprop -r 0 svn://edifast.dyndns-office.com/edifast file:///srv/svn/edifast

* Change authz on the master so that nobody can commit.
* Sync the slave one last time so it's certainly up-to-date.
(Shouldn't be necessary for us because this is done automatically in a
post-commit hook of the master.)
* Remove the svn:sync-* properties from revision 0 of the slave.
* Change authz and hooks on the slave to what they used to be on the master.
* Have everyone relocate their working copies to the new server.
* Start syncing a new server so we have a slave just in case something
goes wrong on the master.


link: http://chestofbooks.com/computers/revision-control/subversion-svn/Configure-The-Servers-Serverconfig-Httpd-Extra-Writethruprox.html

Faça com que pedidos de alteração no DESTINO sejam automaticamente redirecionadas para FONTE:

Configuração no Destino:
<Location /svn>
  DAV svn
  SVNPath /var/svn/repos
  SVNMasterURI http://master.example.com/svn
  …
</Location>

<Location /svn-proxy-sync>
  DAV svn
  SVNPath /var/svn/repos
  Order deny,allow
  Deny from all
  # Only let the server's IP address access this Location:
  Allow from 10.20.30.40
  …
</Location>

E configure o mecanismo de sincronismo para trabalhar com o endereço /svn-proxy-sync apenas para evitar loop-back.


link: http://journal.paul.querna.org/articles/2006/09/14/using-svnsync/

Para sincronizar automaticamente, na ORIGEM, faça:
Crie um hooks/post-commit com:
svnsync --non-interactive sync svn://dest.example.com/ &
Crie um hooks/post-revprop-change
svnsync --non-interactive copy-revprops svn://dest.example.com/ ${REV} &

Ajuste a forma de conexão acima para seu servidor.


O URL específico do gadget não foi encontrado



Comments