5 phút đọc

Submodule

Submodule

Cần nhúng một thư viện dùng chung vào dự án mà vẫn giữ lịch sử riêng của nó? Submodule cho phép một repo lồng trong một repo.

1. Submodule là gì?

Submodule nhúng một repo Git khác vào thư mục con của repo hiện tại. Repo cha không chứa code của submodule mà chỉ ghi nhớ submodule đang trỏ tới đúng một commit cụ thể, qua file .gitmodules.

git submodule add https://github.com/org/shared-lib libs/shared

# Sau khi clone repo cha, kéo nội dung submodule về:
git submodule update --init --recursive

2. Khi nào dùng?

Tình huốngLựa chọn
Ghim repo dùng chung ở phiên bản cố địnhSubmodule phù hợp
Phụ thuộc thông thườngDùng package manager (npm, pip...)
Nhiều dự án liên quan chặtCân nhắc monorepo

3. Bẫy thường gặp

Sau khi clone repo có submodule, nếu quên git submodule update --init thì thư mục submodule rỗng và build hỏng. Cập nhật lên commit mới của submodule bằng git submodule update --remote.

Cách nhớ nhanh

Submodule = repo trong repo, cha ghim đúng một commit. Nhớ --init sau khi clone, nếu không thư mục rỗng. Phụ thuộc thường thì nên dùng package manager thay vì submodule.