2013-11-21 27 views
7

Tôi có một dự án khá lớn với nhiều phụ thuộc. Dự án được lưu trữ trong kho lưu trữ git và các phụ thuộc được lưu trữ trong các kho lưu trữ git chuyên dụng được liên kết dưới dạng các mô-đun con. Các phụ thuộc có thể có thêm các phụ thuộc (một lần nữa, sử dụng các mô đun con git).Quản lý phụ thuộc trong kho lưu trữ git (sử dụng mô-đun con)

Tính năng này hoạt động tốt. Tuy nhiên, nếu hai phụ thuộc yêu cầu cả phụ thuộc thứ ba, tôi gặp phải sự cố khi cập nhật.

Một đồ thị phụ thuộc trông như thế này:

[Main Repo] 
    | 
    |-- [ModuleA] 
    |  | 
    |  \-- [ModuleC] 
    | 
    \-- [ModuleB] 
      | 
      \-- [ModuleC] 

Ngay bây giờ tôi cập nhật con trỏ submodule trong ModuleA và ModuleB. Bằng cách này, cả hai mô-đun vẫn tự chứa. Tuy nhiên, đây là rất nhiều công việc.

Sự cố này thường được giải quyết như thế nào trong các dự án lớn hơn? Tôi đang tìm các phương pháp hay nhất để tiếp cận loại vấn đề này.

Cảm ơn!

+0

Tôi rõ ràng muốn đảm bảo ModuleC luôn giống nhau bất cứ nơi nào được sử dụng trong dự án của tôi (Tôi biết cơ chế mô-đun phụ cho phép kiểm tra các phiên bản khác nhau). –

Trả lời

1

Trong dự án lớn hơn, những gì bạn muốn là giữ tất cả các phụ thuộc của bạn trên một cấp độ.

Điều đó không có nghĩa là ModuleAModuleB không giữ sự phụ thuộc của riêng chúng thành ModuleC.

Điều đó có nghĩa là repo chính gốc hiện tại của bạn bao gồm sự phụ thuộc vào ModuleC, hoạt động như phiên bản giới thiệu cho C.
Đó cũng cho phép bạn để phát hiện khi một phụ thuộc phải được ghi đè như, trong trường hợp của bạn, vì một trong hai submodules của bạn: sự phụ thuộc vào ModuleC cho ModuleA hoặc ModuleB sẽ phải được ghi đè bởi một để ModuleC từ Repo chính của bạn .

0

Chúng tôi sử dụng Quack để kéo mô-đun cụ thể từ kho git khác. Chúng tôi cần phải kéo mã mà không có toàn bộ mã cơ sở của kho lưu trữ được cung cấp - chúng tôi cần mô đun/tệp rất cụ thể từ kho lưu trữ khổng lồ đó và phải được cập nhật mỗi khi chúng tôi chạy cập nhật.

Vì vậy, chúng tôi đã đạt được theo cách này,

Tạo cấu hình

name: Project Name 

modules: 
    local/path: 
    repository: https://github.com/<username>/<repo>.git 
    path: repo/path 
    branch: dev 
    other/local/path/filename.txt: 
    repository: https://github.com/<username>/<repo>.git 
    hexsha: 9e3e9642cfea36f4ae216d27df100134920143b9 
    path: repo/path/filename.txt 

profiles: 
    setup: 
    tasks: ['modules'] 

Với cấu hình trên, nó tạo 1 thư mục từ kho github cung cấp theo quy định tại cấu hình mô-đun đầu tiên, và là một trong những khác để kéo và tạo tệp từ repo đã cho.

phát triển

khác chỉ cần chạy

$ quack setup 

Và nó kéo mã từ cấu hình ở trên.

Hy vọng điều này sẽ khắc phục sự cố của bạn khi sử dụng lại nhiều mô-đun.

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