aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Git check-ignore: tìm đúng quy tắc khiến file bị bỏ qua

Suong Nguyen by Suong Nguyen
26/10/2026
in Hướng dẫn
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Bạn không thấy file mới trong git status, sửa .gitignore nhiều lần vẫn chưa hiểu quy tắc nào đang tác động. Thay vì xóa từng dòng để thử, hãy để Git chỉ ra nguồn pattern và vị trí khớp bằng check-ignore.

Bài dùng repository thử độc lập với dữ liệu giả. Các lệnh được kiểm tra bằng Git 2.54.0; tài liệu được đối chiếu ngày 26/10/2026. Không có thao tác đổi ignore rule hoặc index của repository dự án trong lượt kiểm chứng.

1. Dựng ba đường dẫn có ý nghĩa khác nhau

Theo tài liệu gitignore, các pattern phục vụ file chưa được theo dõi; chúng không tự bỏ theo dõi file đã nằm trong Git. Pattern còn có thể đến từ nhiều nơi, không chỉ .gitignore ở gốc dự án.

Tạo thư mục mới rồi chạy:

mkdir git-ignore-demo
cd git-ignore-demo
git init -b main
git config user.name 'Ignore Demo'
git config user.email '[email protected]'
mkdir build
printf '%s\n' 'build/' '*.log' '!important.log' > .gitignore
printf '%s\n' 'generated sample' > build/output.txt
printf '%s\n' 'dummy log' > app.log
printf '%s\n' 'keep this dummy note' > important.log
git status --short --ignored

Trong fixture, build/output.txt bị loại bởi quy tắc thư mục, app.log bị loại bởi đuôi log, còn important.log là ngoại lệ. Dữ liệu log đều giả để việc theo dõi hay không theo dõi file không vô tình đưa thông tin riêng tư vào Git.

2. Đọc source, số dòng và pattern

git check-ignore -v build/output.txt app.log
git check-ignore -v important.log

Với fixture đã chạy, hai đường dẫn đầu chỉ tới các dòng build/ và *.log. Đường dẫn important.log hiện cùng pattern bắt đầu bằng dấu !. Đây là chi tiết quan trọng: có một dòng output ở chế độ verbose không tự có nghĩa file cuối cùng bị loại.

Tham chiếu git check-ignore mô tả định dạng gồm nguồn quy tắc, số dòng, pattern và đường dẫn. Khi pattern là ngoại lệ có !, nó cho biết đường dẫn không bị bỏ qua theo kết quả đó. Đọc cả pattern thay vì chỉ kiểm tra terminal có in chữ hay không.

Muốn kiểm tra trạng thái cuối ở chế độ không verbose, thử:

if git check-ignore -q important.log; then
  printf '%s\n' 'ignored'
else
  printf '%s\n' 'not ignored'
fi

Kết quả đã kiểm tra là not ignored. Trong một script thực tế, vẫn cần phân biệt exit code 1 với lỗi nghiêm trọng như 128 nếu bạn đang xử lý đầu vào hoặc cấu hình không chắc chắn. Fixture này có repository và đường dẫn đã biết để tập trung vào kết quả quy tắc.

3. File tracked là một câu hỏi khác

Tạo một file giả rồi cố ý thêm nó vào index để quan sát trường hợp đã theo dõi:

printf '%s\n' 'tracked dummy content' > tracked.log
git add .gitignore
git add -f tracked.log
git commit -m 'Track a dummy log for ignore inspection'
git ls-files --error-unmatch tracked.log
git check-ignore -v --no-index tracked.log

Các lệnh này chỉ dành cho repository thử. Ls-files xác nhận tracked.log đã được theo dõi. Với –no-index, check-ignore bỏ qua trạng thái index khi phân tích pattern, nên bạn nhìn thấy quy tắc *.log vẫn khớp đường dẫn đó.

