2011-09-30 24 views
5

Chúng tôi đang cố gắng sao chép một kho Mercurial A nơi nó tham chiếu đến một subrepository B đó là máy chủ di chuyển. Chúng tôi muốn cập nhật .hgsub trong A để trỏ đến vị trí mới của B, nhưng đó là một vấn đề về gà và trứng nếu chúng ta không thể hg sao chép A ngay từ đầu.Nhân bản một kho chứa thủy ngân, .hgsub đề cập đến một subrepo bên ngoài đã chết

Có ai biết cách giải quyết vấn đề này không?

Trả lời

5

Lưu ý đầu tiên rằng bản sao là init + pull + update và nhân bản phụ là một phần của bước cập nhật, không phải bước kéo. Điều này có nghĩa rằng bạn có thể tránh bản sao không chỉ đơn giản bằng cách bỏ qua các bước cập nhật: "làm thế nào để nâng cấp lên một phiên bản với một .hgsub/file .hgsubstate có vấn đề"

$ hg clone -U <url> 

Bây giờ vấn đề là giảm xuống Có hai khả năng ở đây:

  • remap subrepos sử dụng [subpath] tính năng (xem hg giúp đỡ subrepo và hg giúp đỡ config)

  • tay cập nhật và sửa chữa

A "thủ công cập nhật "có thể được thực hiện như thế này:

$ hg revert -a -r default -X problematic-file 
[adding a bunch of files] 
$ hg debugrebuildstate -r default 

Bây giờ bạn có thể sửa thủ công subrepos của mình và .hgsub và cam kết. Hãy chắc chắn để kiểm tra sửa chữa của bạn với một bản sao trước khi đẩy nó.

Ngoài ra, xem này gửi thư danh sách chủ đề về chủ đề này: http://markmail.org/thread/ktxd2rsm7avkexzr

4
$ hg help subrepos 
... 

    Remapping Subrepositories Sources 
    --------------------------------- 

    A subrepository source location may change during a project life, 
    invalidating references stored in the parent repository history. To fix 
    this, rewriting rules can be defined in parent repository "hgrc" file or 
    in Mercurial configuration. See the "[subpaths]" section in hgrc(5) for 
    more details. 

$ man hgrc 
... 

    subpaths 
     Defines subrepositories source locations rewriting rules of the form: 

     <pattern> = <replacement> 

     Where pattern is a regular expression matching the source and replacement is the replacement string used to 
     rewrite it. Groups can be matched in pattern and referenced in replacements. For instance: 

     http://server/(.*)-hg/ = http://hg.server/\1/ 

     rewrites http://server/foo-hg/ into http://hg.server/foo/. 

     All patterns are applied in definition order. 

... 

Vì vậy, bạn có thể làm điều đó trong .hgrc trong một phần [subpaths].

+0

Tôi không biết làm thế nào để làm điều này một trong hai, vì vậy câu trả lời cho thấy chính xác làm thế nào tôi tìm thấy nó. 'hg help' và' man' là những tiện ích tuyệt vời. –

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