- vừa được xem lúc

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

0 0 13

Người đăng: Ngô Văn Tuấn

Theo Viblo Asia

Bài viết gốc tại Lấy một phần repository với sparse-checkout trong Git.

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 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 git@github.com: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 backendfrontend, 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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 701

- vừa được xem lúc

Tập hợp những câu lệnh GIT hữu dụng

Dưới đây là một vài ví dụ về các câu lệnh Git mà tôi thường dùng. git config --global user.name "John Doe". git config --global user.

0 0 55

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 2): Trigger một work flow

Events trigger. Bạn có thể cấu hình cho workflows chạy khi có một sự kiện nào đó xảy ra trên GitHub, theo một lịch có sẵn hoặc cũng có thể là một sự kiện nào đó xảy ra ngoài GitHub.

0 0 70

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 1): Một ít lý thuyết

CI/CD là gì. Về mặt khái niệm là vậy nhưng về mặt triển khai thì CI/CD là quá trình tự động thực hiện các quá trình build, test, release, deploy khi có các trigger như commit/merge code lên một branch định sẵn hoặc có thể là tự động chạy theo một lịch cố định.

0 0 118

- vừa được xem lúc

Giới thiệu về Git LFS

. Git LFS là gì . Git LFS làm điều này bằng cách thay thế các tệp lớn trong repo của bạn bằng một con trỏ nhỏ.

0 0 29

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 66