2010-10-20 20 views
15

tôi thấy mình làm như sau rất nhiều:Thông báo cam kết sau sáp nhập Hg, thực tiễn tốt nhất?

C:\Code>hg pull 
pulling from http://server/FogBugz/kiln/Repo/Project/Rebuild/trunk 
searching for changes 
adding changesets 
adding manifests 
adding file changes 
added 2 changesets with 4 changes to 4 files (+1 heads) 
(run 'hg heads' to see heads, 'hg merge' to merge) 

C:\Code>hg merge 
4 files updated, 0 files merged, 0 files removed, 0 files unresolved 
(branch merge, dont forget to commit) 

C:\Code>hg commit -m "Merged" 

C:\Code>hg push 
pushing to http://server/FogBugz/kiln/Repo/Project/Rebuild/trunk 
searching for changes 
remote: kiln: successfully pushed 2 changesets 

Câu hỏi của tôi là, những gì là tốt hơn/hữu ích hơn nhắn để sử dụng sau khi sáp nhập một pull từ kho cam kết. Có bất kỳ phương pháp hay nhất nào mà mọi người sử dụng trong các hệ thống kiểm soát phiên bản được phân phối cho loại điều này không?

+0

Nghe giống như những gì tôi làm .... Đoán rằng làm cho hai chúng tôi (và tất cả những người tôi làm việc với quá!) Có thể không làm thực hành tốt nhất ... – jcolebrand

+0

IMHO các thông điệp hợp nhất (và cam kết) là một lỗ hổng của hg Trong subversion bạn có thông điệp tường trình của các cam kết trước đó, sau đó svn up đang làm một hợp nhất tự động sau đó bạn có thể cam kết chỉ * của bạn * thay đổi với tất nhiên các thông điệp tường trình bên phải. Tôi muốn trong một phiên bản tương lai của hg không chỉ có các thông điệp cam kết hợp nhất rỗng, mà còn không có sự kiện nào cả trong dòng thời gian cho điều đó! Chúng ta có nên sử dụng "hg pull --rebase" như được đề xuất không? Tôi đã bỏ lỡ một cái gì đó? xin vui lòng chỉ cho tôi một lời giải thích .. ;-). Chúc mừng –

Trả lời

9

Nếu bạn sử dụng fetch extension nó sẽ tự động kéo, hợp nhất bước thành một bước, tìm nạp. Thông điệp mà nó tự động tạo ra là một cái gì đó dọc theo dòng "tự động hợp nhất". Các nhà phát triển hg dường như nghĩ rằng điều này là hợp lý vì phần mở rộng bây giờ được phân phối với cơ sở.

Thông báo hợp nhất dường như không chứa lượng thông tin cao. Tin nhắn của bạn có vẻ hợp lý.

[[Offtopic, đôi khi chúng ta sử dụng chúng như một cơ hội cho một sự chơi chữ từ sáp nhập]]

+0

Hoàn hảo, trên thực tế, tôi đã có cài đặt này và thậm chí không biết điều đó! Cảm ơn! – automagic

+1

Tiện ích tìm nạp mở rộng lịch sử của bạn bằng các thông báo hợp nhất vô nghĩa. Chỉ cần một cái gì đó để xem xét. –

+2

Chỉ cần để chèn một lý do đằng sau downvote của tôi: Tôi nghĩ rằng pyfunc của gợi ý rằng họ đưa ra một "lý do tại sao" thực sự là một ý tưởng tốt hơn. Mỏ có xu hướng là những thứ như "đưa bugfix # từ nhánh sản xuất" hoặc "kéo vào tính năng mới của Y" của Jim. Các phần mở rộng lấy tàu với mercurial, nhưng nó bị vô hiệu hóa theo mặc định và vì lý do chính đáng. –

6

Không có cách nào để đây là những gì tôi đã cố gắng tuân thủ.

Mở bài viết cam kết:

Jus nhớ rằng những thông điệp là những chuỗi duy nhất mà sẽ kết nối bạn đến một số người là cố gắng giải mã những lý do cho sự cam kết.

Chìa khóa là cung cấp mô tả sẽ là một bình luận hữu ích về phát triển mã. Vì vậy, khi một số người sử dụng nhật ký hg, anh ta có một bình luận tốt đẹp về cách phần mềm đang được phát triển.

Một số thông lệ tốt:

liên kết nó với hệ thống quản lý lỗi của bạn:

  1. sửa # 3456, tính năng mới # 2435 vv
  2. hoặc mô tả nhiều hơn một trong những thay đổi nó được đưa vào repo
  3. Đưa tín

