2011-01-20 32 views
5

Tôi có một kho chứa Mercurial trung tâm có chứa một lịch sử nhân bản từ một kho lưu trữ SVN bằng cách sử dụng lệnh hgsubversion. Tôi đã kéo các cam kết bổ sung được thực hiện cho kho SVN kể từ khi repo hg ban đầu được nhân bản; chúng hiện đang ở nhánh mặc định.Sử dụng Mercurial, làm cách nào để thay đổi từ mặc định thành chi nhánh được đặt tên?

Tôi cũng có một chi nhánh được đặt tên. Tôi đã sao chép chi nhánh này (sử dụng hg clone -b mybranch) vào hệ thống địa phương của tôi. Bây giờ tôi muốn lấy các thay đổi chỉ tồn tại trong mặc định và làm cho chúng có sẵn trong nhánh được đặt tên của tôi. Cách rõ ràng tôi thấy để làm điều đó là để làm một hg update mybranch trên repo, sau đó hg merge default và cam kết. Điều này có vẻ nguy hiểm - nếu tôi quên cập nhật trở lại mặc định sau khi hoàn tất, tất cả các lần kéo trong tương lai từ SVN sẽ kéo các thay đổi vào mybranch.

Tôi cũng đã xem xét rằng có lẽ tôi không nên quy định mybranch khi tôi nhân bản repo, nhưng nhân bản toàn bộ repo và chỉ cần cập nhật để mybranch tại địa phương. Vì vậy, tôi có thể kéo các thay đổi mặc định vào bản sao cục bộ của tôi và thực hiện hợp nhất ở đó.

Câu trả lời đúng ở đây là gì? Làm điều đó trên repo được chia sẻ và chỉ cần cẩn thận? Sao chép tất cả mọi thứ và quản lý các chi nhánh tại địa phương? Hoặc là có một giải pháp dễ dàng hơn tôi đang mất tích?

+1

Hợp nhất có vẻ hoàn hảo, tôi thực sự không gặp vấn đề gì của bạn. * hgsubversion * dường như nhận biết về các nhánh SVN, vì vậy khi bạn kéo, nó sẽ đặt * SVN-trunk * thay đổi thành * mặc định * của bạn, và * SVN-mybranch * vào nhánh * mybranch * của bạn. Nếu bạn hợp nhất và ở lại * mybranch *, đầu của * mybranch * có thực sự thay đổi nếu phía từ xa có thay đổi chỉ thân cây không? Kéo nên hoạt động độc lập với bản sửa đổi bản sao làm việc của bạn. –

+0

Mối quan tâm của tôi là thay đổi trực tiếp kho lưu trữ chính và các rủi ro liên quan. Tất nhiên, trong thế giới DVCS, tất cả các repos về cơ bản đều bình đẳng, vì vậy nó có lẽ chỉ là sự thiên vị VCS máy khách-máy chủ của tôi. –

Trả lời

6

Nói chung với Mercurial, bất cứ khi nào tôi làm điều gì đó mà tôi nghĩ có thể gây ra vấn đề, tôi nhân bản repo và thử nó ở đó. Sau đó, tôi có thể chọn để đẩy những thay đổi đó trở lại hoặc thực hiện hành động trên kho lưu trữ thực. Dù bằng cách nào tôi cũng có tùy chọn thất bại và không gây ra bất kỳ thiệt hại nào. Bản sao có thể bị vứt bỏ, bạn không cần phải giữ chúng xung quanh nếu bạn bị hỏng.

+1

Đó là một điểm tốt, và đó là câu trả lời tôi đã nghiêng về phía nào. Tôi chỉ muốn chắc chắn rằng không có một số tính năng của hg tôi đã mất tích, và điều đó dường như không, đưa ra tỷ lệ đáp ứng giống như firehose cho hầu hết các câu hỏi SO tôi đã đăng. –

1

Làm điều đó trong kho lưu trữ được chia sẻ và cẩn thận. Hoặc sao chép toàn bộ repo được chia sẻ, thực hiện hợp nhất ở đó và sau đó đẩy đến bản sao chỉ nhánh.

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