.gitignore 的语法
如前所述,.gitignore 文件包含与仓库中文件名进行匹配的模式,以确定是否应忽略它们。
基础语法
.gitignore 文件的核心是由多行组成,每一行代表一个要忽略的模式。模式可以匹配:
- 特定文件
- 文件类型
- 目录
该文件也支持注释,行首以 # 开头即可;另外可以使用空行来提升可读性。
下面是基本结构概览:
- 忽略特定文件: 可直接列出文件名来忽略它。
secrets.txt
- 忽略整个目录: 在目录名末尾添加
/,即可忽略该目录中的所有内容。
logs/
- 忽略某一类文件: 可使用通配符(
*)忽略具有特定扩展名的所有文件。
*.py
- 取反:可以使用
!来对某个模式取反,显式跟踪原本会被忽略的特定文件或目录。
*.txt # 忽略所有 .txt 文件
!readme.txt # 但不忽略 readme.txt
如何创建并使用 .gitignore 文件
创建并使用 .gitignore 相当直接。本节将带您逐步完成。
创建 .gitignore 文件
步骤 1:进入仓库根目录。.gitignore 文件通常放在 Git 项目的根目录。打开终端或命令行,进入您的 Git 仓库根目录:
cd /path/to/your/repo
步骤 2:创建 .gitignore 文件。进入根目录后,使用任意文本编辑器创建 .gitignore 文件,或在终端运行如下命令:
touch .gitignore
步骤 3:向文件添加模式。在文本编辑器中打开 .gitignore,添加需要忽略的文件或目录模式。每一行代表一个模式。
下面是一个基础项目中常用的 .gitignore 示例:
# 忽略 node_modules 与依赖目录
node_modules/
vendor/
# 忽略构建产物
dist/
build/
*.log
# 忽略系统生成文件
.DS_Store
Thumbs.db
# 忽略环境与机密文件
.env
config.json
添加完必要的模式后,保存文件。此后在暂存或提交变更时,Git 将自动忽略这些文件。
步骤 4:将文件提交到仓库。务必将 .gitignore 提交到仓库,以便所有协作者使用相同的忽略规则,确保整个项目的一致性。
git add .gitignore
git commit -m "Add .gitignore file"
git push
一旦提交了 .gitignore 文件,您就为整个团队建立了共享的忽略规则。
想熟练掌握 Git 的 push 与 pull?了解如何与远程仓库同步工作,请查看这篇 Git 推送与拉取教程。
使用 .gitignore 的最佳实践
虽然创建 .gitignore 是维护干净 Git 仓库的基础操作,但为了长期有效地管理它,还应遵循若干最佳实践。
使用全局 .gitignore
对于在多个项目间工作的开发者,有些文件您可能希望在任何仓库中都排除,无论项目类型如何。
与其在每个项目的 .gitignore 中重复添加,不如配置一个全局 .gitignore,使其适用于系统中的所有仓库。
配置全局 .gitignore 文件的方法:
- 创建
.gitignore_global文件:
touch ~/.gitignore_global
- 添加希望全局忽略的模式,例如:
.DS_Store
*.log
/.vscode/
/.idea/
- 设置 Git 使用全局
.gitignore:
git config --global core.excludesfile ~/.gitignore_global
利用现成模板
无需每个新项目都从零编写 .gitignore,您可以使用针对特定语言、框架或环境的预配置模板。
其中一个最佳资源是GitHub 官方 .gitignore 仓库,您可以在其中找到覆盖数百种编程语言与框架的 .gitignore 文件。
定期审查 .gitignore
随着项目演进,可能会出现需要加入到 .gitignore 的新文件与目录。请定期审查并更新该文件,以反映项目的当前状态。
以下场景可能需要更新 .gitignore:
- 采用会生成额外文件的新工具或库(如切换到新构建系统)。
- 重构或调整目录结构,导致出现应排除的新文件。
- 移除已废弃、不再属于项目的文件或目录。
.gitignore 故障排查
即使已设置好 .gitignore,您仍可能遇到特定文件被跟踪,或某些模式未按预期生效的情况。本节将涵盖两个常见排查方向及其解决方案。
已提交文件仍被跟踪
.gitignore 不会对已提交的文件追溯生效。
如果在某些文件已提交后才将其模式加入 .gitignore,即使它们匹配该模式,Git 仍会继续跟踪它们。
要停止跟踪已提交的文件,请按以下步骤操作:
- 从 Git 跟踪中移除文件: 使用
git rm命令将其从仓库中移除,但保留在工作区。
git rm --cached <file_or_directory_name>
- 提交更改: 从 Git 跟踪中移除这些文件后,提交更改,确保它们不再属于版本控制历史的一部分。
git commit -m "Stop tracking ignored files"
- 将更改推送到远程仓库:最后,将更改推送到远程仓库,确保这些文件不再被跟踪。
git push
完成以上步骤后,Git 将停止跟踪这些文件。工作区中仍会保留该文件,但基于您的 .gitignore 模式,后续提交会忽略它。
确保模式生效
有时,您可能会发现预期应被忽略的文件仍出现在 Git 状态中,或被跟踪。
请按以下步骤确认 .gitignore 模式是否正确生效:
- 检查文件状态: 使用
git status查看哪些文件被 Git 跟踪,以验证被忽略的文件是否仍被列出。
git status
- 确认模式是否正确: 仔细检查
.gitignore模式语法是否正确。例如: - 确保使用正确的目录路径(相对于仓库根目录)。
- 为目标目录添加
/,以避免误将同名文件全部忽略。
- 刷新缓存: 如果您刚更新了
.gitignore但变更尚未生效,可能是 Git 仍在使用旧的缓存。可运行以下命令刷新缓存:
git rm -r --cached .
git add .
git commit -m "Refresh .gitignore"
- 检查例外: 有时,
.gitignore中的某个模式可能被文件中更具体的规则覆盖。请检查规则,确保不存在冲突的模式。
想要快速查阅 Git?随时掌握常用命令,请查看这份 Git 速查表。
结语
.gitignore 文件虽小,却在保持 Git 仓库整洁可控方面发挥着巨大作用。通过忽略诸如依赖、构建产物以及系统生成文件等不必要内容,您可以确保项目结构清晰、远离杂乱。
在本教程中,您学习了如何创建 .gitignore 文件、添加模式并应用最佳实践以保持仓库高效。有了这些技能,您将避免版本控制方面的麻烦,也能让团队协作更加顺畅。
如果您希望进一步提升 Git 技能,请查看 Git Fundamentals 学习路径。您还可以探索实践课程,如 Foundations of Git 和 Introduction to GitHub Concepts,以系统掌握版本控制与协作工作流!
FAQs
将 .gitignore 中的文件会移除已被 Git 跟踪的文件吗?
不会。.gitignore 只会阻止新文件被跟踪。如果文件已在版本控制中,仅把它加入 .gitignore 并不会移除。要停止跟踪已提交的文件,您需要使用:
git rm --cached filename
然后提交更改。
我可以在一个项目中拥有多个 .gitignore 文件吗?
可以!您可以在项目的不同目录中放置多个 .gitignore 文件。每个文件仅对其所在目录及其子目录生效。
如何忽略某一类文件?
您可以使用通配符。例如,要忽略所有 .log 文件:
*.log
这将排除所有以 .log 为扩展名的文件。
我能忽略某个特定文件,但仍在本地跟踪以便自己使用吗?
可以,但您必须手动确保它不会被提交。一种临时方法是使用 git update-index --assume-unchanged filename。更好的做法是使用全局 .gitignore 文件(见下一个问题)。
什么是全局 .gitignore 文件,如何设置?
全局 .gitignore 用于忽略您机器上所有仓库的文件。这对 .DS_Store 或 Thumbs.db 等系统特定文件很有用。创建并配置全局 .gitignore 的方法:
git config --global core.excludesfile ~/.gitignore_global
然后按需向 ~/.gitignore_global 添加模式。
为什么我的 .gitignore 没有生效?
如果 .gitignore 未能忽略某个文件,请检查这些常见问题:
- 文件已被跟踪——需要使用
git rm --cached filename将其移除。 .gitignore模式可能有误——请仔细检查语法。- 存在冲突规则——Git 会应用最后一个匹配规则,因此规则顺序很重要。
我能忽略某个目录,但保留其中的某个特定文件吗?
如果两位团队成员的 .gitignore 不同会怎样?
如果 .gitignore 已提交到仓库,所有团队成员都会遵循相同规则。但若有人仅在本地修改了 .gitignore 而未提交,他们的忽略项可能不同。最佳做法是将 .gitignore 纳入版本控制,并由团队达成一致。
如何检查哪些文件被忽略?
运行以下命令查看 .gitignore 忽略了哪些文件:
git status --ignored
或获取更详细的列表:
git check-ignore -v filename
我可以撤销对 .gitignore 中某个文件的忽略吗?
可以!从 .gitignore 中移除该文件,然后使用:
git add filename
再次跟踪它,随后提交更改。

