Mô tả lỗi
Bạn mở một dự án trong VS Code và panel Source Control hiện ra thông báo này:
The git repository at 'path' has too many changes. Only a subset of Git features will be enabled.
Badge Source Control bị đóng băng. File diff không tải được. Thanh trạng thái Git ở dưới cùng hiển thị thông tin sai. Extension Git tích hợp sẵn của VS Code có giới hạn cứng là 10.000 file. Vượt qua giới hạn này, nó sẽ tự động thu hẹn chức năng để bảo vệ hiệu năng trình soạn thảo — khiến panel source control của bạn hoạt động nửa vời.
Nguyên nhân
Chín trong mười trường hợp là do một trong những lý do sau:
- Các thư mục
node_modules/,.venv/,dist/, hoặc thư mục build output bị thiếu trong.gitignore - Một cây file được tạo tự động bị stage nhầm hoặc bị bỏ sót không track
- Bạn mở thư mục gốc của monorepo chứa nhiều subproject được Git theo dõi lồng nhau
- Lỗi cú pháp trong
.gitignoreâm thầm vô hiệu hóa toàn bộ các pattern matching
Cách khắc phục từng bước
Bước 1 — Đếm số file Git thực sự nhìn thấy
Chạy lệnh này từ thư mục gốc của dự án:
git status --porcelain | wc -l
Nếu kết quả lên đến hàng chục nghìn, bạn đã tìm ra thủ phạm: .gitignore bị thiếu hoặc bị hỏng. Một dự án bình thường thường chỉ có dưới 50 file thay đổi trong quá trình phát triển.
Bước 2 — Sửa file .gitignore
Thêm các thư mục thường gây nhiễu vào .gitignore:
# Node
node_modules/
dist/
.next/
build/
# Python
.venv/
__pycache__/
*.pyc
# Java / Gradle / Maven
target/
.gradle/
# Chung
*.log
.DS_Store
Thumbs.db
.env
Chỉ lưu file thôi chưa đủ — Git đã index những đường dẫn đó rồi. Hãy xóa cache của nó:
git rm -r --cached .
git add .
git status --porcelain | wc -l
Số file đó sẽ giảm từ hàng chục nghìn xuống còn hai chữ số. Trước khi commit bất cứ thứ gì, hãy chạy git status và xác nhận danh sách trông hợp lý.
Bước 3 — Tăng giới hạn file của VS Code (tùy chọn)
Có lý do chính đáng để track nhiều file — chẳng hạn, một dataset lớn được tạo tự động mà bạn cố ý quản lý phiên bản? Hãy tăng ngưỡng trong .vscode/settings.json:
{
"git.repositoryScanner.maxFileCount": 50000
}
Hoặc tắt hoàn toàn cảnh báo nếu bạn quản lý Git bên ngoài VS Code:
{
"git.ignoreLimitWarning": true
}
Bước 4 — Tăng giới hạn inotify (chỉ trên Linux)
Các hệ thống Linux dùng inotify để theo dõi file khi có thay đổi. Giới hạn mặc định thường quá thấp cho các dự án lớn. Hãy kiểm tra và tăng nó lên:
# Kiểm tra giới hạn hiện tại
cat /proc/sys/fs/inotify/max_user_watches
# Tăng tạm thời
sudo sysctl fs.inotify.max_user_watches=524288
# Làm cố định qua các lần khởi động lại
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Bước 5 — Ngăn VS Code theo dõi các thư mục gây nhiễu
Một file .gitignore đúng sẽ xử lý phía Git. Nhưng VS Code có trình theo dõi file riêng cho IntelliSense — và nó không quan tâm đến .gitignore. Hãy chỉ định rõ những gì cần bỏ qua:
{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/.venv/**": true,
"**/dist/**": true,
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true
},
"files.exclude": {
"**/node_modules": true,
"**/__pycache__": true
}
}
Xác nhận đã sửa xong
- Tải lại VS Code: Ctrl+Shift+P → Developer: Reload Window
- Kiểm tra panel Source Control — banner cảnh báo phải biến mất
- Badge Git bây giờ phải hiển thị đúng số file đã thay đổi
- Chạy
git statustrong terminal và xác nhận danh sách hợp lý
Mẹo nhanh
- Monorepo: mở thư mục gốc của repo khiến VS Code đếm tất cả file trong mọi sub-package. Hãy mở một thư mục con cụ thể nếu bạn chỉ làm việc trong một khu vực.
- Git submodule: VS Code tính file trong submodule vào tổng số. Đặt
"git.detectSubmodules": falseđể tắt nếu bạn không cần tích hợp submodule. - .gitignore toàn cục: đừng thêm
.DS_StorevàThumbs.dbvào từng dự án. Hãy đặt chúng vào file ignore toàn cục một lần:git config --global core.excludesfile ~/.gitignore_global - Sau khi chạy
git rm -r --cached ., hãy chạygit diff --cached --name-only | head -20trước khi commit — chỉ để chắc chắn không có file quan trọng nào bị unstage nhầm.

