Menu
CoddyTech

Git Submodule

Cập nhật lần cuối

Submodule nhúng một repository Git vào bên trong một repository khác, cố định ở một commit cụ thể. Repo cha ghi lại commit nào của submodule mà nó phụ thuộc, nên ai cũng nhận được cùng một phiên bản. Đây là cách đưa vào một thư viện hoặc thành phần dùng chung có repository riêng mà không phải sao chép code của nó.

Bạn có thể thử các lệnh này trong terminal playground: một shell thật ngay trên trình duyệt, không cần cài đặt gì.

git submodule nhúng một repository khác vào trong repository của bạn, cố định ở đúng một commit.

Cú pháp

LệnhTác dụng
git submodule add <url> libs/xThêm một repo làm submodule tại libs/x
git clone --recurse-submodules <url>Clone một repo cùng các submodule của nó
git submodule update --init --recursiveKhởi tạo và tải submodule sau khi clone thông thường
git submodule update --remoteCập nhật submodule lên commit mới nhất
git submodule statusHiện commit của từng submodule

Tình huống thường gặp

Mục tiêuLệnh
Clone một dự án có dùng submodulegit clone --recurse-submodules <url>
Tải submodule khi đã clone xonggit submodule update --init --recursive
Nâng submodule lên bản mới nhấtgit submodule update --remote

Câu hỏi thường gặp về git submodule

Git submodule là gì?

Submodule là một repository Git lồng bên trong một repository Git khác, cố định ở một commit. Repo cha lưu con trỏ tới đúng commit đó thay vì các tệp của submodule, nên mọi người cùng làm việc sẽ checkout cùng một phiên bản. Submodule dùng để đưa vào một dependency hoặc thành phần dùng chung có repo và lịch sử riêng.

Làm sao clone một repository có submodule?
Dùng git clone --recurse-submodules <url> để clone repo cha và mọi submodule trong một bước. Nếu bạn đã clone mà quên cờ đó, chạy git submodule update --init --recursive sau đó để lấp đầy các thư mục submodule.
Làm sao cập nhật submodule lên commit mới nhất?
Chạy git submodule update --remote, lệnh này fetch nhánh mà mỗi submodule theo dõi và chuyển nó tới commit mới nhất. Sau đó commit thay đổi trong repo cha, vì repo cha ghi lại commit submodule mà nó trỏ tới: bản cập nhật chưa được lưu cho tới khi bạn commit con trỏ đó.
Vì sao thư mục submodule trống sau khi clone?
Vì bạn đã clone mà không có --recurse-submodules, nên Git tạo thư mục nhưng không tải nội dung về. Khắc phục bằng git submodule update --init --recursive, lệnh này khởi tạo và tải về mọi submodule.
Có thể luyện tập lệnh này online không?
Có. Mở terminal playground để chạy git submodule trong một shell thật ngay trên trình duyệt, không cần cài đặt gì. Khóa học Git tương tác miễn phí của Coddy cũng hướng dẫn từng bước cách thiết lập repository.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học Git cùng Coddy

Bắt đầu