Cách tốt nhất để tạo SVN-Mirror?


8

Tôi hiện đang xem xét cách tốt nhất để thiết lập gương SVN. Hiện tại tôi thấy ba khả năng đều có nhược điểm riêng:

  • Có một post-commit-Hook của SVN đang chặn và đồng bộ hóa thông qua svnsync. Vấn đề ở đây rõ ràng là, cam kết bị chặn cho đến khi dữ liệu được chuyển vào máy nhân bản.
  • Có một post-commit-Hook SVN không chặn và đồng bộ hóa thông qua svnsync. Ở đây tôi thấy vấn đề sau đây, tinh tế hơn: Hãy tưởng tượng ai đó kiểm tra một tệp LỚN và một người khác ngay sau đó kiểm tra trong một tệp nhỏ. Vì cam kết không chặn, hai quy trình svnsync có thể chạy cùng một lúc và tệp nhỏ có thể vượt qua tệp LỚN trên đường đến gương (điều này có vẻ rất quan trọng về thời gian và không thể xảy ra, mặc dù về nguyên tắc có thể rất quan trọng). Sửa đổi của họ sẽ trao đổi.
  • Đồng bộ hóa cứ sau mười lăm phút với một công việc định kỳ. Vấn đề tương tự nếu một cam kết mất nhiều hơn 15 phút và rõ ràng là thời gian trễ.

Tôi đã quên một khả năng? Tôi đã nhận được một cái gì đó sai? Có ý kiến ​​gì không? Cảm ơn bạn đã!

Có lẽ tôi nên lưu ý rằng khả năng thứ hai là khả năng được đề xuất bởi các trang web khác nhau. Ví dụ: xem http://www.kirkdesigns.co.uk/mirror-svn-reposeective-svnsync


Vì cam kết không chặn, hai quy trình svnsync có thể chạy cùng một lúc và tệp nhỏ có thể vượt qua tệp LỚN trên đường đến gương (điều này có vẻ rất quan trọng về thời gian và không thể xảy ra, mặc dù về nguyên tắc có thể rất quan trọng). Sửa đổi của họ sẽ trao đổi. Điều này là không thể, svnsync sao chép các cam kết khi chúng được ghi vào kho lưu trữ. Chúng sẽ luôn xuất hiện theo thứ tự sửa đổi.
Dave Cheney

Câu trả lời:


3

Bạn có thể thử một cách tiếp cận tương tự như phương pháp chúng tôi sử dụng tại Atlassian

https://www.atlassian.com/blog/archives/subversion_Vplication_at_atla?_ga=2.217251286.1933127788.1517539727-1159165484.1517539727

từ chối trách nhiệm: Tôi hiện là nhân viên của Atlassian, nhưng không tham gia vào việc thực hiện giải pháp này (chỉ duy trì nó)

Như tôi đã nói ở trên trong bình luận, svnsync, chạy từ một kho lưu trữ từ xa hành xử xác định. Nó không thể áp dụng thay đổi ngoài trật tự. Vì vậy, vấn đề duy nhất bạn gặp phải khi sử dụng kho lưu trữ từ xa là độ trễ do lan truyền thay đổi.


+1 cho quan sát rằng svnsync không thể ra khỏi trật tự, vấn đề duy nhất là độ trễ tiềm năng.
Jim T

Bạn hoàn toàn đúng ... Tôi đã phạm một sai lầm suy nghĩ ngu ngốc. Vì vậy, hook post-commit đơn giản và đẹp mắt nên làm điều đó trong hầu hết các trường hợp. Trong trường hợp độ trễ là một vấn đề, người ta có thể xem bài viết Atlassian được tham chiếu. Cảm ơn rât nhiều!
roesslerj

Chỉ cần lưu ý rằng hook commit hook sẽ chặn committer cho đến khi hook đã chạy đến khi hoàn thành. Tôi không chắc chắn điều gì sẽ xảy ra nếu hook hook post thất bại, tôi không nghĩ rằng cam kết bị khôi phục, nhưng ít nhất nó sẽ gây nhầm lẫn.
Dave Cheney

Chà, bằng cách sử dụng hook post-commit, bạn có thể đưa ra lệnh trả về ngay lập tức (ví dụ: thông qua 'lệnh &' trên linux), để nó không bị chặn. Vì hook là post-commit nên nó không thể phục hồi cam kết. Nếu svnsync không thành công, svnsync tiếp theo phải đồng bộ hai bản sửa đổi, điều này chỉ đơn giản là làm. Vấn đề xảy ra ở đây tôi sẽ nộp theo độ trễ chủ đề.
roesslerj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.