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 clean: xem trước file sẽ xóa và phân biệt -x với -X

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

Sau một lần thử build, working tree có thêm file nháp, thư mục thử nghiệm và sản phẩm build bị ignore. Bạn muốn dọn đúng một phần trong số đó. Trước khi dùng git clean, cần nhìn rõ tập đường dẫn mà lệnh đang chọn, vì một chữ x viết hoa hay viết thường có thể đổi hẳn phạm vi.

Bài kiểm tra bằng Git 2.54.0, đối chiếu tài liệu ngày 08/11/2026. Mọi thao tác thực nghiệm nằm trong repository tạm mới tạo; không chạy clean trong repository làm việc của blog. Ví dụ không đụng remote, lịch sử commit, submodule hoặc repository lồng nhau.

Hiểu dry-run trước khi bật xóa thật

git-clean dùng -n để chỉ liệt kê những gì sẽ xóa. -d cho phép xét thư mục untracked khi không chỉ định pathspec. Mặc định, file ignored không nằm trong tập dọn; -X chỉ chọn ignored, còn -x đưa cả ignored vào phạm vi.

Đừng suy từ chữ “ignored” thành “không có giá trị”. gitignore mô tả quy tắc bỏ qua file chưa được track; nó không đánh giá file nào còn cần dùng. Một thư mục build có thể tái tạo, nhưng một file cấu hình local cũng có thể bị ignore.

Tạo một nơi thực hành riêng

Chạy trong Bash. Các lệnh đều dùng git -C với đường dẫn vừa sinh, nên không phụ thuộc thư mục terminal hiện tại:

set -eu
demo_repo=$(mktemp -d /tmp/aedev-clean-demo.XXXXXX)
git -C "$demo_repo" init -q
printf 'build/\n' > "$demo_repo/.gitignore"
printf 'tracked example\n' > "$demo_repo/README.md"
git -C "$demo_repo" add .gitignore README.md
mkdir "$demo_repo/scratch" "$demo_repo/build"
printf 'draft\n' > "$demo_repo/note.tmp"
printf 'scratch\n' > "$demo_repo/scratch/a.txt"
printf 'generated\n' > "$demo_repo/build/app.bin"
printf 'Demo repository: %s\n' "$demo_repo"

git -C "$demo_repo" clean -nd
git -C "$demo_repo" clean -ndX
git -C "$demo_repo" clean -ndx

README và .gitignore đã vào index; ví dụ không cần tạo commit để Git nhận biết hai đường dẫn được track. Ba phần còn lại cố tình đại diện cho file untracked, thư mục untracked và thư mục ignored.

Trong môi trường kiểm tra, lượt -nd liệt kê note.tmp và scratch/; lượt -ndX chỉ liệt kê build/; lượt -ndx liệt kê cả ba. Tên thông báo có thể phụ thuộc ngôn ngữ của Git, nên hãy đối chiếu đường dẫn và xác nhận các file vẫn tồn tại sau cả ba lượt.

Chỉ xóa một thư mục của ví dụ

Sau khi đã kiểm tra dry-run, chạy tiếp trong cùng shell, với biến demo_repo vẫn trỏ đúng repository tạm:

test -n "$demo_repo"
test -f "$demo_repo/scratch/a.txt"
git -C "$demo_repo" clean -nd -- scratch/
git -C "$demo_repo" clean -fd -- scratch/
test ! -e "$demo_repo/scratch"
test -f "$demo_repo/note.tmp"
test -f "$demo_repo/build/app.bin"
test -f "$demo_repo/README.md"

Lần xóa thật chỉ nhắm scratch/. Các lệnh test sau đó xác nhận thư mục ấy mất, còn file nháp, sản phẩm build và README vẫn ở đó. Dấu -- ngăn pathspec bị hiểu thành tùy chọn. Lệnh có -f là thao tác xóa thật; ở bài này nó chỉ dùng với dữ liệu thử nghiệm vừa tạo.

Một quy trình áp dụng vào công việc

Trước hết xác định đường dẫn bạn thực sự muốn dọn. Chạy dry-run với chính tùy chọn và pathspec dự định dùng, đọc danh sách rồi mới quyết định. Nếu thay -X bằng -x, thay pathspec hoặc chạy từ vị trí khác, hãy xem trước lại vì tập ứng viên đã đổi.

Không coi git clean là cách hoàn tác mọi trạng thái của working tree. Ví dụ chỉ dọn file chưa được track; nó không giải quyết phần sửa của README đã được track. Cũng đừng trông chờ Git khôi phục một file nháp chưa từng được add hoặc commit chỉ vì nó từng nằm trong thư mục repository.

Lỗi thường gặp khi đọc phạm vi

  • Chạy dry-run thiếu -d, sau đó xóa thật lại thêm -d: hai lần đang xét phạm vi khác nhau.
  • Nhìn nhầm -x và -X: kiểm tra trực tiếp danh sách đường dẫn trong ba lượt của ví dụ.
  • Chạy từ thư mục con rồi nghĩ đang dọn toàn repo: dùng đường dẫn gốc rõ ràng và kiểm tra lại vị trí.
  • Sao chép lệnh xóa rộng từ log cũ: tạo dry-run mới trên trạng thái hiện tại.

Bài tập tiếp theo là thêm một file mới vào scratch, chạy lại phần xem trước và dự đoán kết quả trước khi đọc log. Khả năng đọc chính xác tập ứng viên quan trọng hơn việc nhớ một chuỗi cờ dọn nhanh.

Nguồn tham khảo

  • Git: git-clean
  • Git: gitignore

Tags: Developer WorkflowGitWorking tree
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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

Git diff A..B và A…B: so hai snapshot hay phần nhánh B thay đổi?

by Suong Nguyen
07/11/2026
0

Tạo hai nhánh cùng tiến lên để thấy vì sao diff hai đầu nhánh có thể chứa thay đổi chỉ xuất hiện ở main.

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

Git mv: đổi tên đã vào index, sửa nội dung sau đó vẫn cần stage

by Suong Nguyen
06/11/2026
0

Đổi tên file trong repository tạm rồi kiểm tra riêng rename đã stage và phần sửa nội dung còn ở working tree.

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

Git add -u: stage file đã sửa hoặc xóa, nhưng chưa thêm file mới

by Suong Nguyen
05/11/2026
0

So sánh add -u và add -A trên một repository tạm có đủ file sửa, file xóa và file mới chưa được theo dõi.

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

Git rm –cached: ngừng track file và giữ bản trên máy

by Suong Nguyen
04/11/2026
0

Thử bỏ một file cấu hình demo khỏi index rồi thêm gitignore, kiểm tra file trên đĩa vẫn còn và hiểu giới hạn với lịch sử commit.

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 Platform.select: native và default được chọn theo thứ tự nào?
  • Phỏng vấn JavaScript: vì sao regex.test cùng chuỗi lại đổi kết quả?
  • Android TextView.setText(Int): số đếm có thể bị hiểu thành resource ID

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