.gitignore 并非 Git 忽略文件的唯一方式
摘要
解释 Git 忽略文件的三个层级:每仓库已跟踪(.gitignore)、每仓库未跟踪(.git/info/exclude)和全局机器级(~/.config/git/ignore),以及如何检查哪个文件忽略了特定文件。
暂无内容
查看缓存全文
缓存时间: 2026/06/18 14:49
# .gitignore 并非 Git 中忽略文件的唯一方式
来源:https://nelson.cloud/.gitignore-isnt-the-only-way-to-ignore-files-in-git/
我使用 Git 已经很久了,但最近才发现,你可以在三个不同的层级忽略文件,而不仅仅是通过 `.gitignore`。这三种可用于忽略文件的文件分别是:
- `.gitignore`
- `.git/info/exclude`
- `~/.config/git/ignore`
`.gitignore` 是你编写希望忽略的文件的常规文件,它会随其余代码一同提交到 Git 中。你添加到该文件中的任何文件在执行 `git` 命令时都不会被纳入考虑。
## .git/info/exclude(https://nelson.cloud/.gitignore-isnt-the-only-way-to-ignore-files-in-git/#gitinfoexclude)
`exclude` 文件位于每一个 Git 仓库的 `.git` 目录中,但对其所做的更改不会提交到 Git。在新建的 Git 仓库中,它通常包含几行注释。此文件适用于在单个仓库基础上忽略某些内容。例如,某个仓库中可能存有一个个人 `notes.txt` 文件,你既不想将其提交到 Git,又不想将其添加到 `.gitignore` 中,因为它是你工作流程独有的内容。在这种情况下,你可以将 `notes.txt` 添加到 `.git/info/exclude` 中。
## ~/.config/git/ignore(https://nelson.cloud/.gitignore-isnt-the-only-way-to-ignore-files-in-git/#configgitignore)
`ignore` 文件位于你计算机的家目录 `~/.config/git/ignore` 下。添加到此文件中的文件名会在整个机器级别被全局忽略。此文件不会被提交到 Git,也不与任何特定仓库关联。它是添加那些你想在计算机上所有 Git 仓库中忽略的文件的理想位置。例如,如果你使用 macOS,将 `.DS_Store` 添加到这里会非常合适。
你可以将全局忽略文件自定义为其他文件。例如,如果你希望全局 Git 忽略文件为 `.gitignore_global`,请运行以下命令:
Shell
```
git config --global core.excludesFile ~/.gitignore_global
```
如果你想恢复默认设置,运行:
Shell
```
git config --global --unset core.excludesFile
```
## 检查哪个文件忽略了特定文件(https://nelson.cloud/.gitignore-isnt-the-only-way-to-ignore-files-in-git/#checking-which-file-is-ignoring-a-specific-file)
在向上述任何文件添加文件名时,你可以使用以下命令来检查某个文件名是如何被忽略的。例如,如果你想检查 `.DS_Store` 是如何被忽略的,在任何 Git 仓库中运行 `git check-ignore -v .DS_Store`。
以下是当仓库的 `.gitignore` 忽略了 `.DS_Store` 时的输出:
Console
```
$ git check-ignore -v .DS_Store
.gitignore:1:.DS_Store .DS_Store
```
以下是当仓库的 `.git/info/exclude` 忽略了 `.DS_Store` 时的输出:
Console
```
$ git check-ignore -v .DS_Store
.git/info/exclude:7:.DS_Store .DS_Store
```
以下是当全局的 `~/.config/git/ignore` 文件忽略了 `.DS_Store` 时的输出:
Console
```
$ git check-ignore -v .DS_Store
/Users/nelson/.config/git/ignore:2:.DS_Store .DS_Store
```
以下是当自定义全局忽略文件 `.gitignore_global` 忽略了 `.DS_Store` 时的输出:
Console
```
$ git check-ignore -v .DS_Store
/Users/nelson/.gitignore_global:1:.DS_Store .DS_Store
```
如果没有文件忽略某个文件,则 `git check-ignore -v` 命令不会产生任何输出。
相似文章
使用 Git 的 rerere 功能摆脱重复冲突的困境
解释了 Git 的 rerere 功能如何自动解决重复出现的合并冲突,从而在频繁变基或合并时节省时间。
Git 由什么构成?(2022)
深入教程,解释 Git 的内部结构,包括对象、哈希以及 Git 如何存储数据,并提供 Go 和 shell 命令示例。
Git并不好
本文对Git进行了批评,认为它并不像人们通常认为的那样好,并链接到Lobste.rs上的讨论。
@github: Git 2.55 带来了新的增量重新打包策略、更灵活的历史编辑方式,以及更多功能。查看…
Git 2.55 已发布,引入了使用多包索引的增量重新打包策略、更灵活的历史编辑方式,以及来自超过100位贡献者的贡献。
本地 Git 远程仓库
关于如何使用裸仓库为个人项目设置本地 Git 远程仓库的教程,支持离线友好的推/拉工作流。