全局 Git 忽略文件(使用绝对路径)

5
我有一个项目,想要忽略一个名为.eslintrc.js的根文件。团队希望只在构建工具中进行代码检查而非在他们的IDE中。我想将其添加到我的机器根目录,并忽略它,而不使用该项目的.gitignore文件。

我也不想将/.eslintrc.js添加到我的~/.gitignore_global文件中,因为我还有其他项目,在这些项目中我不希望忽略代码检查规则。

我已尝试添加

~/code/repo-name/.eslintrc.js

在我的~/.gitignore_global文件中添加规则,但是git无法识别该规则。
如何创建一个全局的git忽略规则,在某些项目中起作用而在其他项目中不起作用?
我可以设置git在忽略某些内容时使用完整路径吗?

我刚刚发现了一个特定于 ES Lint 的解决方案,因此我不需要在这个方面得到答案,但如果有一个 git 的解决方案就太好了,因为同样的问题很容易出现在 webpackbrowserslist 或其他任何特定的地方。 - Arron
2个回答

8
首先,值得一提的是关于忽略文件模式的 tricky bit:如果它们包含前导或嵌入斜杠,则它们适用于多个名称组件,但如果它们没有,则只适用于一个名称组件(在 Git 当时递归遍历的任何目录中)。 如果存在尾随斜杠,则应用此规则后删除它,以便 .gitignore 文件包含以下内容:
abc
def/ghi

忽略掉从该点“向下”出现的所有名为abc的文件(和目录),同时仅忽略出现在此处的def/ghi。第二行与/def/ghi完全等效。

我可以设置 git 使用完整路径来忽略某些内容吗?

不行。Gitignore 模式要么是相对于 ignore 文件所在的目录(对于大多数.gitignore文件),要么是项目根目录(对于.git/info/exclude和您的个人 ignore 文件)。也就是说,假设项目位于/home/arron/project/proj1,那么:

$ cd ~/project/proj1/
$ cat .gitignore
/abc
sub/file
$ cat sub/.gitignore
/dir/

所有这些条目都包含或以 / 开头,因此顶级 .gitignore 可以避免关于项目顶层未跟踪文件 abc 的投诉,以及对目录 sub 中未跟踪文件 file 的投诉。同时,目录 sub 有它自己的 .gitignore,不仅可以避免关于该目录中的内容的投诉,还可以停止 Git 枚举目录 sub 中的 内容,即 Git 完全不会查看 project/proj1/sub/dir/ 中的任何内容(因此也不会发现或抱怨该目录中的任何未跟踪文件 within)。请注意,如果我们修改两个 .gitignore 文件,使其变为:

$ cat .gitignore
/abc
$ cat sub/.gitignore
/file
/dir/

忽略文件的集合完全保持不变。

我已经寻找了近一个星期关于git ignore的工作原理的解释,谢谢你提供这个。 - Chamlal

3

对于那些无法放置在项目.gitignore中的单独的本地文件,您可以像常规的.gitignore一样将它们添加到 .git/info/excludes 中:

# Ignore local ESLint config
.eslintrc.js

这对于文件夹也适用,但是它们有另一种替代方法:在该文件夹中添加另一个 .gitignore 文件,只需包含一行,其中包含 *

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接