在使用 Git 时,让仓库保持整洁有序不仅是最佳实践,更是顺畅协作与高效版本控制的基础。这就是
.gitignore派上用场的地方。这个便捷的文件会告诉 Git 忽略哪些文件,避免无谓的杂乱,并让您的提交聚焦于真正重要的内容。如果没有
.gitignore,您的仓库很快就会被临时文件、日志以及其他不该纳入版本控制的内容填满。更糟的是,您可能会不小心共享敏感信息。在本教程中,您将学习如何创建并使用
.gitignore文件,让项目保持整洁,避开常见陷阱,并更高效地使用 Git。让我们开始吧!什么是 .gitignore 文件?
.gitignore是 Git 中的一个配置文件,用于指示版本控制系统在暂存或提交变更时应忽略哪些文件或目录。它可以防止临时文件、系统生成文件或构建产物等不必要的文件弄乱您的仓库。保持仓库干净有助于协作,并确保只跟踪必要的文件。
.gitignore是一个简单的文本文件,通常放置在 Git 仓库的根目录中。它包含告诉 Git 忽略哪些文件或目录的模式。这些模式可以根据项目需求自定义,帮助您维护结构良好的仓库。刚接触 Git 和 GitHub?通过这篇 GitHub 与 Git 入门教程获取对版本控制的友好介绍。
以下是一些应考虑忽略的常见文件和目录类别:
dist/、build/(前后端构建输出)target/(Java 等编译型语言的构建产物)node_modules/(Node.js)vendor/(PHP,Composer).venv/、venv/(Python 虚拟环境).DS_Store(macOS)Thumbs.db(Windows).vscode/(VS Code).idea/(JetBrains 系列 IDE).project、.settings/(Eclipse)*.log、npm-debug.log*、yarn-debug.log*、yarn-error.log*(各类工具的日志)*.tmp、*.bak(临时与备份文件).mypy_cache/、__pycache__/(Python 缓存).ipynb_checkpoints/(Jupyter Notebook 检查点).env、.env.local、.env.development、.env.productionsecrets.json、config.json(敏感配置文件)*.sqlite、*.sqlite3、*.db(SQLite 数据库文件)dump.rdb(Redis 数据库转储)coverage/、*.lcov(代码覆盖率报告).tox/、.pytest_cache/(Python 测试相关文件)需要安装 Git?请按照我们的分步指南参见这篇 Git 安装教程,帮助您快速完成设置。