2012-12-06 22 views
5

Tôi có cấu trúc subrepository như sau trong TortoiseHg:Sử dụng subrepositories với bitbucket và ToritoiseHg

/MainFolder/ 
/MainFolder/SubFolder1 
/MainFolder/SubFolder2 

MainFolder là một kho lưu trữ riêng trên bitbucket SubFolder1 là một kho lưu trữ riêng trên bitbucket SubFolder2 là một kho lưu trữ riêng trên bitbucket

Tệp .hgsub bên trong MainFolder trông giống như sau:

SubFolder1 = SubFolder1 
SubFolder2 = SubFolder2 

Các tập tin .hgsubstat bên trong MainFolder cũng có guids và subrepository tên hợp lệ.

Vấn đề là bất cứ khi nào tôi cố gắng đẩy bitbucket cho MainFolder, trước tiên nó đẩy MainFolder, sau đó SubFolder1, nhưng khi nó được SubFolder2, TortoiseHg ném lỗi "hủy bỏ: kho lưu trữ là không liên quan".

Khi tôi kiểm tra kho lưu trữ MainFolder trên bitbucket, nó có nội dung thực sự của SubFolder1 (nó sẽ được liệt kê ở đó dưới dạng subrepository).

Làm cách nào để khắc phục sự cố này để MainFolder được tải lên chính xác dưới dạng kho lưu trữ chính và SubFolder1 và SubFolder2 được liệt kê làm kho lưu trữ phụ trên bitbucket?

+1

Tôi cũng đã cố gắng sử dụng [subpath] như trong ví dụ cho subrepository tại [link] (https://bitbucket.org/kiilerix/subrepodemo/). Tôi đã thêm vào sau để kết thúc tệp .hgsub của tôi: (https: // (?: [^ @] + @)? Bitbucket \ .org/[^ /] +/[^ /] +)/(. *) = \ 1- \ 2 Điều này không hoạt động vì kho lưu trữ không tồn tại đối với giao diện người dùng thay thế. Có cách nào khác để làm điều này mà không cần đổi tên tất cả các kho của tôi để phù hợp với biểu thức chính quy. Cũng vì đây là kho lưu trữ riêng bitbucket thêm tên người dùng vào liên kết được định dạng và nó không thành công cho người dùng khác. – samirjaiswal

Trả lời

6

Các example thể hiện trong tài liệu hướng dẫn bitbucket đòi hỏi để đổi tên kho để tất cả các kho được đặt tên như MainRepository-SubRepository. Tôi không muốn đổi tên tất cả các kho lưu trữ của tôi để sửa đổi các biểu thức chính quy như trong ví dụ sau và nó hoạt động chính xác ngay bây giờ. Phiên bản này không yêu cầu dấu phân cách dấu gạch ngang trong tên kho, Kho lưu trữ chính và kho phụ có thể được đặt tên độc lập. Ví dụ .hgsub trông giống như sau:

SubFolder1 = SubFolder1 
SubFolder2 = SubFolder2 
[subpaths] 
(https://(?:[^@][email protected])?bitbucket\.org/[^/]+)(/[^/]+)/(.*) = \1/\3 
1

Bitbucket không thực hiện subrepos tại chỗ. Kết quả là, Mercurial đang cố gắng đẩy tất cả các kho của bạn đến cùng một vị trí, và than phiền khi bạn cố gắng đẩy Repo SubFolder2 vào một bản sao từ xa của repo SubFolder1.

Các bản tóm tắt là các thư viện được chia sẻ giữa nhiều dự án và do đó không sống trong bất kỳ repo chính nào mà thay vào đó là không gian riêng của chúng. Do đó, bạn phải tạo các kho lưu trữ từ xa riêng biệt để chứa từng thư mục con (thư viện) và tham chiếu đến đường dẫn từ xa riêng biệt trong tệp .hgsub.

Ví dụ, dự án ví dụ của bạn có thể có ba kho bitbucket chủ trì

https://bitbucket.org/bitbucketname/main_project 
https://bitbucket.org/bitbucketname/library1 
https://bitbucket.org/bitbucketname/library2 

Bạn muốn filespace bản sao địa phương của bạn trông như thế này:

/MainFolder/ 
/MainFolder/SubFolder1 
/MainFolder/SubFolder2 

Trong bản sao địa phương của bạn của main_project (MainFolder), đặt đường dẫn mặc định của kho lưu trữ gốc thành https://bitbucket.org/bitbucketname/main_project

tức là, /MainFolder/.hg/hgrc chứa

[paths] 
default = https://bitbucket.org/bitbucketname/main_project 

Bây giờ, chỉ ra đường dẫn từ xa của thư mục con/thư viện trong tệp .hgsub. Định dạng chung của.mục hgsub là:

local/path/to/subrepo = remote/path/to/matching/library 

Vì vậy .hgsub của bạn có thể chứa đường dẫn tương đối địa phương và từ xa (liên quan đến vị trí của repo chính tại địa phương hoặc từ xa, như trường hợp cụ thể):

SubFolder1 = ../library1 
SubFolder2 = ../library2 

hoặc đường dẫn địa phương tương đối với đường dẫn tuyệt đối để repo từ xa của mỗi thư viện:

SubFolder1 = https://bitbucket.org/bitbucketname/library1 
SubFolder2 = https://bitbucket.org/bitbucketname/library2 

hoặc tuyệt đối đường dẫn cho tất cả mọi thứ:

012.351.
/MainFolder/SubFolder1 = https://bitbucket.org/bitbucketname/library1 
/MainFolder/SubFolder2 = https://bitbucket.org/bitbucketname/library2 

Bây giờ, khi bạn đẩy từ dự án chính tại địa phương, Mercurial biết chính xác nơi để tìm tất cả các subrepositories (cục bộ) và nơi để đẩy các thay đổi được thực hiện cho mỗi thư viện (từ xa).

Ngoài ra, giả sử bạn muốn thêm thư viện của người khác vào dự án của bạn. Sau đó .hgsub của bạn có thể trông giống như thế này:

SubFolder1 = ../library1 
SubFolder2 = ../library2 
another_library = https://bitbucket.org/honkaboy/honkaboys_excellent_library