Sử dụng Git Submodule

Trang web của tôi đã là mã nguồn mở trên Github, tất cả nội dung đều được lưu trữ công khai. Nhưng vì một số lý do nên tôi quyết định lưu nội dung đăng tải của mình ở một repostory khác và đặt chế độ private. Nếu bạn đi đến repo trang web của tôi, bạn sẽ thấy một thư mục trông như thế này _posts @ <hash> (đây là thư mục tôi lưu các bài viết của tôi). Nếu bạn click vào nó, bạn sẽ được đưa đến trang báo lỗi 404 và khi tôi nhấp vào nó, tôi sẽ được đưa đến một repo riêng tư chứa tất cả hình ảnh và bài đăng của tôi.

Cách sử dụng Submodule, Git Submodule, Private Repo Submodules

Rất nhiều người đã hỏi tôi cách sử dụng private git submodules, vì vậy tôi sẽ nói qua ở đây. Lưu ý rằng đây không phải là phần đi sâu vào Submodule mà chỉ là những kiến ​​thức cơ bản về thêm, cập nhật và sao chép một repo với Submodules.

Git Submodules

Trước khi làm bất cứ điều gì với Submodule, tôi khuyên bạn nên chạy lệnh sau để cập nhật cấu hình và đặt submodule-recurse thành true, cho phép git clonegit pull tự động cập nhật các mô-đun con.

$ git config --global submodule.recurse true
Lệnh Mô tả
git submodule add <repo> Thêm một mô-đun con trong một kho lưu trữ.
git submodule update Cập nhật các mô-đun con hiện có trong kho lưu trữ (thêm --remote để kéo từ một vị trí từ xa).
git submodule init Khởi tạo tệp mô-đun con cục bộ (sử dụng nếu repo không được sao chép với --recurse-submodules.

Thêm một Submodule

  • Giả sử ta có 2 repo:

    • Một repo public: github.com/you/blog
    • Một repo private: github.com/you/posts
  • Trước tiên, bạn sẽ add repo private vào repo public bằng cách từ thư mục gốc của souce code, chạy lệnh:

    $ git submodule add https://github.com/you/posts.git posts

    Với đoạn lệnh trên thì khi chạy Git nó sẽ tạo cho bạn 1 file .gitmodules và clone 1 thư mục có tên là posts. Bạn có thể chạy lênh git status thì sẽ thấy kết quả như:

    Changes to be committed:
    (use "git rm --cached <file>..." to unstage)
    new file:   .gitmodules
    new file:   posts

    Trông file .gitmodules sẽ có nội dung tương tự như sau:

    [submodule "posts"]
    path = posts
    url = https://github.com/you/posts

    Bây giờ bạn có thể push .gitmodulesposts lên thế là xong!

Deploy lên Netlify

Với ví dụ trên thì Submodule ở chế độ Private. Do vậy để Netlify tự động tìm và nạp lên được thì bạn có thể tham khảo thêm cách thực hiện tại đây hoặc làm theo các bước sau:

  1. Sửa url trong file .gitmodules thành dạng SSH (ví dụ: [email protected]:you/posts.git)
  2. Lấy Deploy key từ Netlify.
  3. Thêm Deploy Key vừa lấy vào repo private (vào Setting → Deploy Keys) ở chế độ Read-only là xong.

Như vậy khi bạn push code lên thì Netlify sẽ tự động tìm nạp module con từ file .gitmodules

© 2019-2020 Phan Nhật Chánh