2012-04-16 35 views
7

Tôi có trong một số trường hợp cần phải thực thi rằng người dùng Mercurial đã chạy hg pull -u trước khi bất kỳ hg commit nào có thể được cho phép, tức là hg pull sẽ có nghĩa là hàng đợi đến trống rỗng - và hơn nữa tôi cũng muốn rằng người đó đang sử dụng phiên bản đầu của chi nhánh.Mercurial: thực thi "hg pull -u" trước khi "hg commit"

Tôi làm cách nào để thiết lập hạn chế như vậy?

(tôi hoàn toàn nhận thức được rằng đây đi ngược lại các bộ phận của lõi thiết kế DVCS)

+0

Một cách khác để yêu cầu này là làm thế nào để thực hiện một kích hoạt máy chủ để không cho phép push tạo ra nhiều đầu. –

+0

Tôi không thể cho bạn biết làm thế nào để tự động hóa, nhưng tôi sử dụng "hg đến" để kiểm tra xem tôi có cần phải kéo hay không. Bạn có thể muốn sử dụng nó. –

+4

Sẽ tốt hơn nếu bạn giải thích vấn đề bạn đang cố giải quyết thay vì giải pháp bị hỏng mà bạn muốn sửa. –

Trả lời

1

thường lanh lợi sẽ không cho phép bạn đẩy một đầu mở đến máy chủ mà không cần dùng cờ -f (lực lượng). Bạn có thể viết một cái móc để kéo tự động nhưng điều đó không thể được thực thi phía máy chủ do máy chủ không biết những gì bạn có. Có một bài viết trên trang web lanh lợi về kịch bản này: https://www.mercurial-scm.org/wiki/TipsAndTricks?highlight=%28heads%29#Prevent_a_push_that_would_create_multiple_heads

3

Bạn có thể hỏi các nhà phát triển của bạn để cài đặt

[hooks] 
pre-commit = hg pull -u 

trong các tập tin cấu hình của họ (nó có lẽ nên được cài đặt trong .hg/hgrc tập tin mỗi kho vì đây luồng công việc là kho lưu trữ cụ thể).

Điều này làm cho Mercurial hơi giống Subversion: nhà phát triển của bạn sẽ chỉ có một thay đổi nổi bật. Nhưng lưu ý ngay sau khi ai đó đẩy đến máy chủ, hg pull -u không thể cập nhật lên nhánh chi nhánh mới vì nó sẽ vượt qua các nhánh (các nhánh tôpô) để làm như vậy. Vì vậy, một hợp nhất hợp lý sẽ là cần thiết tại thời điểm đó (hoặc một rebase, xem hg pull --rebase).

1

Như Adam nói, có lẽ những gì bạn thực sự cần làm là ngăn chặn nhiều người đứng đầu (mỗi chi nhánh). Đây là những gì chúng tôi làm, sử dụng móc 'forbid_2head' từ Netbeans (được liên kết từ đây https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads)

Kết quả là móc ngăn cản bất kỳ thao tác đẩy nào tạo nhiều đầu trên nhánh (vì vậy một nhánh trên nhánh ẩn danh/mặc định) mỗi cái trên các nhánh có tên). Điều này có hiệu quả lực kéo trước khi cam kết bởi vì bạn phải kéo, có được hai đầu tại địa phương, sau đó hợp nhất hoặc rebase để loại bỏ nó.

lưu ý, móc là trên máy chủ/master repo

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