Lấy một phần repository với sparse-checkout trong Git

Chức năng sparse-checkout chỉ có từ phiên bản git v2.26.0 trở lên.
Khi sử dụng Git để quản lý source code, sẽ có những lúc chúng ta cần checkout về một phần nhỏ của repo, thay vì toàn bộ repo đó. Ví dụ khi làm việc trên một monorepo rất to, nhưng bạn chỉ cần phụ trách một module rất nhỏ.

Lấy một phần repository với sparse-checkout trong Git
Lấy một phần repository với sparse-checkout trong Git

Lấy ví dụ một mono repository dùng chung cho cả backend, frontend và mobile team, mỗi team có 3 project là X, YZ, cấu trúc như sau:
├── backend
│   ├── X
│   ├── Y
│   └── Z
├── frontend
│   ├── X-UI
│   ├── Y-UI
│   └── Z-UI
└── mobile
    ├── X-APP
    ├── Y-APP
    └── Z-APP
Lưu ý khi mình nói mono repository, thì nó là mono repository, tất cả mọi project đều thuộc cùng 1 git repository chứ không có submodule gì hết nhé.

Bạn là một frontend developer thuộc team Y, để làm việc thì bạn chỉ cần 2 thư mục backend/Yfrontend/Y-UI. Không có lý do gì để bạn phải clone toàn bộ repository trên. Để rồi mỗi lần pull code là phải ngồi chờ git nó pull luôn cả những project mà mình không cần làm.

Đầu tiên, chúng ta clone repository này về, và thêm vào option --no-checkout để lấy về tracking info của repo chứ không lấy về bất cứ file/folder nào cả.
git clone --no-checkout [email protected]:tuanndev/master-project
Lúc này, nếu truy cập vào thư mục master-project, bạn sẽ không thấy nội dung gì cả.

Tiếp theo, sử dụng lệnh git sparse-checkout set để chỉ định các thư mục muốn pull về:
git sparse-checkout set /backend/Y /frontend/Y-UI
Kiểm tra danh sách các sparse checkout bằng lệnh:
git sparse-checkout list
Bây giờ có thể checkout các file trong list này về bằng lệnh:
git checkout
Lúc này bạn sẽ thấy 2 folder backend frontend, bên trong mỗi folder sẽ chỉ có project Y.

Khi gõ lệnh git status thì bạn sẽ thấy nội dung kiểu như này:
On branch master
Your branch is up to date with 'origin/master'.
 
**You are in a sparse checkout with 7% of tracked files present.**
 
nothing to commit, working tree clean
Chứng tỏ hiện tại chúng ta chỉ đang có khoảng 7% nội dung project trên working copy này.

Lưu ý là chức năng sparse-checkout chỉ có từ phiên bản git v2.26.0 trở lên.

Getting Info...

إرسال تعليق

Chấp nhận Cookies
Chúng tôi cung cấp cookie trên trang web này để phân tích lưu lượng truy cập, ghi nhớ các tùy chọn của bạn và tối ưu hóa trải nghiệm của bạn.
Xem thêm
Oops!
Có vẻ như đã xảy ra sự cố với kết nối Internet của bạn. Vui lòng kết nối với internet và tải lại trang web.
AdBlock Detected!
Chúng tôi đã phát hiện ra rằng bạn đang sử dụng plugin chặn quảng cáo trong trình duyệt của mình.
Doanh thu chúng tôi kiếm được từ quảng cáo được sử dụng để quản lý trang web này, bạn vui lòng đưa trang web của chúng tôi vào white list trong plugin chặn quảng cáo của bạn.
Site is Blocked
Xin lỗi! Trang web không khả dụng ở quốc gia của bạn!