2010-02-20 32 views
45

Tôi hiện đang di chuyển máy chủ SVN từ máy chủ gia đình đến máy chủ từ xa để tôi có thể truy cập dễ dàng hơn từ các vị trí khác. Máy chủ từ xa của tôi không được sao lưu nên tôi muốn thường xuyên sao lưu máy chủ của mình.Làm cách nào để sao lưu kho SVN từ xa

Máy chủ từ xa là máy chủ Windows 2003. Trang chủ máy chủ là Windows Home Server.

Cách tốt nhất để làm điều này là gì? thế nào tôi có thể nhận được máy chủ nhà của tôi để có được một bãi chứa của máy chủ từ xa mỗi đêm? Băng thông không phải là một xem xét rất lớn, nhưng nếu tôi chỉ có thể sao chép bất kỳ checkins mới đến một máy chủ SVN trên máy chủ nhà của tôi mà sẽ là tốt.

Mọi đề xuất đều được chào đón.

+0

Cảm ơn tất cả các câu trả lời nhanh chóng của bạn. Tôi nghĩ SVNSync sẽ làm chính xác những gì tôi muốn. Pekka - bạn nói đúng nếu tôi đã nghĩ về nó Serverfault có lẽ sẽ tốt hơn nếu bạn hỏi điều này. Tôi nhận được câu trả lời nhanh như vậy trên đây mà tôi đã không xem xét các trang web khác. Cảm ơn bạn lần nữa. – Roaders

+0

Asca '! Cazzo! usa questo comando! (scherzo) :-) –

Trả lời

113

Chỉ cần sử dụng lệnh svnsync.

Trước tiên, hãy tạo kho lưu trữ mới trên máy chủ của bạn.

svnadmin create c:\backuprepo 

Hoặc trên Unix:

svnadmin create ./backuprepo 

Tiếp theo, tạo một file có tên pre-revprop-change.dơi:

echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat 

Hoặc trên Unix:

echo -ne '#!/bin/sh\nexit 0' > /backuprepo/hooks/pre-revprop-change 

sau đó, khởi tạo đồng bộ:

svnsync init file:///c:/backuprepo https://url/of/your/repository 

Hoặc trên Unix:

svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository 

Sau đó, bạn có thể đơn giản chạy

svnsync sync file:///c:/backuprepo 

mỗi ngày một lần hoặc lâu hơn và bạn sẽ chỉ nhận được những thay đổi chưa có trong kho lưu trữ dự phòng của mình. Lần đầu tiên sẽ mất một lúc, nhưng sau khi bạn đã đồng bộ hóa kho lưu trữ dự phòng của mình với kho lưu trữ thực, nó sẽ chỉ mất vài giây để đồng bộ hóa vì chỉ những bản sửa đổi mới cần được đồng bộ hóa.

+4

Tôi sẽ bỏ phiếu này hai lần, nếu có thể. Không giống như các câu trả lời khác được đăng ở đây, câu trả lời này thực sự chính xác. rsync: không nhất thiết phải nắm bắt kho lưu trữ ở trạng thái nhất quán. kho lưu trữ bdb không tương thích nhị phân trên các nền tảng. svnadmin dump yêu cầu quyền truy cập vào máy chủ. – bendin

+7

Nếu bạn đang chạy trên một máy chủ UNIX giống như, đừng quên để cung cấp cho quyền thực hiện móc của bạn hoặc nó được coi là thất bại: 'chmod a + x pre-revprop-change' –

+6

Cũng trên UNIX như máy chủ, đừng quên thêm '#!/bin/sh' vào đầu« pre-revprop-change'. –

2

Bạn có thể sử dụng một kịch bản trên một máy chủ từ xa mà bãi kho, sau đó sao chép nó vào máy tính cục bộ của bạn (hoặc lá nó ở một vị trí được xác định trước cho máy tính cục bộ của bạn để sao chép)

Bạn có thể đồng bộ hóa sao lưu thư mục với rsync hoặc scp.

Tập lệnh có thể chạy với "Tác vụ theo lịch" và có thể tạo tệp sao lưu có tên duy nhất, sau này sẽ được đồng bộ hóa theo cách được đề cập ở trên bởi máy tính cục bộ của bạn. (và sau đó có thể bị xóa)

2

EFraim đề cập đến rsync trong khi tôi viết bài này để nó được đề cập đến.

Nếu bạn không muốn làm việc với điều đó, Sách Subversion cung cấp tùy chọn svnadmin dump --incremental giải thích ở đây:

Tuy nhiên, để thực hiện thành công, bạn phải sắp xếp với số sửa đổi - rsync'ing thư mục dữ liệu lưu trữ thô sẽ dễ dàng hơn.

