2012-02-24 23 views
5

Tôi thường xuyên làm việc với Mercurial bằng cách giữ một cửa hàng địa phương bắt chước thượng nguồn của tôi, và sau đó chỉ cần nhân bản một lần nữa tại địa phương cho môi trường làm việc thực tế của tôi:Làm thế nào để tạo bản sao cục bộ mà không cần kéo lại subrepos?

$ cd /clones 
$ hg clone ssh://external-repo.example.com/some/repo/path/foo 
$ cd ~/Development 
$ hg clone /clones/foo 

Điều này đặc biệt hữu ích đối với tôi bởi vì tôi thường muốn làm nhái mới trên máy bay, v.v., nơi tôi không có truy cập internet. Tuy nhiên, điều này không hoạt động khi bản sao gốc chứa subrepos - sự hiện diện của tệp .hgsubstate có nghĩa là hg sẽ luôn chuyển sang internet thay vì lấy bản sửa đổi nhân bản cục bộ (ngay cả khi chúng là cùng một số). Có cách nào để làm cho một bản sao cục bộ sao chép các tập tin mà không đi ra ngoài internet?

This question có câu trả lời có thể hoạt động, nhưng có vẻ rất đáng tiếc đối với quản lý dài hạn (xóa tệp .hgsubstate trong bản sao trong /clones/ và sau đó tạo bản sao cục bộ từ đó).

Trả lời

5

Bạn có thể sử dụng một "tầm thường" con đường subrepository trong tập tin .hgsub của bạn như thế này:

foo = foo 
bar = bar 

Đây là recommended setup. Lợi thế của việc thiết lập bố cục là bản sao có cấu trúc giống nhau làm kho lưu trữ bạn sao chép. Do đó, bạn có thể sao chép bản sao của mình khi trên máy bay.

Hoặc, bạn có thể sử dụng cài đặt [subpaths] để ánh xạ lại các URL đến đường dẫn cục bộ. Điều này cho phép bạn thêm

[subpaths] 
http://server/(.*) = /clones/libs/\1 

đến file ~/.hgrc của bạn và sau đó bạn sẽ thấy rằng những con đường được ánh xạ tới /clones/libs khi bạn sao chép.

+0

Cảm ơn, đây chính xác là những gì tôi muốn - có lẽ quá khó để thay đổi tất cả các bản repos hiện tại của chúng tôi thành "tầm thường", nhưng sẽ sử dụng nó cho những cái mới. Rất may, subpaths sẽ giải quyết vấn đề của tôi cho những cái hiện có. –

1

Bạn có thể đạt được điều này bằng cách sao chép chính các bản con. Giả foo mà có một subrepo duy nhất gọi là thanh:

$ cd ~/Development 
$ hg clone -U /clones/foo 
$ hg clone -U /clones/foo/bar foo/bar 
$ hg update -R foo 

Bản cập nhật không cần phải truy cập vào internet kể từ khi subrepository tồn tại và chứa changeset cần thiết cho việc cập nhật trên tổng thể.

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