Bạn thêm một đường dẫn vào .gitignore nhưng Git vẫn báo file thay đổi. Hoặc ngược lại, file mới không xuất hiện để commit dù bạn không nhớ đã bỏ qua nó. Hai tình huống này cần được chẩn đoán bằng trạng thái theo dõi và nguồn quy tắc, thay vì xóa cache Git theo một lệnh sao chép trên mạng.
1. Kiểm tra file đã được theo dõi chưa
Tài liệu gitignore nêu rõ: quy tắc ignore không tác động đến file đã được Git theo dõi. Vì vậy, thêm tên file vào .gitignore không tự ngừng theo dõi và không xóa nội dung khỏi lịch sử.
Chạy tại gốc repository, thay đường dẫn minh họa bằng file cần kiểm tra:
git status --short -- config/local.json
git ls-files -- config/local.json
Nếu lệnh thứ hai liệt kê đường dẫn, file có trong index. Hãy giải quyết quyết định theo dõi file trước khi sửa thêm các mẫu ignore. Nếu không có kết quả, tiếp tục tìm quy tắc đang áp dụng; đừng suy ra file chắc chắn không tồn tại trên ổ đĩa.
2. Tìm đúng nguồn quy tắc
git check-ignore -v -- config/local.json
Theo tài liệu git-check-ignore, chế độ verbose cho biết nguồn, số dòng và mẫu khớp. Mẫu có thể đến từ .gitignore trong dự án, cấu hình loại trừ local hoặc cấu hình cá nhân, không nhất thiết chỉ từ file .gitignore ở thư mục gốc.
Mặc định, file đã được theo dõi không được báo bởi check-ignore. Để khảo sát quy tắc mà không xét index:
git check-ignore -v --no-index -- config/local.json
Đây là lệnh chẩn đoán, không thay đổi trạng thái theo dõi. Ngoài ra, nếu mẫu được in ra bắt đầu bằng dấu !, đó là quy tắc phủ định; có dòng output không tự động có nghĩa file đang bị loại trừ.
3. Viết mẫu có phạm vi rõ ràng
Ví dụ đặt trong .gitignore ở gốc repository:
/config/local.json
/build/
*.log
Mẫu đầu nhắm file cấu hình ở vị trí cụ thể; mẫu thứ hai nhắm thư mục build ở gốc; mẫu cuối khớp tên có đuôi .log ở nhiều cấp bên dưới. Đây là ví dụ, không phải danh sách cần áp dụng cho mọi dự án. Một file .log có thể là dữ liệu kiểm thử cần commit, nên phải xem xét ngoại lệ theo mục đích thực tế.
Nếu muốn giữ README trong thư mục cache, có thể bỏ qua nội dung trực tiếp rồi mở ngoại lệ:
/cache/*
!/cache/README.md
Đừng thay dòng đầu bằng /cache/ rồi kỳ vọng ngoại lệ con vẫn hoạt động: khi thư mục cha bị loại trừ, việc đưa file con trở lại có giới hạn. Kiểm tra từng đường dẫn bằng check-ignore sau khi sửa.
4. Ngừng theo dõi là một thay đổi cần review
Nếu nhóm đã thống nhất một file cấu hình local không nên tiếp tục nằm trong repository, hãy sao lưu bản cần giữ, kiểm tra staged changes và đọc hướng dẫn git rm. Tùy chọn --cached chỉ loại khỏi index và giữ file working tree trên máy đang chạy; nó không phải lệnh xóa lịch sử.
Việc loại bỏ sau khi commit vẫn là thay đổi của dự án, có thể ảnh hưởng đến người khác khi họ nhận commit. Cần cung cấp file mẫu không chứa bí mật và hướng dẫn tạo cấu hình local. Không chạy thao tác loại toàn bộ repository khỏi index chỉ để xử lý một file.
5. Ignore không phải cơ chế bảo vệ bí mật
Mật khẩu đã lọt vào commit không trở nên an toàn khi bổ sung .gitignore. Nếu thông tin xác thực bị lộ, cần xử lý theo quy trình sự cố, bao gồm thu hồi hoặc thay thế thông tin đó; việc dọn lịch sử là công việc riêng cần phối hợp.
Ngay cả với file chưa commit, ignore chỉ hỗ trợ luồng làm việc Git. Nó không ngăn sao chép file vào log, gói triển khai, bản sao lưu hoặc công cụ khác. Không đưa bí mật thật vào ví dụ kiểm thử quy tắc.
6. Checklist trước khi commit
- Đã xác định file tracked hay untracked.
- Đã biết mẫu khớp nằm ở đâu, thay vì đoán.
- Quy tắc dùng chung được đặt trong cấu hình của dự án; ngoại lệ cá nhân không làm nhiễu nhóm.
- File mẫu và dữ liệu kiểm thử cần thiết vẫn có thể được theo dõi.
- Đã review danh sách file staged và bảo toàn phần việc không liên quan.
Cách xử lý đáng tin cậy bắt đầu từ câu hỏi “Git đang theo dõi file hay đang bỏ qua nó theo quy tắc nào?”. Khi trả lời được câu đó, thay đổi thường nhỏ và dễ kiểm chứng hơn nhiều so với việc làm lại toàn bộ index.




Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.