Git Submodules

Git nâng cao

Amanda Crawford-Adamo

Software and Data Engineer

Git Submodule là gì?

Git Submodule

git submodule
  • Repo lồng trong repo khác
  • Quản lý phiên bản và lịch sử riêng
  • Thay đổi trong submodule không ảnh hưởng repo chính
  • Repo chính có thể tham chiếu phiên bản cụ thể của submodule

Minh họa một repo chứa nhiều repo bên trong.

Git nâng cao

Thêm submodule

Thêm submodule bằng liên kết hoặc thư mục dưới đường dẫn chỉ định.

git submodule add <repository link|dir> <path>

$$

Ví dụ

Thêm thư viện data validator vào dự án ETL dưới thư mục libs/validator trong repo ETL.

git submodule add https://github.com/example/data-validator.git libs/validator
Git nâng cao

Liệt kê submodule

Liệt kê tất cả submodule trong dự án

git submodule status

Ví dụ

$ git submodule status
e1f2...7w8x9 data_cleaning_lib
a1b2...q7r8 api_connector
d9e8...t3u2 visualization_toolkit
Git nâng cao

Cập nhật submodule

Cập nhật submodule với thay đổi mới nhất

Có vài tùy chọn:

  1. Cập nhật tất cả submodule có mã nguồn trên máy cục bộ.
    git submodule update --init 
    
  2. Cập nhật tất cả submodule có mã nguồn trên repo remote.
    git submodule update --init --remote 
    
  3. Cập nhật một submodule cụ thể
    git submodule update --init <path_to_submodule>
    
Git nâng cao

Xóa submodule

Quy trình xóa submodule

  1. Hủy khởi tạo submodule.
    git submodule deinit <submodule_name>
    
  2. Xóa submodule khỏi chỉ mục repo git.
    git rm <path>
    
Git nâng cao

Tách submodule từ repo lớn

  1. Sao chép mọi tệp cần có trong repo submodule mới sang một thư mục khác ngoài repo.

  2. Trong thư mục mới, tạo repo mới cho submodule:

    git init <new-submodule>
    
  3. Dùng git filter-repo để trích xuất tệp và lịch sử liên quan từ dự án chính:

    git filter-repo --path <extract_path> --invert-paths
    
  4. Thêm repo đã trích xuất làm submodule vào dự án chính:

    git submodule add <new-submodule_path> <path_to_store_submodule>
    
Git nâng cao

Khi nào dùng submodule và thực hành tốt

Trường hợp dùng:

  1. Quản lý thư viện bên ngoài
  2. Chia sẻ mã giữa dự án
  3. Giữ phiên bản phụ thuộc cố định

Thực hành tốt:

  1. Luôn cập nhật submodule
  2. Dùng đường dẫn tương đối
  3. Thông báo thay đổi cho nhóm
Git nâng cao

Ayo berlatih!

Git nâng cao

Preparing Video For Download...