Tham nhũng kho lưu trữ


14

Điều này có phần liên quan đến câu hỏi này nhưng là một câu hỏi khác.

Chúng tôi có một kho lưu trữ Hg trung tâm, được phục vụ cho người dùng thông qua SSH và máy chủ đồng bóng . Chúng tôi có một số máy khách Mac, Linux và Windows kết nối với nó.

Điều này đã xảy ra hai lần khi một trong những người dùng Windows đã làm hỏng kho lưu trữ của họ, sau đó bị đẩy trở lại trung tâm làm hỏng nó. Tôi muốn viết một tập lệnh hook đến trên kho lưu trữ trung tâm để ngăn giao dịch được chấp nhận nếu nó sẽ làm hỏng repo trung tâm.

Mặc dù không may, tôi không biết đủ về Mercurial để viết một kịch bản như vậy. Bất kỳ khả năng mà người khác đã đi qua điều này? Cá nhân tôi không chắc chắn tại sao hg không làm điều này theo mặc định.


Tôi đã tìm thấy một giải pháp ở đây: davidherron.com/blog/topics/ , điều đó sẽ cần phải được thực hiện trên tất cả các khách hàng. Nhưng nếu bất cứ ai có một giải pháp tốt hơn có thể thực hiện cho chính repo trung tâm thì sẽ tốt hơn.
bobinabottle

Vui lòng cho chúng tôi biết thêm chi tiết: bạn đang sử dụng phiên bản nào của Mercurial trên máy chủ và trên mỗi máy khách?
Martin Geisler

2
Ngoài ra, nó sẽ cực kỳ hữu ích cho chúng tôi (các nhà phát triển Mercurial) nếu bạn có thể tái tạo điều này. Ngoài ra, vui lòng báo cáo các vấn đề như vậy cho chúng tôi trực tiếp qua danh sách gửi thư của chúng tôi: mercurial.selenic.com/wiki/MailLists hoặc trình theo dõi lỗi: selenic.com/mercurial/bts Điều đó hiệu quả hơn nhiều so với đăng ở đây :-)
Martin Geisler

Câu trả lời:


4

Các phiên bản gần đây của Mercurial (kể từ 1.5) hỗ trợ xác thực dữ liệu đến. Thêm vào

[server]
validate = True

đến cấu hình hg của máy chủ của bạn ( .hg/hgrchoặc cấu hình hgwebdir sẽ hoạt động tốt) để máy chủ xác minh dữ liệu đến và từ chối các lần đẩy không hợp lệ. Sau đó, khách hàng sẽ thấy một lỗi giống như:

remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify

Mong rằng sẽ giúp!


2

Có lẽ bạn nên tránh đẩy vào kho lưu trữ hoàn toàn. Với Mercurial và bản chất phân tán của nó, mọi người đều có thể có chi nhánh của mình và khi họ cảm thấy họ đã sẵn sàng, họ nói với bạn và bạn rút từ họ. Không có vấn đề truy cập cam kết, không đẩy sẽ phá vỡ công cụ ...

Đây ít nhất là một lời khuyên mà một người bạn của tôi đã đưa ra cho tôi, khi tôi chuyển từ SVN sang Mercurial.

Tôi không biết, nếu đây là một lựa chọn cho bạn, nhưng thiết lập một kho lưu trữ cá nhân cho mọi người và sau đó lấy từ những người bạn cần có thể yêu cầu ít công việc hơn là cố gắng bắt những cú đẩy nguy hiểm.


Không thúc đẩy HG đánh bại toàn bộ mục đích của nó - nhiều người dùng làm việc cùng nhau
Anonymousouse

0

Bạn có thể không làm điều tương tự như Blog của David Herron , nhưng thay vì thực hiện nó trước khi phát hành, hãy thực hiện nó trên móc nối trước trên repo trung tâm?


Không :-( Tôi đã thử nhưng kết thúc trong tình trạng bế tắc. Khi khách hàng cố gắng đẩy nó có khóa trên kho lưu trữ. Chạy 'xác minh hg' cũng yêu cầu khóa, vì vậy cuối cùng nó chỉ chờ trong một vòng lặp vô tận.
bobinabottle

Ngoài ra, ngay cả khi điều này đã làm việc trên preommit, nó sẽ xác minh kho lưu trữ, thấy rằng nó ổn, sau đó cam kết những thay đổi sẽ làm hỏng nó. Thực sự tôi sẽ cần một cái móc để đánh giá xem các thay đổi đến có làm hỏng các repos hay không, nếu vậy hãy quay lại giao dịch. Vì vậy, nó sẽ có ý nghĩa hơn khi ở trên móc thay đổi.
bobinabottle

(Sử dụng hook changegroup vẫn dẫn đến bế tắc)
bobinabption

Thú vị - những cái móc dường như là trăn. Bạn có biết những gì đang làm hỏng kho lưu trữ? Là điều tương tự mỗi lần?
Ryan Gibbons

0

Một cách khác có thể là:

  1. Nhân bản kho lưu trữ SAU khi đẩy.
  2. Xác minh điều đó.
  3. Nếu kho lưu trữ là tốt, lưu trữ nó là tốt nhất mới nhất
  4. Nếu kho lưu trữ bị hỏng, hãy tăng báo động
  5. Trên báo động, khôi phục lại lưu trữ tốt nhất được biết đến.

Giải pháp này không phải là những gì bạn yêu cầu, nhưng ít nhất, bạn có được một cách để khôi phục kho lưu trữ của mình trong trường hợp tham nhũng.

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.