2010-11-17 19 views
5

Tôi có một kho chứa thủy ngân với nhiều kho phụ bên trong nó. Kho lưu trữ có một giải pháp phòng thu trực quan chứa các dự án trong kho lưu trữ và các subrepository.Tôi có thể thực hiện các thay đổi đối với nhiều subrepos thương xót cho một chi nhánh mới được đặt tên không?

Giả sử tôi muốn triển khai tính năng mới sẽ yêu cầu thay đổi dự án chính trong kho và thay đổi một trong các dự án phụ thuộc của nó trong giải pháp (giả sử, thêm giao diện được chia sẻ mới trong phần phụ thuộc) của giao diện trong dự án chính).

Sau đó tôi muốn cam kết các thay đổi, nhưng đến một chi nhánh mới có tên là nó chưa hoàn thành và sẽ được hợp nhất sau này. Sử dụng tortoiseHg Tôi cam kết những thay đổi trong kho lưu trữ, chỉ định một nhánh mới để tạo. Cam kết lần lượt cam kết các thay đổi của repo phụ, nhưng trong các thử nghiệm của tôi nó không tạo ra một nhánh mới trong kho lưu trữ của nó, mà chỉ thêm các changeset vào nhánh hiện tại.

Tôi có thể thực hiện cam kết cho repo phụ một cách rõ ràng và chỉ định tên chi nhánh tại thời điểm đó, nhưng tôi đã hy vọng một cách để cam kết toàn bộ thay đổi được đặt trên các kho lưu trữ cho các nhánh mới trong mỗi kho lưu trữ. sạch hơn. Điều này có thể không?

Trả lời

6

Trước tiên hãy cam kết gửi lại phụ và tạo chi nhánh có tên tại đó.

Sau đó, cam kết chính sẽ tiếp tục cam kết với repo phụ đó trong cùng chi nhánh như trước.

Trước tiên, bạn nên nghĩ về hai kho lưu trữ là riêng biệt, hoàn toàn riêng biệt. Nói cách khác, bạn làm điều gì đó trong một kho lưu trữ và cam kết điều đó. Sau đó, bạn làm điều gì đó trong kho lưu trữ khác và cam kết điều đó.

Mối quan hệ giữa hai kho lưu trữ là kho lưu trữ chính chứa tệp, tệp .hgsubstate, chứa tệp băm của cha mẹ của thư mục làm việc của từng kho lưu trữ phụ.

Nói cách khác, kho lưu trữ phụ không có kiến ​​thức về bản thân rằng nó là một phần của bức tranh lớn hơn. Tuy nhiên, kho lưu trữ chính biết hiện tại đã kiểm tra bản sửa đổi trong kho lưu trữ con đó. Kiến thức này được cam kết vào kho lưu trữ như một phần của cam kết thông thường.

Điều này có nghĩa là nếu bạn làm điều gì đó trong kho lưu trữ phụ, hãy cam kết rằng, kho lưu trữ phụ hiện đang ở phiên bản mới. Khi bạn sau đó cam kết trong kho lưu trữ chính, băm của bản sửa đổi mới trong kho lưu trữ phụ được cập nhật vào tệp .hgsubstate, và sau đó cam kết. Mục đích đằng sau điều này tất nhiên là nếu bạn cập nhật lên bản sửa đổi cũ hơn trong kho lưu trữ chính, một bản sao cũ của tệp .hgsubstate cũng được đưa vào thư mục làm việc, và sau đó kho lưu trữ phụ được cập nhật sau đó. để sửa đổi, trong đó có tác dụng quay trở lại đồng hồ để làm thế nào các kho lưu trữ phụ trông giống như khi những phiên bản nơi chơi.

Ngoài ra, các lệnh trên kho lưu trữ chính đôi khi cũng hoạt động trên các kho phụ. Nếu bạn đẩy vào kho lưu trữ chính, các kho con cũng được đẩy, để đảm bảo rằng những người khác nhân bản kho lưu trữ chính của bạn cũng có thể an toàn dựa vào việc có thể sao chép nội dung thích hợp cho kho lưu trữ phụ.

Vì vậy, để trả lời câu hỏi của bạn trong phần nhận xét.

Nếu bạn tạo chi nhánh trong kho phụ, được đặt tên hoặc theo cách khác, bạn sẽ tiếp tục thực hiện các thay đổi mới cho nhánh đó. Tại một thời điểm nào đó bạn cần hợp nhất và bạn cần hợp nhất trong kho lưu trữ phụ cũng như trong kho lưu trữ chính.

Trước tiên, bạn sẽ hợp nhất trong kho lưu trữ phụ. Điều này kết thúc bằng một cam kết, có nghĩa là kho lưu trữ phụ bây giờ là tại changeset đã cam kết hợp nhất. Sau đó, bạn nhập vào kho lưu trữ chính và cam kết, lưu trữ kiến ​​thức đó, mà thay đổi trong kho lưu trữ con đang được sử dụng ngay bây giờ.

Vì vậy, có, bạn cần hợp nhất cả hai, tại thời điểm sau đó.

+0

Cảm ơn. Tôi giả định như vậy là đúng cho việc sáp nhập các thay đổi trở lại? –

+0

Hãy để tôi chỉnh sửa câu trả lời của tôi với một số thông tin khác. –

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