.gitignore Isn't the Only Way to Ignore Files in Git
摘要
文章说明 Git 忽略文件不只有 .gitignore 一种方式,还包括仓库内的 .git/info/exclude(仅当前仓库生效但不提交)以及用户级全局忽略文件 ~/.config/git/ignore(对所有仓库生效)。三者分别对应“随仓库共享”“本地仓库私有”“机器级全局”三个作用范围。文中还提到可以自定义全局 ignore 文件路径,并给出 git check-ignore -v 命令,用来查看某个文件究竟是被哪一层忽略规则匹配到的;如果没有任何规则匹配则不会输出结果。
荐读理由
在 Git 中可以分别通过仓库级 .gitignore、局部 .git/info/exclude 以及用户级全局 ignore 文件来分层控制忽略规则,并用 git check-ignore -v 追踪某个文件具体由哪一层规则生效,从而在多项目并行时更精确地隔离个人文件与仓库规则。
原文
.gitignore Isn’t the Only Way To Ignore Files in Git
I’ve been using Git for so long and I just realized you can ignore files at three different levels and not just with .gitignore. The three files you can use to ignore files are:
.gitignore.git/info/exclude~/.config/git/ignore
.gitignore
.gitignore is the usual file where you write files you want to ignore. It’s checked into Git along with the rest of the code. Whatever files you add to it will not get taken into account when running git commands.
.git/info/exclude
The exclude file lives in the .git directory of every Git repository but changes to it are not checked into Git. It usually has a few comment lines on a fresh Git repository. This file is useful for ignoring things on a per-repo basis. For example, you may have a personal notes.txt file in a repository that you don’t want to check into git but you also don’t want to add to .gitignore because it’s unique to your workflow. In that case you would add notes.txt to .git/info/exclude.
~/.config/git/ignore
The ignore file lives in your machine’s home directory in ~/.config/git/ignore. Whatever filenames are added to this file are ignored globally at a machine-level. This file is not checked into Git and isn’t associated with any particular repository. It’s a great place to add files that you want to ignore in every git repository on your computer. For example, if you’re on macOS, adding .DS_Store here would be ideal.
You can customize the global ignore file to be a different file. For example, if you want your global git ignore file to be .gitignore_global you would run the command:
Shell
git config --global core.excludesFile ~/.gitignore_global
And if you ever want to return to the default setting, run:
Shell
git config --global --unset core.excludesFile
Checking Which File Is Ignoring a Specific File
When adding filenames to any of these, you can use this command to check how a filename is being ignored. For example, if you want to check how .DS_Store is being ignored, run git check-ignore -v .DS_Store in any Git repository.
Here is the output when the repository’s .gitignore is ignoring .DS_Store:
Console
$ git check-ignore -v .DS_Store
.gitignore:1:.DS_Store .DS_Store
Here is the output when the repository’s .git/info/exclude is ignoring .DS_Store:
Console
$ git check-ignore -v .DS_Store
.git/info/exclude:7:.DS_Store .DS_Store
Here is the output when the global ~/.config/git/ignore file is ignoring .DS_Store:
Console
$ git check-ignore -v .DS_Store
/Users/nelson/.config/git/ignore:2:.DS_Store .DS_Store
And here is the output when a custom global ignore file .gitignore_global is ignoring .DS_Store:
Console
$ git check-ignore -v .DS_Store
/Users/nelson/.gitignore_global:1:.DS_Store .DS_Store
If there is nothing ignoring a file, the git check-ignore -v command produces no output.
这条对你有帮助吗?