Bạn có thể muốn xem xét hỗ trợ submodule của Git. Một submodule cho phép bạn nhúng một kho git bên trong một kho git khác. Có alternative solutions cho loại điều này, nhưng tôi đã không sử dụng chúng bản thân mình.
Một ví dụ có thể trông như thế này:
$ git clone git://github.com/username/project.git
$ cd project
$ git submodule add git://github.com/username/framework.git framework
$ git commit -m "added framework submodule"
Nếu bạn đang nhân bản một kho lưu trữ với các môđun con, bạn cần phải sử dụng --recursive
tùy chọn:
$ git clone --recursive git://<repository-with-submodules>.git
Hoặc cách khác, bạn có thể sao chép thường xuyên và sau đó chạy:
$ git submodule init
$ git submodule update
Đọc tài liệu được liên kết (và)) để biết thêm thông tin.
Nếu thay đổi được thực hiện cho các submodule, bạn mang lại cho họ trong như thế này:
# first update the submodule just like any other git repository
$ cd project/framework
$ git pull
# now you have to record the new commit in the parent repository
$ cd ..
$ git commit -m "updated framework submodule"
Bước cuối cùng là cần thiết vì git giữ một kỷ lục của cụ cam kết liên kết với một submodule nhất định (để khi bất cứ ai nhái cha mẹ họ sẽ nhận được phiên bản của mô-đun con, thay vì bản sửa đổi cập nhật nhất của nó, có thể đã trải qua các thay đổi phá vỡ sẽ ngăn nó hoạt động như dự định với kho lưu trữ gốc). Vì vậy, nếu bạn cập nhật submodule, bạn cần phải ghi lại các cam kết mới trong phụ huynh.
Nếu bạn thực hiện thay đổi trong mô-đun phụ framework
, bạn sẽ chỉ cần git push
chúng giống như bạn làm với bất kỳ kho lưu trữ nào khác. Sau đó bạn sẽ phải cam kết sửa đổi mới trong mô-đun chính.
Tuyệt vời, vì vậy khi thay đổi được thực hiện cho Framework, làm thế nào để tôi đưa chúng vào dự án ngay bây giờ là một mô-đun của nó? Ngoài ra, nếu tôi thực hiện thay đổi cho Framework thay vì dự án, làm thế nào để đẩy những người đó trở lại vào khung git repo? – Justin
Tôi đã cập nhật câu trả lời của mình. – larsks
Một lưu ý nhỏ. HEAD submodule được tách ra, do đó bạn cần phải cẩn thận khi thực hiện các thay đổi trong mô-đun con. Tạo một nhánh (hoặc chuyển sang nhánh), thực hiện các thay đổi, cam kết và sau đó đẩy. – GoZoner