Stratégies de sauvegarde du référentiel SVN

195

Je suis nouveau sur SVN et j'aimerais savoir quelles méthodes sont disponibles pour sauvegarder des référentiels dans un environnement Windows?

Robert Dean
la source
1
VisualSVN Server pour Windows comprend une fonctionnalité intégrée pour sauvegarder et vérifier les référentiels SVN dans les délais: visualsvn.com/server/features/backup
bahrep

Réponses:

179

Vous pouvez utiliser quelque chose comme (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Étant donné que Windows ne prend pas en charge GZip, c'est simplement:

svnadmin dump repositorypath > backupname.svn
Nicolai Reuschling
la source
11
Je ne sais pas avec certitude, mais certains outils comme 7-zip pourraient sûrement compresser les données de STDIN, ce qui signifie que vous pourriez également utiliser le premier style sur Windows.
nickf le
5
Je regarde cela moi-même et un commentaire de la documentation svnbook.red-bean.com/nightly/en/… est que vous obtiendrez une très grande sortie de vidage svnadmin, sauf si vous utilisez l'option --deltas.
Jason S
5
Et Windows prend en charge gzip, il suffit de l'obtenir à partir de la page Web unxutils unxutils.sourceforge.net
Jason S
52
Utilisation de 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn Cela créera un fichier nommé 'backup.7z' qui contient un seul fichier, 'backupname.svn', qui est la sortie de svnadmin dump.
Matt
4
@Josh Stodola bash :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK
107

Nous utilisons svnadmin hotcopy, par exemple:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

Selon le livre :

Vous pouvez exécuter cette commande à tout moment et effectuer une copie sécurisée du référentiel, que d'autres processus utilisent ou non le référentiel.

Vous pouvez bien sûr ZIP (de préférence 7-Zip) la copie de sauvegarde. À mon humble avis, c'est la plus simple des options de sauvegarde: en cas de catastrophe, il n'y a rien d'autre à faire que de le décompresser.

Duncan Smart
la source
13
Je pense que le vidage de svnadmin est préféré pour les sauvegardes pour plusieurs raisons. Voir svn.haxx.se/users/archive-2005-05/0842.shtml
daremon
4
@daremon: Je vous suggère de lire les réponses aux articles auxquels vous avez lié, en particulier celui qui mentionne svnadmin dump n'inclut pas les fichiers de contrôle du dépôt.
Powerlord
course serrée, mais je vote pour svnadmin dump après avoir lu les réponses suggérées par R. Bemrose
mobibob
La commande hotcopy n'écrase ni n'incrémente les sauvegardes qu'elle génère. Donc, si vous prévoyez de l'automatiser dans Windows à l'aide du planificateur de tâches, consultez le fichier de commandes suivant: cfchimp.com/wordpress/2008/05/…
Ryan Sampson
1
Un mot d'avertissement. Ne copiez pas à chaud une copie miroir svnsync d'un référentiel pendant que svnsync est en cours d'exécution! La copie résultante peut être corrompue. Voir ce fil pour plus de détails: subversion.open.collab.net/ds/…
zvolkov
22

Voici un script Perl qui va:

  1. Sauvegarder le dépôt
  2. Copiez-le sur un autre serveur via SCP
  3. Récupérer la sauvegarde
  4. Créer un référentiel de test à partir de la sauvegarde
  5. Faire un test de paiement
  6. Vous envoyer un e-mail en cas d'erreur (via cron)

Le scénario:

my $svn_repo = "/var/svn";  
my $bkup_dir = "/home/backup_user/backups";
my $bkup_file = "my_backup-";
my $tmp_dir = "/home/backup_user/tmp";   
my $bkup_svr = "my.backup.com";
my $bkup_svr_login = "backup";

$bkup_file = $bkup_file . `date +%Y%m%d-%H%M`;
chomp $bkup_file;
my $youngest = `svnlook youngest $svn_repo`;
chomp $youngest;

my $dump_command = "svnadmin  -q dump $svn_repo > $bkup_dir/$bkup_file ";
print "\nDumping Subversion repo $svn_repo to $bkup_file...\n";
print `$dump_command`;
print "Backing up through revision $youngest... \n";
print "\nCompressing dump file...\n";
print `gzip -9 $bkup_dir/$bkup_file\n`;
chomp $bkup_file;
my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz";
print "\nCreated $zipped_file\n";
print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`;
print "\n$bkup_file.gz transfered to $bkup_svr\n";

#Test Backup
print "\n---------------------------------------\n";
print "Testing Backup";
print "\n---------------------------------------\n";
print "Downloading $bkup_file.gz from $bkup_svr\n";
print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`;
print "Unzipping $bkup_file.gz\n";
print `gunzip $tmp_dir/$bkup_file.gz`;
print "Creating test repository\n";
print `svnadmin create $tmp_dir/test_repo`;
print "Loading repository\n";
print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`;
print "Checking out repository\n";
print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`;
print "Cleaning up\n";
print `rm -f $tmp_dir/$bkup_file`;
print `rm -rf $tmp_dir/test_checkout`;
print `rm -rf $tmp_dir/test_repo`;

Source de script et plus de détails sur le rationnel de ce type de sauvegarde.

Mark
la source
19

J'utilise svnsync , qui configure un serveur distant comme miroir / esclave. Nous avons eu un serveur en panne il y a deux semaines, et j'ai pu basculer l'esclave en position principale assez facilement (il suffit de réinitialiser l'UUID du référentiel d'esclaves à l'original).