Trong thực tế, những gì tôi làm chủ yếu là. Hãy xem trạng thái hiện tại của "nhật ký hg" và xem thông điệp hữu ích nào có nghĩa là một sự tiến triển hợp lý trong việc hiểu cam kết mới nhất.

+0

mẹo hay về nhật ký, đã không nghĩ đến điều đó – automagic

+0

Cảm ơn câu trả lời của bạn. Chúng tôi làm theo một thực hành rất giống nhau và nó hoạt động rất tốt. Tôi cố gắng dựa vào các thông điệp của riêng mình trong những trường hợp tôi cần xem qua lịch sử. Nói chung các thông điệp nêu rõ mục đích chính của cam kết là những gì tôi thấy hữu ích nhất. Các chi tiết bổ sung ngoài đó có thể thực sự cản trở. – DaveInCaz

1

Bạn có thể sử dụng phần mở rộng rebase, vì vậy hg pull --rebase sẽ rebase repo của bạn để tip repo trung ương. Điều này phủ nhận sự cần thiết phải hợp nhất sau khi kéo.

tôi đã thêm một bí danh cho nó:

[alias] 
pure = pull -u --rebase 

Hoạt động tốt đối với chúng tôi.

Chi tiết khác có tại trang RebaseProject.

+1

Lưu ý rằng điều này có tác dụng tương tự như 'svn update', có nghĩa là bạn vẫn đang hợp nhất mã, nó chỉ được thực hiện trong nền và không có mạng an toàn. Nếu hợp nhất không thành công do xung đột, bạn không thể hoàn nguyên và thử lại, bạn phải khai thác các thay đổi trong tệp .rej. Nó cũng kết hợp các thay đổi của bạn với việc hợp nhất, vì vậy một số thay đổi mà bạn đăng ký cũng sẽ là những thay đổi của người khác được sáp nhập. TL; DR Đừng ngại hợp nhất, nó an toàn hơn. – tghw

+0

Nó không sử dụng các tệp .rej. Nó lưu các gói trong thư mục .hg, mà bạn có thể unbundle nếu hoạt động của bạn đi về phía nam. Tôi đã cập nhật bài đăng của mình bằng liên kết đến RebaseProject, cung cấp thêm chi tiết. Tương tự với 'svn update' là' hg pull -u'. Hãy xem http://stackoverflow.com/questions/2354527/is-hg-pull-rebase-analogous-to-svn-update. Đừng sợ thử một cái gì đó khác. –

0

Đối với các kết hợp thừa, nơi bạn chỉ làm việc với một kho lưu trữ, tôi cho rằng chỉ cần "hợp nhất" là tốt. Thông thường bạn thậm chí không biết tất cả mọi thứ đã được sáp nhập bởi vì đó là tất cả những thay đổi của người khác anyway.

Có một lần tôi khuyên bạn nên tiết lộ chi tiết hơn khi bạn làm việc với nhiều hơn một kho lưu trữ. Nếu bạn có một repo devel và repo ổn định, và bạn đang kéo sửa lỗi từ ổn định, tôi sẽ chỉ đề cập rằng trong hợp nhất: "sáp nhập với ổn định". Những hợp nhất có xu hướng lớn hơn, do đó, nó giúp giải thích chúng cho những người đến sau này.

+0

Cảm ơn bạn đã trả lời.Dọc theo cùng một dòng, điều thú vị về phần mở rộng tìm nạp được đề cập ở trên là nó thực hiện chính xác điều đó - cho bạn biết chính xác những gì bạn đã kéo và hợp nhất. – automagic

1

Bạn có thể thu thập tất cả các changesets mới được bổ sung cam kết các thông điệp vào một tập tin bằng cách

$ hg log --rev 'reverse(p2():ancestor(p1(),p2())-ancestor(p1(),p2()))' \ 
     --template '{desc}\n' \ 
     > commit-message.txt 

sau đó tự chỉnh sửa cam-message.txt, và cuối cùng là sử dụng nó như thông điệp log:

$ hg commit -l commit-message.txt 
2

Miễn là "sáp nhập" có trong tin nhắn bằng cách nào đó, chúng tôi đã vui vẻ bằng cách sử dụng cơ hội để điền vào các bản ghi thủy ngân của chúng tôi với sự vui nhộn. Ví dụ: chúng tôi đã sử dụng thông điệp hợp nhất như "khoản vay hợp nhất bất động sản ở mức thấp nhất" hoặc "sản xuất truyền hình Merge Griffin".

+0

xem @mergemessage để biết ví dụ – gabe

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