8

Tôi gặp sự cố khi thiết lập dự án trong Mercurial với subrepos.Tôi có thể lồng subrepos trong Mercurial không?

Mục tiêu:

tôi muốn thiết lập cấu trúc như sau:

-- Build_Repo (this repo will be used to track dependencies) 
    -- Subrepo_A (this is the main source) 
    -- Modules (Part of Subrepo_A) 
     -- Subrepo_B 

Vì vậy, có ba Repos: Xây dựng, A, và B. B được lồng vào bên trong A, A là lồng trong kho lưu trữ gốc. Repo xây dựng sẽ được sử dụng để theo dõi các phụ thuộc, subrepo A sẽ được sử dụng để theo dõi các tệp nguồn chính, và subrepo B (và các tệp khác) sẽ được sử dụng để theo dõi phát triển module/plugin.

Vấn đề/Câu hỏi

Tôi không có thiết lập xây dựng repo ban đầu và Subrepo_A lồng nhau bằng cách thêm các con đường Subrepo_A và nguồn vào file .hgsub và cam kết nó vào xây dựng repo vấn đề. Tuy nhiên, khi sau khi tôi thêm subrepo_B path/nguồn để .hgsub xây dựng repo, và sau đó cố gắng cam kết tôi nhận được thông báo lỗi:

hủy bỏ: path 'Subrepo_A/Modules/Sebrepo_B' là bên trong lồng repo ' Subrepo_A '

Mercurial không giống như một repo lồng nhau bên trong repo đã lồng nhau. Điều này có đúng không, hoặc tôi đang thiếu một cái gì đó? Có ý tưởng nào tốt hơn về cách quản lý các bản dựng/phụ thuộc không?

+0

Bạn đang sử dụng ngôn ngữ/công cụ nào? Nói chung sub-repos như quản lý phụ thuộc là phụ tối ưu. Tôi thích xây dựng một mô-đun, xuất bản các tạo phẩm của nó (nexus, artifactory, vv) và có các module phụ thuộc tiêu thụ nó. – thekbb

Trả lời

0

Trong trường hợp của bạn, bạn sẽ phải thêm subrepoB vào subrepoA.

Tôi khuyên bạn nên di chuyển các phụ thuộc để cây của bạn chỉ có 2 cấp độ, nhưng điều đó có thể không thực hiện được. Nó luôn luôn không phải là một trải nghiệm rất trơn tru nếu không.

+1

Bất kỳ đề xuất nào khác về cách quản lý các phụ thuộc trong tình huống này? –

+0

Câu trả lời cho điều này, như những người khác đã lưu ý, là để làm cho subrepoB một subrepo của subrepoA, và subrepoA một subrepo của build_repo. Có vẻ như bạn không muốn làm điều này vì một lý do nào đó. Nếu đó là vì subrepoA là bản sao của dự án bạn không kiểm soát, và do đó không thể thêm một subrepo vào, một cách xung quanh đó là tạo một ngã ba riêng/bản sao của subrepoA và sử dụng nó làm repo cho " subrepoA ". Bằng cách đó bạn có thể thêm các tùy chỉnh cho nó (thêm subrepo vào nó), và vẫn giữ đồng bộ với các bản cập nhật pulic/external cho subrepoA. –

1

Vấn đề ở đây là một trong những hạn chế không thể tránh khỏi của Mercurial: một kho lưu trữ tương ứng với một cây thư mục trên máy tính của bạn. Kho lưu trữ chịu trách nhiệm cho mọi thứ dưới cây thư mục đó.

Khi kho lưu trữ cấp cao nhất của bạn bao gồm một kho lưu trữ phụ, nó sẽ chuyển giao quyền kiểm soát hoàn toàn phụ của phần đó trong cấu trúc thư mục của nó. Vì vậy, cấp cao nhất không thể chỉ định một kho lưu trữ phụ khác ở đâu đó trong các thư mục con repos đầu tiên.

Giải pháp 1

Subrepo_B thực sự là một sự phụ thuộc của Subrepo_A. Trong trường hợp đó, hãy tạo kho lưu trữ của bạn phản ánh sự phụ thuộc thực sự bằng cách chỉnh sửa tệp .hgsub của Subrepo_A để thêm Subrepo_B trong Mô-đun/Sebrepo_B. Điều này làm việc vì Subrepo_A giữ quyền kiểm soát đối với các thư mục của nó.

Giải pháp 2

Subrepo_A không phụ thuộc vào Subrepo_B, bạn đã đặt nó ở đó cho thuận tiện. Trong trường hợp này, bạn nên tạo cả Subrepo_A và Subrepo_B là subrepos (ở các vị trí khác nhau) của Build_Repo.