Git 忽略文件
在开发过程中,编译生成的文件、日志文件、IDE 配置文件、依赖包目录等都不需要提交到仓库中。
.gitignore 是一个纯文本文件,用来告诉 Git 哪些文件或目录不应该被纳入版本控制。
.gitignore 文件本身需要提交到仓库中,这样其他协作者也能共享相同的忽略规则。
创建文件
在 Git 仓库的根目录下创建 .gitignore 文件:
touch .gitignore
然后用文本编辑器打开并添加忽略规则即可。
语法规则
.gitignore 文件中每一行代表一个忽略规则。以下是常用语法:
| 语法 | 说明 | 示例 |
|---|---|---|
# |
注释 | # 忽略日志文件 |
文件名 |
忽略指定文件 | secret.txt |
目录名/ |
忽略整个目录 | node_modules/ |
*.扩展名 |
忽略所有特定扩展名的文件 | *.log |
* |
通配多个字符 | temp-* 忽略所有 temp- 开头的文件 |
? |
通配单个字符 | ?.txt 匹配 a.txt、b.txt |
[] |
匹配括号内的单个字符 | [0-9].txt 匹配 0.txt、1.txt |
! |
不忽略(例外),优先级更高 | !build/package.json |
/ 开头 |
仅匹配根目录下的路径 | /test/ 只忽略根目录下的 test |
** |
匹配任意层级目录 | **/temp 忽略所有层级下的 temp |
常用示例
# 注释:以下为常见的忽略规则
# 忽略特定文件
secret.env
config.local.js
# 忽略整个目录
node_modules/
dist/
build/
logs/
coverage/
# 忽略所有日志文件
*.log
npm-debug.log*
yarn-error.log*
# 忽略系统文件
.DS_Store
Thumbs.db
# 忽略 IDE 配置
.idea/
.vscode/
*.swp
*.swo
# 忽略 Python 相关
__pycache__/
*.py[cod]
*.so
venv/
.venv/
# 忽略 Java 相关
*.class
*.jar
target/
# 例外:不忽略某个特定文件
!build/package.json
进阶用法
全局.gitignore文件
如果有些文件(如 .DS_Store)在所有项目中都想忽略,可以配置全局忽略文件:
git config --global core.excludesfile ~/.gitignore_global
然后在 ~/.gitignore_global 中添加全局忽略规则。
本地排除(不提交到仓库)
如果有些忽略规则只适用于你自己,不想影响团队其他成员,可以使用本地排除文件:
# 编辑仓库中的本地排除文件
.git/info/exclude
在这个文件中添加的规则只对当前本地仓库生效,不会被提交。
多个.gitignore文件
可以在项目的不同子目录中放置多个 .gitignore 文件,子目录中的规则优先级更高。
常见问题
为什么 .gitignore 不生效?
.gitignore 只对未被 Git 跟踪的文件生效。如果某个文件已经被提交过(已跟踪),即使添加到 .gitignore 中,Git 仍会继续跟踪它。
如何忽略已经被跟踪的文件?
先用 git rm --cached 命令将其从 Git 的跟踪中移除:
# 移除单个文件的跟踪(保留本地文件)
git rm --cached temp.txt
# 移除所有已跟踪文件的跟踪(谨慎使用)
git rm -r --cached .
然后将该文件添加到 .gitignore 中,最后提交更改。
如何检查某个文件为什么被忽略?
# 查看具体原因
git check-ignore -v 文件路径
# 查看所有被忽略的文件
git status --ignored
如何强制添加被忽略的文件?
git add -f 文件名