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 diff –check: bắt lỗi whitespace đúng phần chuẩn bị commit

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

Bạn đã stage một file có dấu cách thừa cuối dòng, chạy git diff --check và không thấy thông báo. Điều này có thể hoàn toàn đúng: lệnh đang nhìn phần chưa stage, còn lỗi đã nằm trong index.

Bài hướng dẫn cách chọn hai phía của diff trước khi kiểm tra whitespace. Ví dụ được chạy bằng Git 2.54.0 ngày 27/10/2026 trong repository tạm. Các lệnh kiểm tra không tự sửa file; bước tạo fixture ở dưới chỉ ghi dữ liệu giả vào thư mục mới.

1. Phân biệt ba cách kiểm tra

git diff --check
git diff --cached --check
git diff --check HEAD

Lệnh đầu so working tree với index, nên kiểm tra thay đổi chưa stage của file được Git theo dõi. Lệnh thứ hai so index với HEAD, phù hợp với nội dung bạn sắp commit. Lệnh thứ ba so trạng thái file trong working tree với HEAD; nó hữu ích khi muốn nhìn thay đổi hiện tại, nhưng không thay thế việc xác nhận phần staged.

File mới chưa được theo dõi không tự xuất hiện trong diff thông thường. Với file định đưa vào commit, stage đúng file rồi kiểm tra phần cached. Không dùng git add . chỉ để khiến một phép kiểm tra có dữ liệu, vì bạn có thể vô tình đưa thêm file không liên quan vào commit.

2. Tạo một lỗi có thể nhìn thấy

Chạy từng lệnh trong Bash hoặc zsh. Repository thử nghiệm nằm ở đường dẫn do mktemp tạo; biến demo_dir cần được giữ trong cùng phiên terminal.

demo_dir="$(mktemp -d)"
git -C "$demo_dir" init -q
git -C "$demo_dir" -c user.name=Demo -c [email protected] \
  -c commit.gpgsign=false commit --allow-empty -qm base
printf 'xin chao  \n' > "$demo_dir/demo.txt"
git -C "$demo_dir" add demo.txt
git -C "$demo_dir" diff --check
git -C "$demo_dir" diff --cached --check

Lệnh đầu kiểm tra diff không báo lỗi vì working tree và index giống nhau. Lệnh cuối báo trailing whitespace ở dòng 1 và trả mã thoát khác 0. Hai dấu cách trước \n trong lệnh printf là chủ ý của fixture, không phải lỗi trình bày cần tự xóa trước khi chạy.

Hãy quan sát đường dẫn và số dòng trong thông báo. Chúng giúp bạn quay về đúng thay đổi mới thay vì chạy công cụ xóa whitespace cho cả repository.

3. Sửa file rồi nhớ stage lại

printf 'xin chao\n' > "$demo_dir/demo.txt"
git -C "$demo_dir" diff --cached --check
git -C "$demo_dir" add demo.txt
git -C "$demo_dir" diff --cached --check

Phép kiểm tra cached đầu tiên vẫn báo lỗi: bản cũ còn ở index. Sau lần add tiếp theo, nó không in lỗi và trả mã 0. Đây là lý do việc sửa đúng file trên editor chưa đủ để bảo đảm commit sắp tạo chứa bản đã sửa.

Các thông báo lỗi mong đợi trong fixture không phải sự cố cần bỏ qua mã thoát. Nếu chạy cả bài bằng một script có set -e, script sẽ dừng tại lần kiểm tra cố ý gây lỗi. Để thực hành, chạy các lệnh riêng rồi xem echo $? ngay sau lệnh cần kiểm tra.

4. –check không giống –exit-code

--check tìm lỗi được quy tắc whitespace và conflict marker của Git nhận biết trong thay đổi. Một diff có nội dung mới hợp lệ vẫn có thể trả 0. --exit-code lại dùng mã thoát để cho biết hai phía khác nhau; tài liệu ghi nó không tương thích với --check.

Trong CI, trước tiên xác định bạn muốn kiểm tra gì. Với nội dung đã commit, có thể dùng một khoảng commit rõ ràng:

git diff --check BASE_SHA HEAD

Thay BASE_SHA bằng commit gốc đã xác định cho lượt kiểm tra. Nếu cần so từ merge base, ba chấm có ý nghĩa riêng; đừng đổi hai chấm thành ba chấm mà chưa xác định phạm vi mong muốn. Bài không thiết lập workflow CI hay giả định nhánh mặc định của dự án.

Quy tắc dự án và lỗi thường gặp

core.whitespace điều khiển loại lỗi được xem xét. Mặc định có whitespace cuối dòng và một số mẫu thụt lề không phù hợp; nó không phải lệnh cấm mọi tab. Dự án còn có thể điều chỉnh theo đường dẫn qua thuộc tính whitespace trong .gitattributes.

Nếu cùng thay đổi mà máy bạn và CI cho kết quả khác, đọc cấu hình đang có hiệu lực và attributes của file trước. Đừng đổi cấu hình global chỉ để làm một lần kiểm tra im lặng. Với file cố ý có khoảng trắng mang ý nghĩa, nhóm cần một quy tắc cụ thể và được review.

Giới hạn và bước tiếp theo

Kiểm tra này không chạy ứng dụng, không phát hiện mọi lỗi cú pháp và không thay thế formatter hoặc linter của ngôn ngữ. Mã thoát khác 0 cũng có thể đến từ ref không tồn tại hoặc lỗi sử dụng; hãy đọc thông báo, không diễn giải mọi lỗi thành whitespace.

Trong quy trình commit, chọn đúng file, kiểm tra cached rồi xem lại diff nội dung là một vòng ngắn dễ duy trì. Lợi ích chính là thấy đúng bản sắp commit, thay vì chỉ thấy editor hiện đã sạch.

Nguồn tham khảo

  • Git: git-diff và –check
  • Git: core.whitespace
  • Git: thuộc tính whitespace theo đường dẫn

Tags: Code reviewGitWorkflow
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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

by Suong Nguyen
26/10/2026
0

Dùng check-ignore để đọc nguồn pattern, dòng khớp và ngoại lệ, đồng thời phân biệt file bị ignore với file đã nằm trong index.

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.

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 SectionList: nhóm dữ liệu với key và tiêu đề riêng cho từng phần
  • Phỏng vấn JavaScript: Object.is khác === thế nào với NaN, +0 và -0?
  • Android Sharesheet: chia sẻ văn bản và đường dẫn bằng ACTION_SEND

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