Courses
Khi làm việc với Git, giữ cho kho lưu trữ sạch sẽ và có tổ chức không chỉ là thực tiễn tốt nhất—mà còn thiết yếu để cộng tác trơn tru và kiểm soát phiên bản hiệu quả. Đó là lúc .gitignore phát huy tác dụng. Tệp tiện lợi này cho Git biết những tệp nào cần bỏ qua, giúp tránh rác không cần thiết và giữ các commit tập trung vào những gì thực sự quan trọng.
Không có .gitignore, kho của bạn có thể nhanh chóng đầy lên bởi các tệp tạm, log và những thứ khác không thuộc về kiểm soát phiên bản. Tệ hơn, bạn có thể vô tình chia sẻ thông tin nhạy cảm.
Trong hướng dẫn này, bạn sẽ học cách tạo và sử dụng tệp .gitignore để giữ dự án gọn gàng, tránh các lỗi thường gặp và làm việc hiệu quả hơn với Git. Cùng bắt đầu nhé!
.gitignore là gì?
Tệp .gitignore là một tệp cấu hình trong Git, dùng để hướng dẫn hệ thống kiểm soát phiên bản về những tệp hoặc thư mục nào cần bỏ qua khi dàn xếp (stage) hoặc commit thay đổi.
Nó ngăn các tệp không cần thiết—như tệp tạm, do hệ thống tạo ra hoặc liên quan đến build—làm rác kho lưu trữ của bạn. Giữ kho lưu trữ sạch giúp việc cộng tác dễ dàng hơn và bảo đảm chỉ những tệp cần thiết mới được theo dõi.
Tệp .gitignore là tệp văn bản đơn giản đặt ở thư mục gốc của kho Git. Nó chứa các mẫu (pattern) cho Git biết những tệp hoặc thư mục nào cần bỏ qua. Các mẫu này có thể tùy chỉnh theo nhu cầu dự án, giúp bạn duy trì một kho lưu trữ ngăn nắp.
Mới làm quen với Git và GitHub? Hãy xem phần giới thiệu thân thiện cho người mới về kiểm soát phiên bản với hướng dẫn GitHub và Git này.
Dưới đây là một số nhóm tệp và thư mục phổ biến bạn nên cân nhắc bỏ qua:
- Tạo phẩm build: Các tệp được tạo trong quá trình build và có thể tái tạo từ mã nguồn, ví dụ:
dist/,build/(Đầu ra build frontend và backend)target/(Build cho Java và các ngôn ngữ biên dịch khác)- Phụ thuộc: Hệ thống quản lý gói tạo thư mục cho thư viện đã cài đặt, không nên theo dõi:
node_modules/(Node.js)vendor/(PHP, Composer).venv/,venv/(Môi trường ảo Python)- Tệp đặc thù hệ thống: Các tệp này được hệ điều hành tự động tạo và không đóng góp cho dự án:
.DS_Store(macOS)Thumbs.db(Windows)- Tệp cấu hình IDE: Mỗi lập trình viên có thể dùng môi trường phát triển khác nhau, nên thiết lập cá nhân của họ không nên đưa vào kiểm soát phiên bản:
.vscode/(VS Code).idea/(JetBrains IDEs).project,.settings/(Eclipse)- Log và tệp tạm: Log, bộ nhớ đệm và tệp tạm nên bị bỏ qua để tránh rác không cần thiết:
*.log,npm-debug.log*,yarn-debug.log*,yarn-error.log*(Log từ nhiều công cụ)*.tmp,*.bak(Tệp tạm và sao lưu).mypy_cache/,__pycache__/(Bộ đệm Python).ipynb_checkpoints/(Điểm kiểm Notebook Jupyter)- Tệp môi trường và bí mật: Thông tin xác thực nhạy cảm và cấu hình theo môi trường không bao giờ nên được commit:
.env,.env.local,.env.development,.env.productionsecrets.json,config.json(Tệp cấu hình nhạy cảm)- Tệp cơ sở dữ liệu và lưu trữ: Những tệp này được tạo cục bộ và không nên đưa vào kiểm soát phiên bản:
*.sqlite,*.sqlite3,*.db(Tệp cơ sở dữ liệu SQLite)dump.rdb(Bản dump cơ sở dữ liệu Redis)- Tệp CI/CD và coverage: Báo cáo độ bao phủ kiểm thử và các tạo phẩm CI/CD khác nên bị bỏ qua:
coverage/,*.lcov(Báo cáo độ bao phủ mã).tox/,.pytest_cache/(Tệp kiểm thử Python)
Cần cài đặt Git? Làm theo hướng dẫn từng bước của chúng tôi trong hướng dẫn cài đặt Git này để thiết lập nhanh chóng.
Cú pháp của .gitignore
Như đã đề cập, tệp .gitignore chứa các mẫu được đối chiếu với tên tệp trong kho của bạn để xác định có nên bỏ qua hay không.
Cú pháp cơ bản
Về cốt lõi, tệp .gitignore gồm các dòng, mỗi dòng biểu thị một mẫu cần bỏ qua. Các mẫu có thể khớp với:
- Tệp cụ thể
- Loại tệp
- Thư mục
Tệp cũng hỗ trợ chú thích, có thể thêm bằng cách bắt đầu dòng với #, và các dòng trống để cải thiện khả năng đọc.
Dưới đây là tổng quan về cấu trúc cơ bản:
- Bỏ qua một tệp cụ thể: Bạn có thể liệt kê trực tiếp tên tệp để bỏ qua nó.
secrets.txt
- Bỏ qua toàn bộ thư mục: Bằng cách thêm
/ở cuối tên thư mục, bạn có thể bỏ qua mọi thứ bên trong thư mục đó.
logs/
- Bỏ qua tất cả tệp của một loại cụ thể: Có thể dùng ký tự đại diện (
*) để bỏ qua tất cả tệp có phần mở rộng nhất định.
*.py
- Phủ định: Bạn có thể dùng
!để phủ định một mẫu và theo dõi rõ ràng một số tệp hoặc thư mục lẽ ra sẽ bị bỏ qua.
*.txt # Bỏ qua tất cả tệp .txt
!readme.txt # Ngoại trừ readme.txt
Cách tạo và sử dụng tệp .gitignore
Tạo và sử dụng .gitignore khá đơn giản. Trong phần này, tôi sẽ hướng dẫn các bước.
Tạo tệp .gitignore
Bước 1: Điều hướng đến thư mục gốc của kho. Tệp .gitignore thường được đặt ở thư mục gốc của một dự án Git. Mở terminal hoặc dòng lệnh và điều hướng đến thư mục gốc của kho Git của bạn:
cd /path/to/your/repo
Bước 2: Tạo tệp .gitignore. Khi đã ở thư mục gốc, tạo tệp .gitignore bằng bất kỳ trình soạn thảo văn bản nào hoặc bằng cách chạy lệnh trong terminal, như:
touch .gitignore
Bước 3: Thêm các mẫu vào tệp. Mở tệp .gitignore trong trình soạn thảo văn bản và thêm các mẫu cần thiết để bỏ qua tệp hoặc thư mục. Mỗi dòng biểu thị một mẫu khác nhau.
Dưới đây là ví dụ tệp .gitignore thường dùng trong một dự án cơ bản:
# Bỏ qua node_modules và thư mục phụ thuộc
node_modules/
vendor/
# Bỏ qua tạo phẩm build
dist/
build/
*.log
# Bỏ qua tệp do hệ thống tạo ra
.DS_Store
Thumbs.db
# Bỏ qua tệp môi trường và bí mật
.env
config.json
Sau khi bạn đã thêm các mẫu cần thiết, hãy lưu tệp. Git sẽ tự động bỏ qua các tệp này khi dàn xếp hoặc commit thay đổi.
Bước 4: Commit tệp vào kho. Việc commit tệp .gitignore vào kho rất quan trọng để tất cả cộng tác viên dùng cùng một bộ quy tắc bỏ qua. Điều này đảm bảo tính nhất quán trên toàn dự án cho mọi người tham gia.
git add .gitignore
git commit -m "Add .gitignore file"
git push
Khi tệp .gitignore đã được commit, bạn thiết lập các quy tắc bỏ qua dùng chung cho cả nhóm.
Muốn thành thạo thao tác push và pull trong Git? Học cách đồng bộ công việc với kho lưu trữ từ xa trong hướng dẫn push và pull Git này.
Thực tiễn tốt nhất khi dùng .gitignore
Mặc dù tạo tệp .gitignore là phần thẳng thắn của việc duy trì kho Git sạch sẽ, có một số thực tiễn tốt nhất cần tuân theo để đảm bảo tệp được quản lý hiệu quả theo thời gian.
Sử dụng .gitignore toàn cục (global)
Đối với các nhà phát triển làm việc trên nhiều dự án, có một số tệp bạn có thể muốn loại trừ khỏi mọi kho, bất kể loại dự án.
Thay vì thêm chúng vào tệp .gitignore của từng dự án, bạn có thể cấu hình một .gitignore toàn cục áp dụng cho tất cả kho trên hệ thống của bạn.
Để cấu hình tệp .gitignore toàn cục:
- Tạo tệp
.gitignore_global:
touch ~/.gitignore_global
- Thêm các mẫu cho tệp bạn muốn bỏ qua toàn cục, chẳng hạn:
.DS_Store
*.log
/.vscode/
/.idea/
- Thiết lập Git sử dụng
.gitignoretoàn cục:
git config --global core.excludesfile ~/.gitignore_global
Tận dụng mẫu sẵn có
Thay vì xây dựng tệp .gitignore từ đầu cho mỗi dự án mới, bạn có thể tận dụng các mẫu .gitignore được cấu hình sẵn cho ngôn ngữ, framework hoặc môi trường cụ thể.
Một trong những nguồn tốt nhất cho các mẫu này là kho .gitignore chính thức của GitHub, nơi bạn có thể tìm các tệp .gitignore được điều chỉnh cho hàng trăm ngôn ngữ và framework lập trình.
Rà soát .gitignore thường xuyên
Khi dự án phát triển, có thể xuất hiện các tệp và thư mục mới cần đưa vào tệp .gitignore. Việc định kỳ rà soát và cập nhật tệp để phản ánh trạng thái hiện tại của dự án là quan trọng.
Một số tình huống bạn có thể cần cập nhật tệp .gitignore gồm:
- Áp dụng công cụ hoặc thư viện mới tạo thêm tệp (ví dụ, chuyển sang hệ thống build mới).
- Tái cấu trúc hoặc tổ chức lại thư mục, có thể dẫn đến các tệp mới cần loại trừ.
- Loại bỏ các tệp hoặc thư mục lỗi thời không còn là một phần của dự án.
Khắc phục sự cố với .gitignore
Ngay cả sau khi thiết lập tệp .gitignore, bạn có thể gặp tình huống một số tệp vẫn được theo dõi, hoặc các mẫu có vẻ không hoạt động như mong đợi. Phần này sẽ đề cập hai khu vực khắc phục sự cố phổ biến và cách xử lý.
Theo dõi các tệp đã được commit
Tệp .gitignore không áp dụng hồi cứu cho các tệp đã được commit.
Nếu bạn thêm một mẫu vào .gitignore sau khi một số tệp đã được commit, Git sẽ tiếp tục theo dõi chúng dù chúng khớp với mẫu trong tệp .gitignore.
Để dừng theo dõi các tệp đã được commit, làm theo các bước sau:
- Xóa tệp khỏi theo dõi của Git: Dùng lệnh
git rmđể xóa chúng khỏi kho trong khi vẫn giữ trong thư mục làm việc.
git rm --cached <file_or_directory_name>
- Commit thay đổi: Sau khi xóa tệp khỏi theo dõi của Git, hãy commit thay đổi để đảm bảo các tệp đó không còn là một phần của lịch sử kiểm soát phiên bản.
git commit -m "Stop tracking ignored files"
- Push thay đổi lên kho từ xa: Cuối cùng, push các thay đổi lên kho từ xa để đảm bảo các tệp không còn được theo dõi.
git push
Sau khi thực hiện các bước này, Git sẽ dừng theo dõi các tệp đó. Tệp đã commit vẫn ở trong thư mục làm việc của bạn nhưng sẽ bị bỏ qua trong các commit sau dựa trên mẫu .gitignore.
Đảm bảo các mẫu hoạt động
Đôi khi, bạn có thể nhận thấy một số tệp mà bạn mong đợi bị bỏ qua vẫn xuất hiện trong trạng thái của Git hoặc vẫn được theo dõi.
Hãy làm theo các bước sau để đảm bảo các mẫu trong .gitignore hoạt động đúng:
- Kiểm tra trạng thái tệp của bạn: Dùng lệnh
git statusđể xem những tệp nào đang được Git theo dõi. Điều này giúp bạn xác minh liệu các tệp cần bỏ qua có còn được liệt kê hay không.
git status
- Đảm bảo mẫu chính xác: Kiểm tra kỹ cú pháp các mẫu trong
.gitignoređể đảm bảo định dạng đúng. Chẳng hạn: - Đảm bảo bạn dùng đúng đường dẫn thư mục (tương đối so với thư mục gốc kho).
- Thêm
/để nhắm đến các thư mục cụ thể nhằm tránh theo dõi mọi tệp có tên tương tự.
- Làm mới bộ nhớ đệm: Nếu bạn vừa cập nhật tệp
.gitignoremà thay đổi chưa được áp dụng, có thể Git vẫn giữ bộ nhớ đệm trước đó. Để làm mới bộ nhớ đệm, chạy lệnh sau:
git rm -r --cached .
git add .
git commit -m "Refresh .gitignore"
- Kiểm tra ngoại lệ: Đôi khi, một mẫu cụ thể trong
.gitignorecó thể bị ghi đè bởi mẫu cụ thể hơn ở nơi khác trong tệp. Xem lại quy tắc để đảm bảo không có mẫu xung đột.
Tìm tài liệu tham khảo Git nhanh? Giữ các lệnh thiết yếu trong tầm tay với bảng gian lận Git này.
Kết luận
Tệp .gitignore có thể nhỏ, nhưng đóng vai trò lớn trong việc giữ kho Git của bạn sạch và dễ quản lý. Bằng cách bỏ qua các tệp không cần thiết—như phụ thuộc, tạo phẩm build và tệp do hệ thống tạo—bạn đảm bảo dự án được tổ chức tốt và không bị lộn xộn.
Trong hướng dẫn này, bạn đã học cách tạo tệp .gitignore, thêm mẫu và áp dụng thực tiễn tốt nhất để giữ kho hiệu quả. Với những kỹ năng này, bạn sẽ tránh được rắc rối về kiểm soát phiên bản và giúp việc cộng tác trở nên trôi chảy hơn cho cả nhóm.
Nếu bạn muốn đào sâu kỹ năng Git, hãy xem Git Fundamentals để có lộ trình học tập có cấu trúc. Bạn cũng có thể khám phá các khóa học thực hành như Foundations of Git và Introduction to GitHub Concepts để xây dựng nền tảng vững chắc về kiểm soát phiên bản và quy trình cộng tác!
FAQs
Tệp .gitignore có xóa các tệp đã được Git theo dõi không?
Không, .gitignore chỉ ngăn các tệp mới được theo dõi. Nếu một tệp đã nằm trong kiểm soát phiên bản, thêm nó vào .gitignore sẽ không xóa nó. Để dừng theo dõi một tệp đã được commit, bạn cần dùng:
git rm --cached filename
Sau đó, hãy commit thay đổi.
Tôi có thể có nhiều tệp .gitignore trong một dự án không?
Có! Bạn có thể đặt các tệp .gitignore ở các thư mục khác nhau trong dự án. Mỗi tệp chỉ áp dụng cho các tệp trong thư mục của nó và các thư mục con.
Làm thế nào để bỏ qua tất cả tệp của một loại nhất định?
Bạn có thể dùng ký tự đại diện. Ví dụ, để bỏ qua tất cả tệp .log:
*.log
Điều này sẽ loại trừ tất cả các tệp có phần mở rộng .log.
Tôi có thể bỏ qua một tệp cụ thể nhưng vẫn theo dõi nó cho công việc của riêng mình không?
Có, nhưng bạn phải tự đảm bảo nó không bị commit. Một cách là dùng git update-index --assume-unchanged filename, đây là giải pháp tạm thời. Cách tốt hơn là dùng tệp .gitignore toàn cục (xem câu hỏi tiếp theo).
Tệp .gitignore toàn cục là gì và tôi thiết lập nó như thế nào?
Tệp .gitignore toàn cục dùng để bỏ qua tệp trên tất cả các kho trong máy của bạn. Điều này hữu ích cho các tệp đặc thù hệ thống như .DS_Store hoặc Thumbs.db. Để tạo và cấu hình .gitignore toàn cục:
git config --global core.excludesfile ~/.gitignore_global
Sau đó, thêm các mẫu vào ~/.gitignore_global theo nhu cầu.
Tại sao tệp .gitignore của tôi không hoạt động?
Nếu .gitignore không bỏ qua một tệp, hãy kiểm tra các vấn đề phổ biến sau:
- Tệp đã được theo dõi—bạn cần xóa nó bằng
git rm --cached filename. - Mẫu trong
.gitignorecó thể sai—hãy kiểm tra kỹ cú pháp. - Có quy tắc xung đột—Git áp dụng quy tắc khớp sau cùng, nên thứ tự rất quan trọng.
Tôi có thể bỏ qua một thư mục nhưng giữ một tệp cụ thể bên trong không?
Có! Hãy dùng quy tắc loại trừ. Ví dụ, để bỏ qua mọi thứ trong một thư mục ngoại trừ keepme.txt:
folder_name/*
!folder_name/keepme.txtĐiều gì xảy ra nếu hai thành viên nhóm có các tệp .gitignore khác nhau?
Nếu .gitignore được commit vào kho, tất cả thành viên sẽ tuân theo cùng quy tắc. Tuy nhiên, nếu một người sửa .gitignore cục bộ mà không commit thay đổi, họ có thể có danh sách tệp bị bỏ qua khác. Tốt nhất là giữ .gitignore được quản lý phiên bản và được cả nhóm thống nhất.
Làm sao kiểm tra những tệp nào đang bị bỏ qua?
Chạy lệnh sau để xem .gitignore đang loại trừ những gì:
git status --ignored
Hoặc để có danh sách chi tiết hơn:
git check-ignore -v filename
Tôi có thể hoàn tác việc bỏ qua một tệp trong .gitignore không?
Có! Hãy xóa tệp khỏi .gitignore rồi theo dõi lại bằng:
git add filename
Sau đó, commit thay đổi.