Phần cứng có thể sẽ thiết lập rsync để máy cục bộ và từ xa của bạn có thể giao tiếp an toàn (tức là thiết lập dịch vụ SSH trên máy chủ 2003). DeltaCopy mà Wim đề cập là rất thú vị và sẽ là ảnh đầu tiên của tôi; chỉ cho hoạt động dòng lệnh, dưới đây là howto trên how to get Rsync running as a service on Windows 2003.

6

rsync (hoặc DeltaCopy là giao diện người dùng Windows trên đầu trang) sẽ là lựa chọn tốt để sao chép từng phần lưu trữ hoàn chỉnh ở cấp hệ thống tệp.

Bạn cũng có thể sử dụng svnsync để sao chép các bản sửa đổi mới trực tiếp từ một máy chủ SVN sang máy chủ SVN khác.

+2

Vấn đề với việc sử dụng rsync là nếu bạn đang sao chép kho lưu trữ trong khi ai đó đang thực hiện thay đổi thì bản sao có thể bị hỏng. svnsync an toàn hơn nhiều so với việc chỉ sao chép kho lưu trữ. – darrickc

+0

Có svnsync sẽ là giải pháp ưu tiên. Nó chỉ được hỗ trợ trên máy chủ SVN kể từ khi tôi nghĩ rằng phiên bản 1.6, nhưng điều đó dường như được triển khai rộng rãi ngay bây giờ. – Wim

+0

Mặc dù câu trả lời của bạn có thể ổn, bên cạnh vấn đề khóa được đề cập bởi @darrickc có một bất lợi khác: nó cũng yêu cầu quyền truy cập cấp hệ thống tập tin vào repo svn. Trong hầu hết các trường hợp, nó không được cung cấp, chỉ có một svn: // hoặc http (s): // url. – peterh

10

tạo kho lưu trữ địa phương của bạn

svnadmin create /Users/jsmith/repo

tạo ra một móc kịch bản pre-revprop-change trống

echo '#!/bin/bash' > /Users/jsmith/repo/hooks/pre-revprop-change

làm cho pre-revprop-change móc kịch bản thực thi

chmod +x /Users/jsmith/backup/hooks/pre-revprop-change

khởi svnsync

svnsync init file:////Users/jsmith/repo https://www.smith.com/repo

đồng bộ hóa Repos

svnsync sync file:////Users/jsmith/repo

1

Tôi sẽ sử dụng một trong hai svnsync hoặc svnadmin hotcopy như cả hai kỹ thuật được đảm bảo để sao chép dữ liệu hợp lệ từ các kho lưu trữ, ngay cả khi một giao dịch đang diễn ra. Các kỹ thuật đồng bộ hóa tệp khác có thể không đáng tin cậy, tùy thuộc vào định dạng kho lưu trữ.

15

Kể từ phiên bản 1.7, bạn cũng có thể sử dụng lệnh mới svnrdump. Từ tài liệu:

Dump — tức là tạo luồng lưu trữ — sửa đổi của mục lưu trữ tại SOURCE_URL, in thông tin đến đầu ra tiêu chuẩn.

Cách sử dụng sẽ là:

svnrdump dump http://example.com/repos/ > repos.dump 

này tạo ra một "tập tin dump" của kho trong repos.dump. Đây là bản sao lưu hoàn chỉnh dữ liệu kho lưu trữ của bạn bao gồm lịch sử, nhưng không thể đọc trực tiếp bởi ứng dụng khách lật đổ. Nếu bạn cần khôi phục dữ liệu này, sử dụng các công cụ svnadmin tiêu chuẩn:

svnadmin create c:\backup-repos 
svnadmin load c:\backup-repose < repos.dump 

đã không được thực hiện bất kỳ thử nghiệm, nhưng điều này có thể kết thúc là chậm hơn so với svnsync.svnrdump sẽ thực hiện hoàn tất việc lưu trữ mọi lúc, nơi tôi giả định synsync sẽ chỉ nhập các thay đổi trong kho lưu trữ kể từ lần cuối cùng nó được chạy. Tuy nhiên, bạn sẽ có một tệp duy nhất chứa toàn bộ kho lưu trữ của mình, có thể hoặc không thể quản lý dễ dàng hơn.

Lưu ý rằng bạn có thể muốn đầu ra của svnrdump thông qua gzip hoặc chương trình tương tự để giảm đáng kể kích cỡ của tệp đã xuất.

+0

Soooo nhanh hơn nhiều. Đây là hoàn hảo. – Qix

0

Trong Mac OS X 10.10, lệnh svnrdump nằm ở đây:

  • /Library/Developer/CommandLineTools/usr/bin/svnrdump

Sau đó bạn có thể sử dụng các câu trả lời ở trên bởi joesdiner.

Các vấn đề liên quan