Điều này không có nghĩa Git vừa tự loại file khỏi commit hoặc xóa nó. Bạn đang hỏi “quy tắc có khớp đường dẫn này nếu không xét index không?”. Đừng dùng kết quả đó để kết luận file tracked đã được bảo vệ chỉ vì tên khớp ignore rule.

4. Tìm quy tắc ngoài file ở gốc

Khi đường dẫn không có trong .gitignore bạn đang đọc, xem cột source của output verbose. Quy tắc có thể nằm ở file .gitignore cấp dưới, .git/info/exclude hoặc file cấu hình qua core.excludesFile. Chọn nơi sửa theo phạm vi cần chia sẻ với nhóm, không mặc định thay một cấu hình global.

Trong một cấp ưu tiên, quy tắc khớp sau cùng có tác động quyết định; giữa các nguồn còn có quy tắc ưu tiên riêng. Nếu ngoại lệ không có hiệu lực, đọc thêm phần pattern của tài liệu, đặc biệt trường hợp thư mục cha đã bị loại. Một dấu ! không phải quyền khôi phục mọi đường dẫn bất kể cấu trúc cha.

Kiểm tra trước khi sửa repository thật

Chọn một file cần giữ và một file cần bỏ qua rồi chạy check-ignore cho cả hai. Xem git status và ls-files để tách file mới khỏi file đã tracked. Sau khi sửa đúng nguồn pattern, kiểm tra lại hai trường hợp để tránh làm một nhóm output không cần thiết xuất hiện hàng loạt.

Đừng dùng force add làm cách chữa mặc định cho file chưa hiểu vì sao bị loại. Trong bài, -f chỉ dùng với dữ liệu giả để tạo tình huống học; với file thật, hãy xác định nội dung được phép đưa vào lịch sử trước khi quyết định theo dõi.

Lỗi thường gặp và kết luận

Sửa .gitignore gốc trong khi pattern nằm ở nguồn khác, nhìn output ! như một quy tắc loại và nhầm tracked với untracked là ba lỗi dễ gặp. Check-ignore giúp bạn hỏi đúng câu về quy tắc; ls-files giúp kiểm tra một câu khác về index.

Khi đã có source và số dòng, thay đổi ignore rule trở thành một việc có thể giải thích và review. Bạn không cần đoán bằng cách xóa dần các pattern trong dự án.

Nguồn tham khảo

  • Git: gitignore
  • Git: check-ignore và exit status

Tags: DebuggingGitGitignore
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Git reflog: tìm lại commit trước amend bằng một nhánh phục hồi

by Suong Nguyen
25/10/2026
0

Quan sát commit cũ sau amend trong repository thử, đọc reflog rồi tạo nhánh phục hồi mà không reset nhánh đang làm.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Git stash: cất cả file mới và khôi phục phần đã stage bằng –index

by Suong Nguyen
24/10/2026
0

Thử Git stash trong repository riêng để phân biệt tracked, untracked, ignored và khôi phục staged state có kiểm soát.

Minh họa dùng SSH key để kết nối GitHub an toàn

Git restore: hiểu HEAD, staged và working tree trước khi hoàn tác

by Suong Nguyen
23/10/2026
0

Thực hành trong repository tạm để biết git restore lấy dữ liệu từ đâu, đổi vùng nào và cách unstage mà vẫn giữ phần đang sửa.

Minh họa dùng SSH key để kết nối GitHub an toàn

Git worktree: sửa hotfix khi nhánh hiện tại đang làm dở

by Suong Nguyen
22/10/2026
0

Mở một thư mục làm việc cho hotfix, kiểm tra đúng nhánh và dọn worktree sau khi hoàn tất mà vẫn giữ thay đổi đang làm dở.

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native Image: cover và contain khác nhau trong cùng một khung ảnh
  • JavaScript sort: vì sao số 10 đứng trước 2 và mảng gốc bị đổi?
  • Android plurals: vì sao getQuantityString cần truyền count hai lần?

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply