![]() |
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, Y và Z, cấu trúc như sau:
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é.├── backend│ ├── X│ ├── Y│ └── Z├── frontend│ ├── X-UI│ ├── Y-UI│ └── Z-UI└── mobile├── X-APP├── Y-APP└── Z-APP
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/Y và frontend/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
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
git sparse-checkout list
git checkout
Lúc này bạn sẽ thấy 2 folder backend và 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 masterYour 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
Lưu ý là chức năng sparse-checkout chỉ có từ phiên bản git v2.26.0 trở lên.