Tôi đang sử dụng chi nhánh default
để phát triển liên tục và bây giờ sẽ tạo nhánh mới có tên để đánh dấu bản phát hành. Mọi sự phát triển hơn nữa sẽ được chi nhánh mặc định, tất cả các sửa lỗi sản xuất sẽ được thực hiện trên một mới (với hợp nhất tiếp theo để default
), như thế này:Mercurial: cho phép hợp nhất từ nhánh phát hành vào nhánh mặc định, nhưng không ngược lại
#>hg branches
aristotle 42:dbd...
default 41:da5...
#>hg branch
default
#>echo "Feature #1 for the next release" >> feature1.txt
#>hg add
#>hg commit -m "Implement feature #1 for the next release"
...... eek, need to make an urgent fix on Production .....
#>hg update aristotle
#>echo "Fixed urgent bug #123 on Production" >> fix123.txt
#>hg add
#>hg commit -m "Fixed bug #123 on Production"
created new head
#>hg update default
#>hg merge aristotle
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, dont forget to commit)
#>hg commit -m "Merge in the fix for bug #123"
#>hg push
này dường như trên con đường để đi, tuy nhiên có vẻ như dễ dàng làm hỏng mọi thứ và hợp nhất theo cách khác xung quanh (từ default
đến aristotle
có nghĩa là tất cả các tính năng mới sẽ xuất hiện trong chi nhánh sản xuất).
Có thể nỗi sợ hãi của tôi là vô căn cứ vì người ta sẽ nhận thấy sự lộn xộn trước khi đẩy cam kết vào repo trung tâm, nhưng tôi muốn xem liệu có thể làm cho phương pháp tiếp cận dễ dàng hơn không.
Vì vậy, tôi bắt đầu nhìn vào lưỡi câu:
[hooks]
pretxnchangegroup.branch = hg heads --template "{branches} " | find "aristotle" && exit 1 || exit 0
..nhưng sau đó nhận ra nó không phải là những gì tôi cần, vì điều này sẽ không cho phép tôi để đẩy những thay đổi Aristotle ở tất cả.
Vì vậy, tôi không biết phải làm gì. Lý tưởng nhất, tôi muốn các nhà phát triển thấy thông báo "hợp nhất cách sai" khi họ cố gắng hợp nhất từ default
đến aristotle
tại địa phương (rõ ràng, cần có một kiểm tra kép trên repo trung tâm), trong khi hợp nhất từ chi nhánh sản xuất đến mặc định là có thể.
Cảm ơn!
Có lẽ bạn có thể làm điều gì đó nếu cam kết nằm trên nhánh sản xuất, và cam kết đó có nhiều hơn một phụ huynh (một cam kết hợp nhất), và một trong những phụ huynh đó là nhánh mặc định, thất bại. Bạn có thể muốn xem xét phần mở rộng có chứa để giúp một số điều này: http://mercurial.selenic.com/wiki/ContainsExtension Chúng tôi không có bất kỳ biện pháp bảo vệ thực sự nào chống lại điều này, nhưng chúng tôi có một móc hậu cam kết in ra những gì thực sự đã xảy ra trong quá trình commit (bạn đang hợp nhất branch1 vào branch2), mà nhà phát triển có thể đọc để xác minh rằng họ đã làm đúng. –
Đánh dấu, cảm ơn nhiều nhận xét nhưng "hg update default" theo sau là "hg merge aristotle" có vẻ giống như "merging branch1 into branch2" (và than ôi, một thông điệp không ngăn cản push/commit sai). Ngoài ra tôi không chắc làm thế nào mà "có phần mở rộng" có thể giúp đỡ trong trường hợp của tôi: (Có lẽ bạn có thể xây dựng trên làm thế nào bạn chính xác thực hiện móc hậu cam kết của bạn? – andreister
Hook sau cam kết của tôi không thực sự ngăn chặn bất cứ điều gì xảy ra, nhưng Nó giống như khi bạn đọc một số điện thoại cho ai đó và sau đó yêu cầu họ đọc lại cho bạn để đảm bảo rằng họ hiểu bạn. và sau đó mercurial giải thích các hành động lại cho bạn, do đó bạn có cơ hội để nắm bắt một sai lầm –