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.
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.
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é.
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
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.
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é)
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:
svnadmin dump --incremental
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 .
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.
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.