Menu

Tạo .gitignore

Tạo tệp .gitignore gọn gàng cho mọi stack: ngôn ngữ, framework, IDE và hệ điều hành.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

Công cụ tạo .gitignore là gì?

Mọi repository Git đều cần tệp .gitignore. Đây là danh sách dạng văn bản thuần gồm các đường dẫn Git *không* nên theo dõi: sản phẩm build, thư mục thư viện phụ thuộc, cấu hình IDE, rác của hệ điều hành như .DS_Store. Không có nó, commit đầu tiên sẽ vô tình kéo theo node_modules/, .env và target/, và dọn mớ đó còn phiền hơn nhiều so với viết tệp này đúng ngay từ đầu.

Mỗi hệ sinh thái bỏ qua những thứ khác nhau, và hầu hết dự án dùng nhiều hệ sinh thái cùng lúc. Một app Node + TypeScript điển hình trên laptop macOS với VS Code đã cần gộp bốn danh sách bỏ qua khác nhau. Tự viết theo trí nhớ thì dễ quên coverage/, lộ một tệp .env, hoặc commit nhầm .idea/ từ cấu hình JetBrains của đồng đội.

Vì vậy công cụ này gom các mẫu được chọn lọc từ dự án chuẩn github/gitignore, cũng là bộ quy tắc đứng sau gợi ý tự động chính thức của GitHub, và cho bạn xếp chồng chúng lại. Đánh dấu những ô phù hợp, bạn sẽ có một .gitignore không trùng lặp để dán thẳng vào repo. Không cần tài khoản, không tải lên gì, chạy hoàn toàn trong trình duyệt.

Bạn sẽ học được gì khi tạo .gitignore

  • Mẫu trong .gitignore dùng cú pháp glob: *.log bỏ qua mọi tệp log, build/ bỏ qua một thư mục, !important.log bỏ việc bỏ qua cho một tệp cụ thể dù có glob khớp với nó.
  • Mẫu được áp dụng tương đối theo vị trí của tệp .gitignore: một .gitignore nằm trong src/ chỉ ảnh hưởng đến các tệp trong src/.
  • Các tệp đã được theo dõi **không** bị bỏ qua hồi tố. Nếu bạn commit node_modules/ rồi mới thêm nó vào .gitignore, bạn vẫn phải chạy git rm -r --cached node_modules để ngừng theo dõi.
  • Nhiều tệp .gitignore có thể cùng tồn tại: ở thư mục gốc repo, trong thư mục con, cộng thêm một ~/.gitignore_global toàn cục cho công cụ cá nhân như JetBrains hay hệ điều hành của bạn.
  • Thứ tự quan trọng với phủ định: một !pattern phía sau chỉ có tác dụng nếu một quy tắc trước đó thực sự đã bỏ qua tệp. Phủ định một thư mục không thể bỏ việc bỏ qua cho một tệp nằm bên trong.

Cách tạo .gitignore từng bước

  1. Chọn một bộ có sẵn (không bắt buộc)

    Nếu dự án khớp với một tổ hợp phổ biến như Next.js, Django, Rails, hãy nhấn vào bộ có sẵn để đánh dấu tất cả ô liên quan cùng lúc. Sau đó bỏ bớt hoặc thêm vài mục nếu bạn có thêm công cụ khác.

  2. Thêm ngôn ngữ

    Ngôn ngữ nào cũng có sản phẩm cần bỏ qua: Node có node_modules/, Python có __pycache__/ và virtualenv, Java có target/ và các tệp .class. Chọn những ngôn ngữ mà dự án thực sự biên dịch.

  3. Thêm framework

    Ngoài quy tắc của ngôn ngữ, framework còn thêm thư mục build riêng: Next.js cần .next/ và .vercel, Django cần staticfiles/ và db.sqlite3, Rails cần tmp/ và /storage/*. Đánh dấu framework nếu bạn dùng nó.

  4. Thêm trình soạn thảo và hệ điều hành

    Thêm mẫu cho các trình soạn thảo mà **cả nhóm** dùng (không chỉ bạn): nếu có ai dùng JetBrains hay Vim, hãy thêm vào. Sau đó thêm các hệ điều hành trong nhóm: macOS tạo ra .DS_Store, Windows tạo ra Thumbs.db, cả hai đều rất dễ bị commit nhầm.

  5. Sao chép hoặc tải về

    Khung bên phải hiển thị kết quả đã gộp và bỏ trùng lặp. Nhấn **Sao chép** để dán thẳng vào .gitignore ở thư mục gốc repo, hoặc **Tải về** để lưu tệp trực tiếp.

Tra cứu nhanh cú pháp .gitignore

Những mẫu bạn sẽ viết thường xuyên nhất. Tài liệu đầy đủ ở git-scm.com/docs/gitignore.

MẫuÝ nghĩaVí dụ
node_modulesBỏ qua tệp hoặc thư mục có đúng tên này, ở bất kỳ đâu trong cây thư mụcKhớp cả /node_modules lẫn src/node_modules
node_modules/Dấu gạch chéo ở cuối: chỉ khớp **thư mục**, không khớp tệp trùng tênKhông khớp một tệp vô tình tên là node_modules
/buildDấu gạch chéo ở đầu: chỉ neo vào thư mục chứa .gitignoreKhớp /build nhưng không khớp src/build
*.logGlob: khớp mọi tệp kết thúc bằng .logKhớp error.log, debug.log, logs/foo.log
!important.logPhủ định: bỏ việc bỏ qua cho một tệp cụ thể đã khớp với quy tắc trước đóKết hợp với *.log để giữ lại một tệp log được theo dõi
docs/**/draftHai dấu sao: khớp draft trong bất kỳ thư mục con nào của docs/Khớp docs/v1/draft và docs/2025/q1/draft
# commentChú thích: Git bỏ qua các dòng bắt đầu bằng #Nhóm quy tắc bằng tiêu đề mục như # Node.js

