Tôi khuyên bạn nên sử dụng hg pull
thay vì hg clone
. Vì vậy, bạn sẽ giữ một tấm gương của kho lưu trữ trên máy chủ của bạn và cập nhật nó theo định kỳ với hg pull
. Sau đó, bạn hãy để chương trình sao lưu của mình sao lưu mà. Khi bạn sử dụng hg pull
, bạn sẽ chuyển lịch sử mới nhất và chỉ thay đổi tệp dưới .hg/store/data
đã thực sự được thực hiện bằng thao tác kéo.
Ở đây tôi đã thử nghiệm điều này bằng cách tạo một repo nhỏ với hai tệp: a.txt
và b.txt
. Sau đó tôi nhân bản kho lưu trữ "tới máy chủ" bằng cách sử dụng hg clone --noupdate
. Điều đó đảm bảo rằng chúng tôi không có bản sao làm việc trên máy chủ - nó chỉ cần lịch sử được tìm thấy trong .hg
.
Các timestamps trông như thế này sau khi clone:
% ll --time-style=full .hg/store/data
total 8.0K
-rw-r--r-- 1 mg mg 76 2009-11-25 20:07:52.000000000 +0100 a.txt.i
-rw-r--r-- 1 mg mg 69 2009-11-25 20:07:52.000000000 +0100 b.txt.i
Như bạn đã nói, tất cả chúng đều giống hệt nhau từ các tập tin đã được tất cả chỉ được tạo ra bởi các hoạt động clone. Sau đó tôi đã thay đổi kho lưu trữ ban đầu (kho lưu trữ trên máy khách) và thực hiện một cam kết. Sau khi kéo changeset Tôi đã nhận những timestamps:
% ll --time-style=full .hg/store/data
total 8.0K
-rw-r--r-- 1 mg mg 159 2009-11-25 20:08:47.000000000 +0100 a.txt.i
-rw-r--r-- 1 mg mg 69 2009-11-25 20:07:52.000000000 +0100 b.txt.i
Thông báo như thế nào dấu thời gian cho a.txt.i
đã được cập nhật (tôi chỉ chạm a.txt
trong tôi cam kết) trong khi dấu thời gian cho b.txt.i
đã được bỏ lại một mình.
Nếu phần mềm sao lưu của bạn thông minh, thậm chí nó sẽ thông báo rằng Mercurial chỉ thêm dữ liệu vào a.txt.i
. Điều này có nghĩa là tệp a.txt.i
mới giống với tệp cũ a.txt.i
lên đến điểm nhất định - do đó chương trình dự phòng nên chỉ sao chép phần cuối cùng của tệp. Rsync là một ví dụ về một chương trình sao lưu sẽ thông báo điều này.
Nguồn
2009-11-25 19:22:57
Vâng, đó là tình trạng cuộc đua mà tôi lo lắng. Bạn có thể biết khi nào cần có 'hg rollback'? –
'hg verify' sẽ kiểm tra tất cả các tổng kiểm tra/băm trong kho của bạn và khiến bạn bị lỗi. – intgr
Một bình luận thêm về điều này (bạn có thể muốn thêm): 'hg clone -U' là cách để đi, vì bản sao làm việc sao chép làm cho không có liên kết cứng. Chỉ cần kho lưu trữ. –