TÃnhamos uma instância svnserve antiga com repositórios que haviam sido quase todos abandonados desde que mudamos para o git. Na preparação para encerrar as coisas, eu queria fazer backup desses repositórios localmente de uma forma que nos permitisse restaurá-los nas raras ocasiões em que fosse necessário. Aqui está uma receita que usa uma combinação de bash, svnsync e svnadmin para despejar todas as revisões de cada repositório remoto em arquivos svndump em sua máquina local.
Passo 1
Salve o seguinte script como svnbackup.sh
:
#!/bin/sh
echo "Backing up repo: $1"
svnadmin create $1
echo "#!/bin/shnexit 0" >> `pwd`/$1/hooks/pre-revprop-change
chmod +x `pwd`/$1/hooks/pre-revprop-change
svnsync init file://`pwd`/$1 svn://SOURCEURL/$1 --source-username=USERNAME --source-password=PASSWORD
svnsync sync file://`pwd`/$1 --source-username=USERNAME --source-password=PASSWORD
svnadmin dump $1 > $1.svndump
echo "Cleaning up ($1)..."
rm -rf ./$1
echo "DONE"
Passo 2
Torne-o executável:
$ chmod +x svnbackup.sh
Agora você deve ser capaz de executá-lo em um repositório, passando o nome do repositório como o primeiro argumento:
$ svnbackup.sh repo1
etapa 3
Configure uma lista de repositórios para baixar em um arquivo chamado svnrepos.txt
, um repositório por linha:
repo1
repo2
Passo 4
Use xargs
para iterar em cada repositório na falha, passando-o para o script de backup:
$ xargs -n1 < svnrepos.txt ./svnbackup.sh
Resultado
O resultado será um <reponame>.svndump
arquivo para cada repositório na lista contendo todas as revisões para aquele repositório.