.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在任何规模下(27分钟阅读)
本文解释了在大规模下托管Git仓库的困难,重点关注Git的packfile设计和分布式特性,并概述了潜在的解决方案。
@nisten: Git 既是客户端也是服务器,使用 Git 不需要 GitHub、GitLab、Origin 等。git init --bare /home/somefuckingf…
这篇文章解释了通过设置裸仓库并通过 SSH 克隆,可以在没有 GitHub 或 GitLab 等平台的情况下使用 Git,并鼓励用户学习基本的 Linux 技能。
为什么人们不善用Git?
一篇文章探讨为何许多开发者难以正确使用Git,涵盖常见错误如对合并冲突恐慌、提交过大以及分支管理不善,并分析根本原因。
Git 由什么构成?(2022)
深入教程,解释 Git 的内部结构,包括对象、哈希以及 Git 如何存储数据,并提供 Go 和 shell 命令示例。