Trong một VCS truyền thống, tôi có thể hiểu lý do tại sao bạn không cam kết các tệp chưa được giải quyết vì bạn có thể phá vỡ bản dựng. Tuy nhiên, tôi không hiểu tại sao bạn không nên cam kết các tệp chưa được giải quyết trong DVCS (một số trong số chúng thực sự sẽ ngăn bạn thực hiện các tệp).
Thay vào đó, tôi nghĩ rằng kho lưu trữ của bạn nên được khóa khỏi đẩy và kéo , nhưng không cam kết.
Có thể cam kết trong quá trình hợp nhất có một số lợi thế (như tôi thấy):
- Những thay đổi hợp nhất thực tế là trong lịch sử.
- Nếu sự hợp nhất là rất lớn, bạn có thể thực hiện các cam kết định kỳ.
- Nếu bạn mắc lỗi, việc quay trở lại sẽ dễ dàng hơn nhiều (mà không phải làm lại toàn bộ hợp nhất).
- Các tập tin có thể vẫn được gắn cờ là chưa được giải quyết cho đến khi chúng được đánh dấu là đã giải quyết. Điều này sẽ ngăn đẩy / kéo.
Bạn cũng có khả năng có một tập hợp các thay đổi đóng vai trò là sự hợp nhất thay vì chỉ một tập hợp duy nhất. Điều này sẽ cho phép bạn vẫn sử dụng các công cụ như git rerere
.
Vậy tại sao cam kết với các tệp chưa được giải quyết lại nhăn mặt / ngăn chặn? Có bất kỳ lý do khác ngoài truyền thống?
hg 1.6
sau khi hợp nhất, các tệp được đánh dấu là chưa được giải quyết. hg
sẽ không cho phép bạn cam kết cho đến khi bạn đánh dấu chúng là đã giải quyết (không nhất thiết có nghĩa là bạn thực sự phải giải quyết chúng, nhưng tôi cho rằng đó là ý tưởng).
hg
thực sự duy trì một danh sách các tệp đã hoặc chưa được gắn cờ là "đã giải quyết" (sử dụng hg resolve
). Nếu có bất kỳ U
tệp nào trong danh sách này, nó sẽ không cho phép bạn cam kết.
hg resolve
được sử dụng đặc biệt để hợp nhất với xung đột; xem selenic.com/mercurial/hg.1.html#resolve . Note that Mercurial will not let you commit files with unresolved merge conflicts. You must use hg resolve -m ... before you can commit after a conflicting merge.