SVN, SVK · 2 min read · Feb 13, 2026

Criando um espelho somente leitura do seu repositório SVN com SVK

Criando um espelho somente leitura do seu repositório SVN com SVK

Diga, você tem um SVN para seu projeto OpenSource e gostaria de espelhá-lo para algum local remoto que hospeda projetos de código aberto (como SourceForge.net ou dev.java.net). Vou pular a fase de registro de conta e projeto e assumir que você já tem suas credenciais e a URL do repositório SVN. Também assumo que você está no Debian ou Ubuntu e que seu SVN está funcionando sob Apache httpd.

Há uma ferramenta chamada svnsync que vem com o SVN 1.4 por padrão e que é projetada exatamente para o mesmo propósito, mas há uma coisa que nos impede de usá-la neste caso. Ela requer um hook svn personalizado para estar presente no repositório de destino e isso é impossível de personalizar em nosso caso.

O que você faz é instalar o SVK primeiro:

# aptitude install svk

De forma resumida, o SVK é um superconjunto do SVN e, portanto, permite alguns truques avançados, como a sincronização de repositórios. Há um livro chamado Controle de Versão com SVK que você pode consultar como um guia aprofundado do SVK. Vou ser breve. O conceito é que você cria um repositório SVK (o “depot”) que conterá uma cópia de todos os repositórios SVN envolvidos (seu repositório principal e aqueles para os quais você despeja informações) e, em seguida, sincroniza essas cópias.

Como queremos que os repositórios sejam sincronizados toda vez que um commit é feito, o procedimento de hooks do SVN seria utilizado e, em nosso caso, isso aconteceria sob o usuário apache httpd.

Então, para simplificar as coisas, vamos fazer login sob essa conta e realizar a rotina necessária.

# su www-data

Agora o que precisamos fazer é inicializar o depot padrão.

$ svk depotmap

Edite o caminho para especificar onde você gostaria de armazenar o depot. Eu escolheria /var/opt/svk/local.

Agora você pode criar pelo menos 2 espelhos: um para o repositório local e um para o remoto (nada impede que você tenha múltiplos espelhos):

$ svk mirror //local file:///var/opt/svn

É assim que mapeamos a localização do repositório (chamado “local”) diretamente para a localização do sistema de arquivos onde o repositório svn reside.

$ svk mirror //remote https://myproject.svn.sourceforge.net/svnroot/myproject

O mesmo vale para o repositório remoto, neste caso hospedado no SourceForge.net. Você precisará aceitar permanentemente o certificado e fornecer seu nome de usuário e senha para ser armazenado em cache.
Como o repositório remoto será somente leitura, vamos sincronizá-lo apenas uma vez

$ svk sync //remote

e então realizar as ações que serão posteriormente executadas pelo script pós-commit.

$ svk sync //local  
$ svk smerge --baseless --incremental --verbatim //local //remote

O último comando sincronizará o repositório local com o remoto, preservando todos os detalhes do commit.
Para que isso seja feito automaticamente após um commit no repositório local, crie um arquivo chamado post-commit no diretório hooks do seu repositório SVN local e coloque esses comandos nele. Torne-o executável por

$ chmod +x ./post-commit #considerando que você está no diretório ''hooks''

É isso, confira.

Alex Yanchenko, www.centricware.org
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.