web-dev-qa-db-fra.com

Comment sauvegarder un référentiel SVN distant

Je déplace actuellement mon serveur SVN de mon serveur domestique vers mon serveur distant afin de pouvoir y accéder plus facilement depuis d'autres sites ..__ Mon serveur distant n'est pas sauvegardé, je souhaite donc le sauvegarder régulièrement sur mon serveur domestique.

Le serveur distant est le serveur Windows 2003. Le serveur domestique est Windows Home Server.

Quelle est la meilleure façon de procéder? puis-je obtenir que mon serveur domestique reçoive une copie du serveur distant toutes les nuits? La bande passante n'est pas un facteur important à prendre en compte, mais si je pouvais simplement copier de nouvelles archives sur un serveur SVN sur mon serveur domestique, tout irait bien.

Toutes les suggestions sont les bienvenues.

47
Roaders

Utilisez simplement la commande svnsync .

Commencez par créer un nouveau référentiel sur votre ordinateur personnel.

svnadmin create c:\backuprepo

Ou sous Unix:

svnadmin create ./backuprepo

Ensuite, créez un fichier nommé pre-revprop-change.bat:

echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat

Ou sous Unix:

echo -ne '#!/bin/sh\nexit 0' > ./backuprepo/hooks/pre-revprop-change
chmod ugo+x ./backuprepo/hooks/pre-revprop-change 

puis initialisez la synchronisation:

svnsync init file:///c:/backuprepo https://url/of/your/repository

Ou sous Unix:

svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository

Après cela, vous pouvez simplement exécuter

svnsync sync file:///c:/backuprepo

une fois par jour environ, et vous obtiendrez uniquement les modifications qui ne figurent pas encore dans votre référentiel de sauvegarde. La première fois, cela prendra un certain temps, mais une fois que vous aurez synchronisé votre référentiel de sauvegarde avec le vrai, il ne vous faudra que quelques secondes pour le synchroniser, car seules les révisions nouvelles doivent être synchronisées.

115
Stefan

Depuis Subversion 1.7, vous pouvez également utiliser la nouvelle commande svnrdump . De la docs:

Dump - c’est-à-dire générer un flux de dump de référentiel - révisions de l’élément de référentiel situé dans SOURCE_URL, en imprimant les informations sur la sortie standard.

L'utilisation serait:

svnrdump dump http://example.com/repos/ > repos.dump

Cela crée un "fichier de vidage" du référentiel dans repos.dump. Il s’agit d’une sauvegarde complète des données de votre référentiel, y compris l’historique, mais elle n’est pas directement lisible par un client Subversion. Si vous devez restaurer ces données, utilisez les outils svnadmin standard:

svnadmin create c:\backup-repos
svnadmin load c:\backup-repose < repos.dump

Je n'ai pas fait de test, mais cela pourrait être plus lent que svnsync. svnrdump fera un dump complet du référentiel à chaque fois, et je suppose que synsync importera uniquement les modifications apportées dans le référentiel depuis sa dernière exécution. Vous aurez cependant un seul fichier contenant l’ensemble de votre référentiel, ce qui peut être plus ou moins facile à gérer.

Notez que vous souhaiterez peut-être canaliser la sortie de svnrdump à gzip ou d'un programme similaire afin de réduire de manière significative la taille du fichier généré.

16
joesdiner

créez votre référentiel local

svnadmin create /Users/jsmith/repo

créer un script de hook pre-revprop-change vide

echo '#!/bin/bash' > /Users/jsmith/repo/hooks/pre-revprop-change

rendre le script hook pre-revprop-change exécutable

chmod +x /Users/jsmith/backup/hooks/pre-revprop-change

initialiser svnsync

svnsync init file:////Users/jsmith/repo https://www.smith.com/repo

synchroniser les pensions

svnsync sync file:////Users/jsmith/repo

11
yanokwa

rsync (ou DeltaCopy qui est une interface utilisateur Windows au-dessus de celle-ci) serait un bon choix pour copier de manière incrémentielle l'intégralité du référentiel au niveau du système de fichiers.

Vous pouvez également utiliser svnsync pour copier les nouvelles révisions directement d’un serveur SVN à un autre.

7
Wim

Vous pouvez utiliser un script sur un serveur distant pour vider le référentiel, puis le copier sur votre ordinateur local (ou le laisser dans un emplacement prédéfini que votre ordinateur local pourra copier).

Vous pouvez soit synchroniser les répertoires de sauvegarde avec rsync ou scp .

Le script peut être exécuté avec des "tâches planifiées" et peut générer des fichiers de sauvegarde portant un nom unique, qui seront ensuite synchronisés de la manière mentionnée ci-dessus par votre ordinateur local. (et éventuellement éventuellement supprimé)

2
EFraim

EFraim a mentionné rsync pendant que j’écrivais ceci, c’est couvert.

Si vous ne voulez pas travailler avec ça, Subversion Book offre l'option svnadmin dump --incremental expliquée ici:

Cependant, pour réussir cela, vous devez jongler avec les numéros de révision - rsynchroniser les répertoires de données de référentiel bruts sera plus facile.

La partie la plus difficile consistera probablement à configurer rsync pour que votre ordinateur local et votre ordinateur distant puissent communiquer en toute sécurité (c'est-à-dire configurer un service SSH sur le serveur 2003). DeltaCopy que Wim mentionne est très intéressant et serait mon premier coup; pour les opérations en ligne de commande uniquement, voici un tutoriel sur comment faire en sorte que Rsync s'exécute en tant que service sous Windows 2003 .

2
Pekka 웃

J'utiliserais soit svnsync, soit svnadmin hotcopy, car il est garanti que ces deux techniques permettent de copier des données valides à partir du référentiel, même si une transaction est en cours. D'autres techniques de synchronisation de fichiers peuvent ne pas être aussi fiables, en fonction du format du référentiel.

1
Damian Powell

Sous Mac OS X 10.10, la commande svnrdump se trouve ici:

  • /Library/Developer/CommandLineTools/usr/bin/svnrdump

Vous pouvez ensuite utiliser la réponse ci-dessus par joesdiner.

0