Mô-đun con Git là gì và bạn sử dụng chúng như thế nào?

Tác giả sysadmin, T.Bảy 18, 2023, 01:33:34 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Mô-đun con Git là gì và bạn sử dụng chúng như thế nào?


Các mô-đun con Git là một cách bao gồm một kho lưu trữ Git làm thư mục con của một kho lưu trữ khác. Kiểu lồng mã nguồn này có thể rất hữu ích cho các dự án muốn kiểm soát tốt hơn các thành phần phụ thuộc và quy trình xây dựng của chúng, đồng thời rất dễ thiết lập.


1. Tại sao sử dụng Submodules?

Khi bạn thêm một mô-đun con vào kho lưu trữ Git, về cơ bản, bạn đang tạo một liên kết giữa hai kho lưu trữ. Kho lưu trữ chính và kho lưu trữ mô hình con có thể được cập nhật độc lập với nhau. Kho lưu trữ chính sẽ chứa một URL từ xa cũng như tham chiếu đến ID cam kết đã kiểm xuất trong lịch sử của mô hình con. Khi bạn sao chép kho lưu trữ gốc, nó cũng sẽ sao chép các mô hình con.

Điều này có thể hữu ích nếu bạn có một dự án phụ thuộc vào mã từ một dự án khác và bạn muốn tách biệt hai dự án (và lịch sử phiên bản của chúng), nhưng vẫn có thể dễ dàng làm việc với cả hai.

Giải pháp thay thế chính cho các mô-đun con là sử dụng các trình quản lý gói như NPM, NuGet hoặc Maven. Trình quản lý gói cung cấp kho lưu trữ tập trung các gói và thư viện có thể dễ dàng cài đặt và cập nhật. Tuy nhiên, bạn phải xuất bản một phiên bản cụ thể của từng gói mà bạn muốn sử dụng. Và nếu mã của bạn là riêng tư, bạn phải sử dụng sổ đăng ký gói riêng của mình.

Các mô-đun con Git cho phép bạn quản lý các phần phụ thuộc chặt chẽ hơn hầu hết các trình quản lý gói. Với các mô-đun con, bạn có thể chọn chính xác phiên bản nào của mỗi phần phụ thuộc mà bạn muốn đưa vào dự án của mình và việc cập nhật ID cam kết của mô-đun con sẽ dễ dàng hơn so với việc xuất bản một gói mới.

Các mô-đun con cũng giúp việc bảo trì và sử dụng các nhánh của các thư viện phổ biến trở nên dễ dàng hơn, đây là điều mà nhiều công ty lựa chọn khi cần các tính năng bổ sung hoặc tùy chỉnh. Cuối cùng, nếu bạn đang duy trì kho lưu trữ cho mô-đun và cần kiểm soát chi tiết đối với các phần phụ thuộc của mình, bạn có thể cân nhắc sử dụng mô-đun con thay vì trình quản lý gói.

2. Cách sử dụng mô-đun con Git

Nếu bạn đang nhân bản một kho lưu trữ đã sử dụng các mô hình con, thì hầu hết công việc đã được thực hiện cho bạn rồi. Ứng dụng khách git của bạn sẽ tự động sao chép và tải xuống kho lưu trữ mô hình con và nó sẽ cập nhật bất cứ khi nào những người bảo trì khác đẩy các thay đổi vào mô hình con.

Nếu không, bạn có thể cần phải chạy

Mã nguồn [Chọn]
git clone
với

Mã nguồn [Chọn]
--recursive
sẽ quét và cập nhật tất cả các mô hình con.

Mã nguồn [Chọn]
git clone --recurse-submodules URL
Việc thêm một mô hình con mới khá đơn giản. Nếu bạn đang thêm một mô-đun con hoàn toàn mới từ kho lưu trữ nguồn, bạn sẽ chỉ cần chạy git submodule add:

Mã nguồn [Chọn]
git submodule add URL submodule_directory
Điều này sẽ tải xuống kho lưu trữ mô hình con từ URL và sao chép nó vào thư mục submodule_directory.

Tuy nhiên, nếu bạn muốn chuyển đổi một thư mục hiện có, quá trình này sẽ phức tạp hơn một chút. Bạn có thể đọc hướng dẫn của chúng tôi để chuyển đổi một thư mục thành một mô-đun con tại đây, nhưng quá trình này liên quan đến việc sao chép lại kho lưu trữ chính của bạn, lọc lịch sử cam kết để chỉ bao gồm thư mục mô-đun, sau đó đẩy mô-đun con sang một kho lưu trữ mới.

Khi bạn thêm mô-đun con, bạn sẽ cần cam kết các thay đổi đối với kho lưu trữ gốc. Điều này sẽ cập nhật cấu hình cho những người khác kéo kho lưu trữ gốc.

Mã nguồn [Chọn]
git commit -m "Added submodule submodule_directory"
3. Cập nhật mô hình con Git

Nếu ai đó đã cập nhật mô hình con hoặc bạn cần lấy các bản cập nhật từ kho lưu trữ của mô hình con, bạn sẽ muốn sử dụng git submodule update:

Mã nguồn [Chọn]
git submodule update --remote
Tuy nhiên, nếu bạn cần tự mình thay đổi, nó sẽ trở nên phức tạp hơn một chút. Thực hiện các thay đổi đối với mã trong mô-đun con Git cần cẩn thận hơn một chút so với cập nhật mã trong kho lưu trữ Git thông thường và bạn thường có hai tùy chọn:

  • Thực hiện các thay đổi trong một kho lưu trữ riêng cho mô hình con, đồng thời cam kết và cập nhật chúng như bình thường. Bạn sẽ cần chạy git submodule updatetrong kho lưu trữ chính để lấy các thay đổi mới.
  • Thực hiện các thay đổi bên trong kho lưu trữ gốc. Vì một mô-đun con về cơ bản là một kho lưu trữ Git được nhúng, nên bạn có thể cdvào thư mục mô-đun con và chạy các lệnh Git như bình thường. Đây là một trong những lợi ích chính của các mô-đun con, vì bạn có thể duy trì các kho lưu trữ riêng biệt trong khi làm việc trên cả hai cùng một lúc.

Nếu bạn đang thực hiện các thay đổi bên trong kho lưu trữ gốc, bạn sẽ cần cdvào mô hình con và cập nhật:

Mã nguồn [Chọn]
cd submodule_dir

git commit -am "submodule commit"

git push

Sau đó, quay trở lại repo gốc và đẩy các bản cập nhật cho mô hình con vào kho lưu trữ của cha mẹ:

Mã nguồn [Chọn]
cd..

git commit -am "updated submodule"

git push

Bạn sẽ thấy các thay đổi trên cả kho lưu trữ Github của mô hình con cũng như kho lưu trữ chính.