Un autre avantage est que la synchronisation peut être exécutée par un intermédiaire, plutôt que comme une tâche sur l'un ou l'autre serveur. J'ai eu un client pour deux VPN synchroniser un référentiel entre eux.

Tom Mayfield
la source
donc il synchronise les dernières versions de repo entre les deux évidemment?
PositiveGuy
1
Même si c'est dans le titre, je ne sais pas si je l'appellerais une "synchronisation". C'est vraiment une sauvegarde, où il faudra réviser le maître et les mettre sur l'esclave. Si vous apportiez des modifications à l'esclave, elles interrompraient la «synchronisation» ou entraîneraient une folie. L'utilisation prévue de l'outil est de créer des miroirs en lecture seule hors site, mais il fait un travail admirable de création d'un serveur de sauvegarde.
Tom Mayfield
1
L'avantage de svnsync est que vous pouvez l'exécuter très souvent. Toutes les dix minutes ou même à chaque commit (à l'aide d'un hook). L'avantage de cela est que l'on peut réduire la perte de données potentielle que vous obtiendriez autrement entre la dernière sauvegarde et la perte du repo en direct.
8DH
12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Cette sous-commande effectue une sauvegarde «à chaud» complète de votre référentiel, y compris tous les hooks, les fichiers de configuration et, bien sûr, les fichiers de base de données.

Adam
la source
5

