2011-10-18 20 views
119

Trong các kịch bản của tôi, tôi thường sử dụng thư viện (của tôi hoặc của người khác) có repos riêng của họ. Tôi không muốn lặp lại những người trong repo của tôi và gặp khó khăn với việc cập nhật chúng mỗi khi một phiên bản mới đi ra. Tuy nhiên, khi ai đó nhân bản repo, nó vẫn hoạt động cục bộ và không có liên kết bị hỏng.Làm cách nào tôi có thể có các phụ thuộc được liên kết trong một repo git?

Bất kỳ ý tưởng nào về những gì tôi có thể làm?

Trả lời

168

Bạn có thể thực hiện việc này với các mô-đun con trong git. Trong kho của bạn, làm:

git submodule add path_to_repo path_where_you_want_it 

Vì vậy, nếu kho của thư viện đã có một URL của git://github.com/example/some_lib.git và bạn muốn nó ở lib/some_lib trong dự án của bạn, bạn muốn nhập:

git submodule add git://github.com/example/some_lib.git lib/some_lib 

Lưu ý rằng nhu cầu này được thực hiện từ thư mục cấp cao nhất trong kho lưu trữ của bạn. Vì vậy, không cd vào thư mục mà bạn đang đặt nó trước.

Sau khi bạn thêm một submodule, hoặc bất cứ khi nào ai đó làm một kiểm tươi của kho lưu trữ của bạn, bạn sẽ cần phải làm:

git submodule init 
git submodule update 

Và sau đó tất cả các môđun con bạn đã thêm sẽ được kiểm tra ra đồng sửa đổi bạn có.

Khi bạn muốn nâng cấp lên phiên bản mới hơn của một trong những thư viện, cd vào submodule và kéo:

cd lib/some_lib 
git pull 

Sau đó, khi bạn làm một git status bạn sẽ thấy lib/somelib liệt kê trong phần sửa đổi. Thêm tệp đó, cam kết và bạn đã cập nhật. Khi cộng tác viên đưa cam kết đó vào kho lưu trữ của họ, họ sẽ thấy lib/somelib được sửa đổi cho đến khi họ chạy lại git submodule update.

+2

Cảm ơn câu trả lời của bạn, đã được bình chọn! (và có thể sẽ chấp nhận nó vào ngày mai) Có cách nào để chỉ thêm một tệp từ repo khác làm phụ thuộc không? Hay nó phải là toàn bộ thư mục? –

+2

Nếu bạn muốn theo dõi nó như là một submodule (và do đó, có thể dễ dàng kéo trong bản cập nhật), bạn sẽ phải kéo trong toàn bộ kho lưu trữ. Không giống như nhiều VCS khác, git thực sự chỉ muốn đối phó với kho lưu trữ cấp cao nhất. – Emily

+3

[đọc này] (https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/) để biết submodule là gì tốt và cách giải quyết Các vấn đề tiềm ẩn. và [một cuộc thảo luận về nó] (https://news.ycombinator.com/item?id=3904932). – minghua

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