Je suis nouveau sur SVN et j'aimerais savoir quelles méthodes sont disponibles pour sauvegarder des référentiels dans un environnement Windows?
Je suis nouveau sur SVN et j'aimerais savoir quelles méthodes sont disponibles pour sauvegarder des référentiels dans un environnement Windows?
Réponses:
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
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
.
for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
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.
Il existe un script hotbackup.py disponible sur le site Web de Subversion qui est assez pratique pour automatiser les sauvegardes.
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
Voici un script Perl qui va:
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.
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.
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.
Vous pouvez créer une sauvegarde de référentiel ( vidage ) avec svnadmin dump
.
Vous pouvez ensuite l'importer en utilisant svnadmin load
.
Référence détaillée dans le SVNBook: "Migration des données du référentiel à l'aide de svnadmin"
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:
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.
Profit!
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.
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 ...
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.
Pour les référentiels hébergés, vous pouvez utiliser la version 1.7 de svn svnrdump
, ce qui est similaire aux svnadmin dump
ré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.
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 hotcopy
commande, car elle traitera des problèmes tels que les fichiers en cours d'utilisation et autres.
@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
Pour la solution de sauvegarde quotidienne et complète, utilisez simplement les scripts de sauvegarde SVN ici .
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 -r
de 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.
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 svndump
sur une machine distante. La restauration est vraiment facile à partir de cela - jusqu'à présent.
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