Fondamentalement, il est sûr de copier le dossier du référentiel si le serveur svn est arrêté. (source: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Donc, si vous êtes autorisé à arrêter le serveur, faites-le et copiez simplement le référentiel, soit avec un script, soit avec un outil de sauvegarde. Cobian Backup s'intègre parfaitement ici car il peut arrêter et démarrer des services automatiquement, et il peut effectuer des sauvegardes incrémentielles de sorte que vous ne sauvegardez que les parties du référentiel qui ont changé récemment (utile si le référentiel est volumineux et que vous sauvegardez vers un emplacement distant) ).

Exemple:

  1. Installer Cobian Backup
  2. Ajoutez une tâche de sauvegarde:

    • Définissez la source dans le dossier du référentiel (par exemple C:\Repositories\),

    • Ajouter un événement de pré-sauvegarde "STOP_SERVICE"VisualSVN,

    • Ajouter un événement post-sauvegarde, "START_SERVICE"VisualSVN,

    • Définissez d'autres options selon vos besoins. Nous avons mis en place des sauvegardes incrémentielles, y compris la suppression des anciennes, le calendrier de sauvegarde, la destination, la compression incl. fractionnement d'archives, etc.

  3. Profit!

atx
la source
4

il existe 2 méthodes principales pour sauvegarder un serveur svn, la première est la copie à chaud qui créera une copie de vos fichiers de référentiel, le principal problème avec cette approche est qu'elle enregistre des données sur le système de fichiers sous-jacent, donc vous pouvez avoir des difficultés à essayer de republier ce type de sauvegarde dans un autre type de serveur svn ou une autre machine. il existe un autre type de sauvegarde appelé dump, cette sauvegarde ne sauvegardera aucune information du système de fichiers sous-jacent et son potable sur tout type de serveur SVN basé dans la subversion de tigiris.org.

à propos de l'outil de sauvegarde, vous pouvez utiliser l'outil svnadmin (il est capable de faire du hotcopy et du vidage) à partir de l'invite de commande, cette console réside dans le même répertoire où réside votre serveur svn ou vous pouvez google pour les outils de sauvegarde svn.

ma recommandation est que vous fassiez les deux types de sauvegardes et que vous les retiriez du bureau pour votre compte de messagerie, le service amazon s3, ftp ou azure, de cette façon vous aurez une sauvegarde sécurisée sans avoir à héberger le serveur svn quelque part hors de votre bureau.

Jose Manuel Ojeda
la source
4

Voici un outil Windows GUI pour faire un vidage des référentiels de subversion locaux et distants:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

La description de l'outil indique:

Cet outil simple permet de faire une sauvegarde de vidage d'un référentiel de subversion local et distant. Le logiciel fonctionne de la même manière que le "svnadmin" mais n'est pas une interface graphique sur celui-ci. Au lieu de cela, utilisez directement les bibliothèques de subversion pour permettre de créer un vidage en mode autonome sans aucun autre outil supplémentaire.

J'espère que cette aide ...

Suppaman
la source
Merci de partager cela, fait exactement comme indiqué.
Ed DeGagne
3

J'aime simplement copier tout le répertoire repo dans mon emplacement de sauvegarde. De cette façon, si quelque chose se produit, vous pouvez simplement recopier le répertoire et être prêt à partir immédiatement.

Assurez-vous simplement de conserver les autorisations, si nécessaire. Habituellement, cela ne concerne que les machines Linux.

Misha M
la source
7
ce n'est pas vraiment sûr si quelqu'un fait un commit pendant une opération de copie - je l'ai eu même avec seulement 4 personnes ayant accès au repo et l'utilisant rarement. Voir la réponse de Duncan sur l'utilisation de la copie à chaud.
nickf le
Cependant, si vous travaillez complètement en solo, je suppose que c'est un moyen sûr de sauvegarder un dépôt? J'utilise la subversion pour mes projets personnels, et c'est ce que je fais actuellement.
Andrew Garrison
3

Pour les référentiels hébergés, vous pouvez utiliser la version 1.7 de svn svnrdump, ce qui est similaire aux svnadmin dumpréférentiels locaux. Cet article fournit une belle procédure, qui se résume essentiellement à:

svnrdump dump /URL/to/remote/repository > myRepository.dump

Après avoir téléchargé le fichier de vidage, vous pouvez l'importer localement

svnadmin load /path/to/local/repository < myRepository.dump

ou téléchargez-le sur l'hôte de votre choix.

Andreas J.
la source
3

Si vous utilisez le format de référentiel FSFS (par défaut), vous pouvez copier le référentiel lui-même pour effectuer une sauvegarde. Avec l'ancien système BerkleyDB, le référentiel n'est pas indépendant de la plate-forme et vous voudriez généralement utiliser le vidage svnadmin.

La rubrique de documentation svnbook pour la sauvegarde recommande la svnadmin hotcopycommande, car elle traitera des problèmes tels que les fichiers en cours d'utilisation et autres.

crashmstr
la source
2
@echo off
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2%

echo Performing Backup
md "\\HOME\Development\Backups\SubVersion\%folder%"

svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn

Ceci est le fichier batch que j'ai en cours d'exécution qui effectue mes sauvegardes

RoughPlace
la source
1

J'ai compilé les étapes que j'ai suivies dans le but de faire une sauvegarde du référentiel SVN distant de mon projet.

install svk (http://svk.bestpractical.com/view/SVKWin32)

install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download)

svk mirror //local <remote repository URL>

svk sync //local

Cela prend du temps et indique qu'il récupère les journaux du référentiel. Il crée un ensemble de fichiers à l'intérieurC:\Documents and Settings\nverma\.svk\local .

Pour mettre à jour ce référentiel local avec le dernier ensemble de modifications du référentiel distant, exécutez simplement la commande précédente de temps en temps.

Vous pouvez maintenant jouer avec votre référentiel local (/home/user/.svk/local dans cet exemple) comme s'il s'agissait d'un référentiel SVN normal!

Le seul problème avec cette approche est que le référentiel local est créé avec des incréments de révision par la révision réelle dans le référentiel distant. Comme quelqu'un l'a écrit:

La commande svk miror génère une validation dans le référentiel qui vient d'être créé. Ainsi, tous les commits créés par la synchronisation suivante auront des numéros de révision incrémentés de un par rapport au référentiel public distant.

Mais, c'était OK pour moi car je ne voulais qu'une sauvegarde du référentiel distant de temps en temps, rien d'autre.

Vérification:

Pour vérifier, utilisez le client SVN avec le référentiel local comme ceci:

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

Cette commande va ensuite extraire la dernière révision du référentiel local. À la fin, il est dit Checked out revision N. CeN une de plus que la révision réelle trouvée dans le référentiel distant (en raison du problème mentionné ci-dessus).

Pour vérifier que svk a également apporté toute l'histoire, la vérification SVN a été exécutée avec diverses révisions plus anciennes à l'aide -rde 2, 10, 50 etc. Ensuite, les fichiers dans<local-dir-path-to-checkout-onto> ont été confirmés comme provenant de cette révision.

À la fin, fermez le répertoire C:/Documents and Settings\nverma/.svk/local/et stockez le zip quelque part. Continuez à le faire régulièrement.

Nitin Verma
la source
0

comme d'autres l'ont dit, hot-backup.py de l'équipe Subversion a de belles fonctionnalités sur tout simplement svnadmin hotcopy

J'exécute une tâche planifiée sur un script python qui araignée pour tous mes référentiels sur la machine, et utilise le hotbackup pour conserver plusieurs jours de hotcopies (paranoïaques de corruption) et svnadmin svndumpsur une machine distante. La restauration est vraiment facile à partir de cela - jusqu'à présent.

séchage rapide
la source
0

1.1 Créer un vidage à partir du référentiel SVN (Subversion)

svnadmin dump /path/to/reponame > /path/to/reponame.dump

Exemple réel

svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump

1.2 Dump créé par Gzip

gzip -9 /path/to/reponame.dump

Exemple réel

gzip -9 /backups/testrepo.dump

1.3 SVN Dump et Gzip Dump avec One-liner

svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz

Exemple réel

svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz

Comment sauvegarder (vider) et restaurer (charger) le référentiel SVN (Subversion) sous Linux.
Ref: sauvegarde et restauration de svn subversion

Aamir Shahzad
la source