Ich bin neu bei SVN und möchte wissen, welche Methoden zum Sichern von Repositorys in einer Windows-Umgebung verfügbar sind.
Ich bin neu bei SVN und möchte wissen, welche Methoden zum Sichern von Repositorys in einer Windows-Umgebung verfügbar sind.
Antworten:
Sie könnten so etwas wie (Linux) verwenden:
svnadmin dump repositorypath | gzip > backupname.svn.gz
Da Windows GZip nicht unterstützt, ist es nur:
svnadmin dump repositorypath > backupname.svn
svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn
Dadurch wird eine Datei mit dem Namen "backup.7z" erstellt, die eine einzelne Datei "backupname.svn" enthält, aus der ausgegeben wird svnadmin dump
.
for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Wir verwenden svnadmin hotcopy, zB:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
Gemäß dem Buch :
Sie können diesen Befehl jederzeit ausführen und eine sichere Kopie des Repositorys erstellen, unabhängig davon, ob andere Prozesse das Repository verwenden.
Sie können die Sicherungskopie natürlich per ZIP (vorzugsweise 7-Zip). IMHO Es ist die einfachste Sicherungsoption: Im Katastrophenfall gibt es nichts anderes zu tun, als sie wieder in Position zu entpacken.
Auf der Subversion-Website steht ein Skript hotbackup.py zur Verfügung, mit dem sich Backups sehr gut automatisieren lassen.
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
Hier ist ein Perl-Skript, das:
Das Skript:
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`;
Skriptquelle und weitere Details zum Rational für diese Art der Sicherung.
Ich benutze svnsync , das einen Remote-Server als Spiegel / Slave einrichtet . Wir hatten vor zwei Wochen einen Serverausfall und ich konnte den Slave ganz einfach in die primäre Position bringen (musste nur die UUID im Slave-Repository auf das Original zurücksetzen).
Ein weiterer Vorteil besteht darin, dass die Synchronisierung von einem Zwischenhändler ausgeführt werden kann und nicht als Aufgabe auf einem der beiden Server. Ich hatte einen Client mit zwei VPNs, die ein Repository zwischen ihnen synchronisierten.
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
Dieser Unterbefehl erstellt eine vollständige "Hot" -Sicherung Ihres Repositorys, einschließlich aller Hooks, Konfigurationsdateien und natürlich Datenbankdateien.
Sie können eine Repository-Sicherung ( Dump ) mit erstellen svnadmin dump
.
Sie können es dann mit importieren svnadmin load
.
Detaillierte Referenz im SVNBook: "Migration von Repository-Daten mit svnadmin"
Grundsätzlich ist es sicher, den Repository-Ordner zu kopieren, wenn der SVN-Server gestoppt wird. (Quelle: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )
Wenn Sie also den Server stoppen dürfen, tun Sie dies und kopieren Sie das Repository entweder mit einem Skript oder einem Sicherungsprogramm. Cobian Backup passt gut hierher, da es Dienste automatisch stoppen und starten kann und inkrementelle Sicherungen durchführen kann, sodass Sie nur Teile des Repositorys sichern, die sich kürzlich geändert haben (nützlich, wenn das Repository groß ist und Sie an einem Remotestandort sichern ).
Beispiel:
Fügen Sie eine Sicherungsaufgabe hinzu:
Quelle auf Repository-Ordner setzen (zB C:\Repositories\
),
Pre-Backup-Ereignis "STOP_SERVICE"
hinzufügen VisualSVN,
Post-Backup-Ereignis "START_SERVICE"
hinzufügen, VisualSVN,
Stellen Sie nach Bedarf andere Optionen ein. Wir haben inkrementelle Sicherungen eingerichtet, einschließlich Entfernen alter Sicherungen, Sicherungszeitplan, Ziel, Komprimierung inkl. Archivaufteilung etc.
Profitieren!
Es gibt zwei Hauptmethoden zum Sichern eines SVN-Servers: Die erste ist Hotcopy, mit der eine Kopie Ihrer Repository-Dateien erstellt wird. Das Hauptproblem bei diesem Ansatz besteht darin, dass Daten über das zugrunde liegende Dateisystem gespeichert werden, sodass Sie möglicherweise Schwierigkeiten haben, einen Repostore durchzuführen Diese Art der Sicherung auf einem anderen SVN-Server oder einem anderen Computer. Es gibt eine andere Art von Sicherung, die als Dump bezeichnet wird. Diese Sicherung speichert keine Informationen über das zugrunde liegende Dateisystem und dessen Trinkbarkeit auf SVN-Servern aller Art, die auf der Subversion von tigiris.org basieren.
Informationen zum Sicherungstool Sie können das svnadmin-Tool (es kann Hotcopy und Dump ausführen) über die Eingabeaufforderung verwenden. Diese Konsole befindet sich in demselben Verzeichnis, in dem sich Ihr SVN-Server befindet, oder Sie können nach SVN-Sicherungstools suchen.
Meine Empfehlung ist, dass Sie beide Arten von Sicherungen durchführen und sie aus dem Büro auf Ihr E-Mail-Konto, Ihren Amazon S3-Dienst, Ihre FTP- oder Azure-Dienste übertragen. Auf diese Weise erhalten Sie eine sichere Sicherung, ohne den SVN-Server irgendwo außerhalb hosten zu müssen dein Büro.
Hier ein GUI-Windows-Tool zum Erstellen eines Speicherauszugs lokaler und entfernter Subversion-Repositorys:
https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html
Die Werkzeugbeschreibung lautet:
Mit diesem einfachen Tool können Sie ein Dump-Backup eines lokalen und Remote-Subversion-Repositorys erstellen. Die Software funktioniert genauso wie "svnadmin", ist jedoch kein GUI-Frontend darüber. Verwenden Sie stattdessen direkt die Subversion-Bibliotheken, um einen Dump im Standalone-Modus ohne ein anderes zusätzliches Tool zu erstellen.
Ich hoffe das hilft...
Ich kopiere einfach das gesamte Repo-Verzeichnis an meinen Sicherungsspeicherort. Auf diese Weise können Sie, wenn etwas passiert, das Verzeichnis einfach zurückkopieren und sofort einsatzbereit sein.
Stellen Sie einfach sicher, dass Sie bei Bedarf die Berechtigungen beibehalten. Normalerweise ist dies nur auf Linux-Computern ein Problem.
Für gehostete Repositorys können Sie seit SVN Version 1.7 verwenden svnrdump
, was svnadmin dump
für lokale Repositorys analog ist . Dieser Artikel bietet einen schönen Durchgang, der sich im Wesentlichen auf Folgendes beschränkt:
svnrdump dump /URL/to/remote/repository > myRepository.dump
Nachdem Sie die Dump-Datei heruntergeladen haben, können Sie sie lokal importieren
svnadmin load /path/to/local/repository < myRepository.dump
oder laden Sie es auf den Host Ihrer Wahl hoch.
Wenn Sie das FSFS-Repository-Format (Standardeinstellung) verwenden, können Sie das Repository selbst kopieren, um eine Sicherung durchzuführen. Mit dem älteren BerkleyDB-System ist das Repository nicht plattformunabhängig und Sie möchten im Allgemeinen den Svnadmin-Dump verwenden.
Das svnbook-Dokumentationsthema für die Sicherung empfiehlt den svnadmin hotcopy
Befehl, da er Probleme wie verwendete Dateien und dergleichen behebt .
@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
Dies ist die Batch-Datei, die ich ausgeführt habe und die meine Backups durchführt
Verwenden Sie für die tägliche und vollständige Sicherungslösung einfach die SVN-Sicherungsskripte hier .
Ich habe die Schritte zusammengestellt, die ich ausgeführt habe, um eine Sicherungskopie des Remote-SVN-Repositorys meines Projekts zu erstellen.
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
Dies braucht Zeit und besagt, dass die Protokolle aus dem Repository abgerufen werden. Es erstellt eine Reihe von Dateien im Inneren C:\Documents and Settings\nverma\.svk\local
.
Führen Sie von Zeit zu Zeit den vorherigen Befehl aus, um dieses lokale Repository mit den neuesten Änderungen gegenüber dem Remote-Repository zu aktualisieren.
Jetzt können Sie mit Ihrem lokalen Repository ( /home/user/.svk/local
in diesem Beispiel) spielen, als wäre es ein normales SVN-Repository!
Das einzige Problem bei diesem Ansatz besteht darin, dass das lokale Repository mit Revisionsinkrementen um die tatsächliche Revision im Remote-Repository erstellt wird. Wie jemand schrieb:
Der Befehl svk miror generiert ein Commit im gerade erstellten Repository. Bei allen durch die nachfolgende Synchronisierung erstellten Commits werden die Revisionsnummern im Vergleich zum öffentlichen Remote-Repository um eins erhöht.
Dies war jedoch für mich in Ordnung, da ich nur von Zeit zu Zeit eine Sicherung des Remote-Repositorys wünschte, sonst nichts.
Überprüfung:
Verwenden Sie zur Überprüfung den SVN-Client mit dem lokalen Repository wie folgt:
svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/" <local-dir-path-to-checkout-onto>
Dieser Befehl dient dann zum Auschecken der neuesten Version aus dem lokalen Repository. Am Ende steht es Checked out revision N
. Dies N
war eine mehr als die tatsächliche Revision, die im Remote-Repository gefunden wurde (aufgrund des oben genannten Problems).
Um zu überprüfen, ob svk auch den gesamten Verlauf mitbrachte, wurde die SVN-Prüfung mit verschiedenen älteren Revisionen unter Verwendung -r
von 2, 10, 50 usw. ausgeführt. Anschließend <local-dir-path-to-checkout-onto>
wurde bestätigt, dass die Dateien in dieser Revision stammen.
Am Ende komprimieren Sie das Verzeichnis C:/Documents and Settings\nverma/.svk/local/
und speichern Sie die Zip irgendwo. Mach das regelmäßig weiter.
Wie andere gesagt haben, hat hot-backup.py vom Subversion-Team einige nette Funktionen svnadmin hotcopy
Ich führe eine geplante Aufgabe auf einem Python-Skript aus, das für alle meine Repositorys auf dem Computer spinnen kann, und verwende Hotbackup, um Hotcopies im Wert von mehreren Tagen (paranoid von Korruption) und svnadmin svndump
auf einem Remotecomputer zu speichern . Die Restaurierung ist wirklich einfach - bis jetzt.
1.1 Erstellen Sie einen Dump aus dem SVN-Repository (Subversion)
svnadmin dump /path/to/reponame > /path/to/reponame.dump
Echtes Beispiel
svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump
1.2 Gzip Erstellt Dump
gzip -9 /path/to/reponame.dump
Echtes Beispiel
gzip -9 /backups/testrepo.dump
1.3 SVN Dump und Gzip Dump mit Einzeiler
svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz
Echtes Beispiel
svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz
So sichern (sichern) und wiederherstellen (laden) Sie das SVN-Repository (Subversion) unter Linux.
Ref: svn subversion backup andrestore