Ví dụ .gitignore để thử

Một .gitignore tối giản cho Node.js + macOS

Những gì mọi dự án Node trên Mac đều cần

# Node.js node_modules/ npm-debug.log* dist/ .env .env.local # macOS .DS_Store ._*

Mức tối thiểu cho mọi dự án Node chia sẻ với đồng đội dùng macOS. Kể cả dự án phụ nhỏ xíu cũng nên có các quy tắc này: thiếu .DS_Store và node_modules/, bạn sẽ phải xử lý những xung đột vô nghĩa.

Python + Django + JetBrains

Bộ công cụ Python phía máy chủ phổ biến

# Python __pycache__/ *.py[cod] .venv .pytest_cache/ # Django *.log local_settings.py db.sqlite3 media/ staticfiles/ # JetBrains .idea/ *.iml

Một backend Django điển hình được phát triển trong PyCharm. Lưu ý db.sqlite3 cục bộ bị bỏ qua: môi trường production không bao giờ dùng nó, và commit nó sẽ làm lộ dữ liệu dev và làm hỏng bản clone mới của đồng đội.

Ghi đè một quy tắc bằng phủ định

Bỏ qua mọi log trừ một tệp

*.log !keep-me.log

Dòng đầu bỏ qua mọi tệp .log. Quy tắc !keep-me.log sau đó đưa đúng tệp đó trở lại. Phủ định chỉ có tác dụng với tệp mà quy tắc trước đó thực sự đã bỏ qua: bạn không thể bỏ việc bỏ qua cho một tệp nằm trong thư mục đã bị bỏ qua.

Lỗi .gitignore thường gặp

  • Thêm .gitignore sau khi đã commit và mong các tệp đã commit biến mất. Chúng không biến mất: bạn phải chạy git rm -r --cached <path> để ngừng theo dõi.
  • Commit .env dù chỉ một lần. Chỉ một commit cũng làm lộ bí mật vĩnh viễn trong lịch sử repo. Thêm .env* vào .gitignore **trước** commit đầu tiên, và đổi ngay mọi bí mật đã lỡ lọt vào.
  • Quên rác riêng của hệ điều hành trong repo dùng chung. Chỉ cần một đồng đội dùng macOS mà repo không có quy tắc .DS_Store, các tệp đó sẽ xuất hiện trong diff của mọi PR và làm chậm việc review.
  • Cố bỏ việc bỏ qua cho một tệp nằm trong thư mục đã bị bỏ qua. Khi đã bỏ qua build/, không phủ định nào đưa build/keep.txt trở lại được: Git thậm chí không nhìn vào bên trong thư mục. Hãy sắp xếp lại cấu trúc hoặc chuyển tệp ra ngoài.
  • Trộn cấu hình trình soạn thảo chỉ mình bạn dùng vào .gitignore của dự án. Chỉ bạn dùng JetBrains trong một nhóm dùng VS Code? Hãy đặt .idea/ vào ~/.gitignore_global **toàn cục** của bạn.

Câu hỏi thường gặp về công cụ tạo .gitignore

Các mẫu .gitignore này lấy từ đâu?
Các mẫu được rút gọn từ dự án mã nguồn mở github/gitignore, cũng là nguồn mà GitHub dùng khi bạn đánh dấu "add .gitignore" lúc tạo repo mới. Chúng tôi đã cắt gọn từng mẫu chỉ còn những quy tắc các nhóm thực sự cần và nhóm chúng theo danh mục.
Có cần commit chính tệp .gitignore không?
Có. .gitignore được tạo ra để quản lý phiên bản và chia sẻ với nhóm. Đây là *thỏa thuận* về những gì nên và không nên theo dõi. Ngoại lệ là tùy chọn cá nhân (ví dụ trình soạn thảo bạn thích): những thứ đó thuộc về ~/.gitignore_global toàn cục của bạn.
Làm sao ngừng theo dõi một tệp đã được commit?
Thêm nó vào .gitignore trước, rồi chạy git rm --cached <path> (hoặc git rm -r --cached <folder>) để xóa nó khỏi index mà không xóa trên ổ đĩa. Commit cả hai thay đổi cùng lúc để đồng đội thấy cập nhật.
Một repo có thể có nhiều tệp .gitignore không?
Có. Git tìm .gitignore trong từng thư mục và áp dụng quy tắc cho cây con đó. Điều này hữu ích với monorepo, nơi frontend và backend có quy tắc bỏ qua rất khác nhau: giữ quy tắc ở thư mục gốc cho rác chung của hệ điều hành và trình soạn thảo, còn quy tắc theo ngôn ngữ thì đặt trong thư mục của từng package.
.gitignore và .git/info/exclude khác nhau thế nào?
.gitignore được commit và chia sẻ với nhóm. .git/info/exclude chỉ nằm trong bản clone cục bộ của bạn, dành cho những loại trừ cá nhân bạn không muốn push. Để loại trừ trên tất cả repo của bạn, hãy dùng ~/.gitignore_global toàn cục.

Tìm hiểu thêm

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu