Strategi cadangan repositori SVN

195

Saya baru mengenal SVN dan saya ingin tahu metode apa yang tersedia untuk membuat cadangan repositori di lingkungan Windows?

Robert Dean
sumber
1
VisualSVN Server untuk Windows mencakup fitur bawaan
bahrep

Jawaban:

179

Anda dapat menggunakan sesuatu seperti (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Karena Windows tidak mendukung GZip, itu hanya:

svnadmin dump repositorypath > backupname.svn
Nicolai Reuschling
sumber
11
Saya tidak tahu pasti, tapi pasti beberapa alat seperti 7-zip akan dapat mengompres data dari STDIN, yang berarti Anda bisa menggunakan gaya pertama di Windows juga.
nickf
5
Saya hanya melihat ini sendiri dan satu komentar dari docs svnbook.red-bean.com/nightly/en/… adalah bahwa Anda akan mendapatkan output dump svnadmin yang sangat besar, kecuali jika Anda menggunakan opsi --deltas.
Jason S
5
Dan Windows memang mendukung gzip, dapatkan saja dari halaman web unxutils unxutils.sourceforge.net
Jason S
52
Menggunakan 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn Ini akan membuat file bernama 'backup.7z' yang berisi satu file, 'backupname.svn', yang merupakan output dari svnadmin dump.
Matt
4
@Josh Stodola bash :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK
107

Kami menggunakan hotcopy svnadmin, misalnya:

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

Sesuai buku :

Anda dapat menjalankan perintah ini kapan saja dan membuat salinan repositori yang aman, terlepas dari apakah proses lain menggunakan repositori.

Anda tentu saja dapat menyalin salinan cadangan (lebih disukai 7-Zip). IMHO Ini yang paling mudah dari opsi cadangan: jika terjadi bencana ada sedikit yang harus dilakukan selain unzip kembali ke posisi semula.

Duncan Smart
sumber
13
Saya pikir dump svnadmin lebih disukai untuk cadangan karena beberapa alasan. Lihat svn.haxx.se/users/archive-2005-05/0842.shtml
daremon
4
@demonemon: Saya sarankan Anda membaca balasan ke posting yang Anda tautkan, khususnya yang menyebutkan dump svnadmin tidak termasuk file kontrol repo.
Powerlord
ras dekat, tetapi, saya memberikan suara untuk svnadmin dump setelah membaca balasan yang disarankan oleh R. Bemrose
mobibob
Perintah hotcopy tidak menimpa atau menambah cadangan yang dihasilkannya. Jadi jika Anda berencana untuk mengotomatiskannya di windows menggunakan penjadwal tugas, lihat file batch berikut: cfchimp.com/wordpress/2008/05/…
Ryan Sampson
1
Sebuah kata peringatan. Jangan hotcopy salinan mirror dari repositori saat svnsync sedang berjalan! Salinan yang dihasilkan mungkin rusak. Lihat utas ini untuk detail: subversion.open.collab.net/ds/…
zvolkov
22

Berikut ini skrip Perl yang akan:

  1. Cadangkan repo
  2. Salin ke server lain melalui SCP
  3. Ambil cadangannya
  4. Buat repositori tes dari cadangan
  5. Lakukan tes checkout
  6. Email Anda dengan kesalahan (via cron)

Naskah:

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`;

Sumber skrip dan detail lebih lanjut tentang rasional untuk jenis cadangan ini.

Tandai
sumber
19

Saya menggunakan svnsync , yang mengatur server jauh sebagai mirror / slave. Kami memiliki server turun dua minggu yang lalu, dan saya dapat dengan mudah mengganti slave ke posisi utama (hanya harus mereset UUID pada repositori slave ke yang asli).

Manfaat lain adalah bahwa sinkronisasi dapat dijalankan oleh perantara, bukan sebagai tugas di kedua server. Saya punya klien untuk dua VPN yang menyinkronkan repositori di antara mereka.

Tom Mayfield
sumber
jadi itu menyinkronkan versi repo terbaru antara keduanya jelas?
PositiveGuy
1
Meskipun dalam judul, saya tidak tahu bahwa saya akan menyebutnya "sinkronisasi". Ini benar-benar cadangan, di mana ia akan mengambil revisi pada master dan meletakkannya di slave. Jika Anda membuat modifikasi pada slave, mereka akan merusak "sinkronisasi", atau mengakibatkan kegilaan. Tujuan penggunaan alat ini adalah untuk membuat mirror di luar situs, hanya-baca, tetapi melakukan pekerjaan yang mengagumkan untuk membuat server cadangan.
Tom Mayfield
1
Manfaat svnsync adalah Anda dapat menjalankan ini sangat sering. Setiap sepuluh menit atau bahkan di setiap komit (menggunakan kail). Manfaatnya adalah bahwa seseorang dapat mengurangi potensi kehilangan data yang sebaliknya Anda dapatkan antara cadangan terakhir dan ketika repo langsung hilang.
8DH
12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Sub-perintah ini membuat cadangan penuh "panas" dari repositori Anda, termasuk semua kait, file konfigurasi, dan, tentu saja, file database.

Adam
sumber
5

Pada dasarnya aman untuk menyalin folder repositori jika server svn dihentikan. (sumber: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Jadi, jika Anda diizinkan untuk menghentikan server, lakukan dan salin repositori, baik dengan beberapa skrip atau alat cadangan. Cadangan Cobian cocok di sini karena dapat menghentikan dan memulai layanan secara otomatis, dan dapat melakukan pencadangan tambahan sehingga Anda hanya mencadangkan bagian repositori yang telah berubah baru-baru ini (berguna jika repositori besar dan Anda mencadangkan ke lokasi jauh ).

Contoh:

  1. Instal Cobian Backup
  2. Tambahkan tugas cadangan:

    • Setel sumber ke folder repositori (mis. C:\Repositories\),

    • Tambahkan "STOP_SERVICE"VisualSVN acara pra-cadangan ,

    • Tambahkan acara pasca-pencadangan, "START_SERVICE"VisualSVN,

    • Tetapkan opsi lain sesuai kebutuhan. Kami telah menyiapkan cadangan tambahan termasuk menghapus yang lama, jadwal cadangan, tujuan, termasuk kompresi. pemisahan arsip dll.

  3. Keuntungan!

atx
sumber
4

ada 2 metode utama untuk mem-backup server svn, pertama adalah hotcopy yang akan membuat salinan file repositori Anda, masalah utama dengan pendekatan ini adalah menyimpan data tentang sistem file yang mendasarinya, sehingga Anda mungkin mengalami beberapa kesulitan mencoba repostore jenis cadangan ini dalam jenis server svn lain atau mesin lain. ada jenis cadangan lain yang disebut dump, cadangan ini tidak akan menyimpan informasi apa pun dari sistem file yang mendasarinya dan dapat diminum ke segala jenis server SVN yang berbasis di subversi tigiris.org.

tentang alat cadangan Anda dapat menggunakan alat svnadmin (dapat melakukan hotcopy dan dump) dari command prompt, konsol ini berada di direktori yang sama di mana server svn Anda tinggal atau Anda dapat mencari alat cadangan svn di google.

rekomendasi saya adalah bahwa Anda melakukan kedua jenis cadangan dan membawanya keluar dari kantor ke akun email Anda, layanan amazon s3, ftp, atau layanan biru, dengan cara itu Anda akan memiliki cadangan yang aman tanpa harus meng-host server svn di suatu tempat di luar kantormu.

Jose Manuel Ojeda
sumber
4

Di sini, alat GUI Windows untuk melakukan dump dari repositori lokal dan remote:

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

Deskripsi alat mengatakan:

Alat sederhana ini memungkinkan untuk membuat cadangan dump repositori subversi lokal dan jarak jauh. Perangkat lunak bekerja dengan cara yang sama dengan "svnadmin" tetapi bukan antarmuka GUI di atasnya. Alih-alih gunakan langsung pustaka subversi untuk memungkinkan membuat dump dalam mode mandiri tanpa alat tambahan lainnya.

Semoga ini bisa membantu ...

Suppaman
sumber
Terima kasih telah berbagi ini, tidak persis seperti yang dinyatakan.
Ed DeGagne
3

Saya suka menyalin seluruh direktori repo ke lokasi cadangan saya. Dengan begitu, jika sesuatu terjadi, Anda bisa menyalin direktori kembali dan siap untuk segera pergi.

Pastikan untuk menjaga izin, jika perlu. Biasanya, ini hanya masalah pada mesin Linux.

Misha M
sumber
7
ini tidak sepenuhnya aman jika seseorang membuat komit selama operasi penyalinan - saya pernah mengalami ini bahkan dengan hanya 4 orang yang memiliki akses ke repo dan jarang menggunakannya. Lihat jawaban Duncan tentang menggunakan hotcopy.
nickf
Namun, jika Anda bekerja sepenuhnya solo, maka saya menganggap ini adalah cara yang aman untuk membuat cadangan repo? Saya menggunakan subversi untuk proyek pribadi saya, dan inilah yang saya lakukan saat ini.
Andrew Garrison
3

Untuk repositori yang di-host, Anda dapat sejak svn menggunakan versi 1.7 svnrdump, yang analog dengan svnadmin dumprepositori lokal. Artikel ini menyediakan walk-through yang bagus, yang intinya bermuara pada:

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

Setelah mengunduh file dump, Anda dapat mengimpornya secara lokal

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

atau unggah ke host pilihan Anda.

Andreas J.
sumber
3

Jika Anda menggunakan format repositori FSFS (default), maka Anda dapat menyalin repositori itu sendiri untuk membuat cadangan. Dengan sistem BerkleyDB yang lebih lama, repositori tidak bebas platform dan Anda biasanya ingin menggunakan svnadmin dump.

The dokumentasi svnbook topik untuk cadangan merekomendasikan svnadmin hotcopyperintah, karena akan mengurus masalah seperti file digunakan dan semacamnya.

crashmstr
sumber
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

Ini adalah File Batch yang saya jalankan yang menjalankan Backups saya

RoughPlace
sumber
1

Saya telah mengkompilasi langkah-langkah yang saya ikuti untuk tujuan mengambil cadangan repositori SVN dari proyek saya.

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

Ini membutuhkan waktu dan mengatakan bahwa itu mengambil log dari repositori. Ini menciptakan satu set file di dalamnya C:\Documents and Settings\nverma\.svk\local.

Untuk memperbarui repositori lokal ini dengan set perubahan terbaru dari jarak jauh, jalankan saja perintah sebelumnya dari waktu ke waktu.

Sekarang Anda dapat bermain dengan repositori lokal Anda (/home/user/.svk/local dalam contoh ini) seolah-olah itu adalah repositori SVN normal!

Satu-satunya masalah dengan pendekatan ini adalah bahwa repositori lokal dibuat dengan peningkatan revisi oleh revisi aktual dalam repositori jarak jauh. Seperti seseorang menulis:

Perintah miror svk menghasilkan komit di repositori yang baru saja dibuat. Jadi semua komit yang dibuat oleh sinkronisasi selanjutnya akan memiliki angka revisi yang bertambah satu dibandingkan dengan repositori publik jarak jauh.

Tapi, ini tidak masalah bagi saya karena saya hanya ingin cadangan dari repositori jarak jauh dari waktu ke waktu, tidak ada yang lain.

Verifikasi:

Untuk memverifikasi, gunakan klien SVN dengan repositori lokal seperti ini:

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

Perintah ini kemudian digunakan untuk checkout revisi terbaru dari repositori lokal. Pada akhirnya dikatakan Checked out revision N. IniN adalah satu lebih dari revisi aktual yang ditemukan di repositori jarak jauh (karena masalah yang disebutkan di atas).

Untuk memverifikasi bahwa svk juga membawa semua sejarah, checkout SVN dijalankan dengan berbagai revisi lama menggunakan -rdengan 2, 10, 50 dll. Lalu file-file di<local-dir-path-to-checkout-onto> dikonfirmasi dari revisi itu.

Pada akhirnya, zip direktori C:/Documents and Settings\nverma/.svk/local/dan simpan zip di suatu tempat. Terus lakukan ini secara teratur.

Nitin Verma
sumber
0

seperti yang orang lain katakan, hot-backup.py dari tim Subversion memiliki beberapa fitur bagus di atas sekadar polos svnadmin hotcopy

Saya menjalankan tugas yang dijadwalkan pada skrip python yang laba-laba untuk semua repositori saya di mesin, dan menggunakan hotbackup untuk menyimpan hotcopies (paranoid korupsi) selama beberapa hari dan svnadmin svndumppada mesin jarak jauh. Restorasi sangat mudah dari itu - sejauh ini.

cepat kering
sumber
0

1.1 Membuat Dump dari repositori SVN (Subversion)

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

Contoh nyata

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

1.2 Gzip Dump yang Dibuat

gzip -9 /path/to/reponame.dump

Contoh nyata

gzip -9 /backups/testrepo.dump

1.3 Dump SVN dan Dump Gzip dengan One-liner

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

Contoh nyata

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

Cara Cadangkan (dump) dan Kembalikan (memuat) repositori SVN (Subversion) di Linux.
Ref: svn backup andrestore subversi

Aamir Shahzad
sumber