+1

[Series Git Thực Chiến] Bài 1: .gitignore - Vệ sĩ thầm lặng bảo vệ dự án của bạn khỏi "rác" và "phốt"

Xin chào anh em cộng đồng Viblo!

Nhớ lại ngày đầu mới chập chững bước vào nghề, chắc hẳn không ít anh em ở đây từng ngây thơ gõ git add . rồi đẩy nguyên cái thư mục node_modules hay thư mục /vendor nặng vài trăm MB lên GitHub đúng không? Nhẹ thì ngồi đợi push mỏi cổ, nặng thì bị lead "gõ đầu" vì làm phình to repo.

Tệ hơn nữa, đã có ai từng vô tình push cả file .env chứa mật khẩu Database hay Secret Key lên public repo chưa? Đêm đó chắc chắn là một đêm mất ngủ để đổi pass toàn bộ hệ thống.

Để những câu chuyện "tâm linh" trên không xảy ra, bài học đầu tiên và quan trọng nhất trước khi bắt đầu bất kỳ dự án nào không phải là commit code ra sao, mà là học cách ngó lơ những thứ không cần thiết. Đó chính là lúc .gitignore tỏa sáng.

1. .gitignore là gì?

Nói một cách dân dã, .gitignore là một file text đơn giản nằm ở thư mục gốc của dự án. Nó đóng vai trò như một "danh sách đen" (black-list). Bạn ghi tên file hoặc thư mục nào vào đây, Git sẽ tự động "bịt mắt lơ đi" và tuyệt đối không track sự thay đổi của chúng.

Tại sao chúng ta cần nó?

  • Bảo mật: Không bao giờ đưa file cấu hình chứa thông tin nhạy cảm (.env, config.json) lên repo.
  • Tối ưu dung lượng: Bỏ qua các thư mục chứa thư viện do package manager tạo ra (như node_modules của Node.js hay vendor của Laravel/PHP) vì người khác clone về chỉ cần chạy lệnh install là xong.
  • Sạch sẽ: Loại bỏ các file tạm do Hệ điều hành hoặc IDE sinh ra (.DS_Store của macOS, .idea, .vscode).

2. Cú pháp "Thần chú" trong .gitignore

Viết .gitignore rất dễ, bạn chỉ cần nhớ vài quy tắc sau:

  • *: Đại diện cho chuỗi ký tự bất kỳ (vd: *.log sẽ bỏ qua tất cả các file có đuôi log).
  • /: Dùng để chỉ định thư mục (vd: node_modules/).
  • !: Dùng để loại trừ một file khỏi quy tắc ignore trước đó (vd: ignore hết file .txt nhưng chừa lại readme.txt).

3. Demo: File .gitignore tiêu chuẩn cho dân Backend

Giả sử chúng ta đang setup một dự án mới. Dưới đây là một template .gitignore thực chiến mà tôi luôn dùng:

# 1. Bỏ qua các thư viện của bên thứ 3 (Tránh làm nặng repo)
/node_modules/
/vendor/

# 2. Bỏ qua các file môi trường (CỰC KỲ QUAN TRỌNG - Bảo mật)
.env
.env.backup
*.local

# 3. Bỏ qua các file log do hệ thống sinh ra
/storage/logs/
*.log
npm-debug.log*

# 4. Bỏ qua các file cấu hình của Editor/OS
.vscode/
.idea/
.DS_Store

# 5. Ignore tất cả file .zip nhưng ngoại trừ file release.zip
*.zip
!release.zip

4. Kinh nghiệm xương máu (Senior's Tip)

Có một tình huống 99% anh em sẽ gặp: "Anh ơi, em lỡ commit file .env lên Git rồi, giờ em thêm nó vào .gitignore nhưng sao Git vẫn track nó thế này???"

Lý do: .gitignore chỉ có tác dụng với những file chưa từng được track (untracked). Một khi file đã bị commit, việc bạn thêm tên nó vào .gitignore là vô nghĩa.

Cách giải quyết (Bỏ túi ngay câu lệnh này): Bạn cần xóa file đó khỏi bộ nhớ cache của Git trước, sau đó mới commit lại.

# Gỡ track file .env khỏi Git (nhưng vẫn giữ lại file thật trong máy)
git rm --cached .env

# Nếu lỡ commit cả 1 thư mục như node_modules, hãy dùng thêm cờ -r (recursive)
git rm -r --cached node_modules/

# Sau đó commit lại để update lịch sử
git add .
git commit -m "chore: remove .env and node_modules from tracking"

Tổng kết

Tạo file .gitignore là việc mất chưa tới 1 phút, nhưng nó cứu bạn khỏi hàng tá giờ đồng hồ fix bug, dọn dẹp repo và giải trình với khách hàng về vấn đề bảo mật. Hãy tạo thói quen: Khởi tạo repo -> Viết .gitignore -> Code gì thì code.

Tò mò chút nhé... 👀 Giờ dự án đã sạch sẽ an toàn rồi, bạn bắt tay vào làm tính năng mới (Feature A). Đang code dở tay thì sếp đập bàn: "Fix gấp cho anh cái bug trên Production, ngay và luôn!".

Bạn toát mồ hôi: Code Feature A đang viết dở, lỗi tùm lum, chưa thể commit. Nhưng không commit thì làm sao chuyển sang code bản Production để fix bug bây giờ?

Đừng lo, Git có một thứ gọi là "Phân thân chi thuật". Ở bài viết tiếp theo, tôi sẽ hướng dẫn anh em bí kíp: Bài 2 - Branching: Nghệ thuật rẽ nhánh để team không "đấm" nhau lúc ghép code!

Hẹn gặp lại anh em ở bài sau nhé! Chúc anh em code không bug! 🚀


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.