关于这个主题有很多问题,但没有一个问题涉及~/.gitignore
。
我有一个奇怪的项目,它有一个顶级的项目目录--称为垃圾的project/
-full,但是至少有一个重要的子目录--比如project/feedme/
。我想把所有的东西都用.gitignore
project/
,但是un.gitignore
project/feedme/
和它的内容。对于否定的模式,这是很容易的:
project$ cat .gitignore
/*
!/feedme/
我有一个文件project/feedme/.exrc
,我想忽略它。作为vi
用户,我经常使用.exrc
文件进行本地编辑器设置,因此在~/.gitconfig
中有一个条目(由core.excludesFile
Git设置指定):
project$ cat ~/.gitignore
.exrc
不幸的是,git
似乎不想再忽视.exrc
project$ git status -s
?? feedme/
project$ git add feedme/
project$ git status -s
A feedme/.exrc
为什么Git不忽略project/feedme/.exrc
编辑:按照prosoitos' answer的说法,这个部分是错误的。看我的编辑在这个问题的结尾,因为它还没有完全回答。
为什么我觉得这个应该有效?手册页gitignore(5)这样说:
gitignore文件中的每一行指定一个模式。在决定是否忽略路径时,Git通常会检查来自多个源的gitignore模式,其优先级顺序如下:从最高到最低(在一个优先级级别内,最后一个匹配模式决定结果):
从与路径相同的目录或任何父目录中的
文件。…
从配置变量core.excludesFile.指定的文件中读取的
由于~/.gitignore
的模式是最后读取的,所以我认为.exrc
最终会被忽略,而不管本地的.gitgnore
是什么。
一个可能的解释是,这(同样来自gitignore(5)手册页,强调我)
如果排除了该文件的父目录,则不可能重新包含该文件。
也适用于其双重形式(不适用于手册页)
如果重新包含该文件的父目录,则不可能排除该文件。
但是,如果是这样的话,我认为这是一个错误;至少应该在文档中明确说明。
P.S.:我的~/.gitignore
在正常情况下工作,所以问题不在那里。
编辑
Prosoitos是正确的,全局~/.gitignore
首先读取,因此在全局忽略.exrc
s之后重新包含.exrc
子目录。然而,我仍然面临着另一个奇怪的问题。
正如我现在所理解的那样,将.exrc
放在~/.gitignore
的最后一行(如果project/.git/info/excludes
为空)等同于将.exrc
放在project/.gitignore
的第一行。然而,如果我这样做,project/feedme/.exrc
这一次就被忽略了!
project$ cat ~/.gitignore
project$ cat .gitignore
.exrc
/*
!/feedme/
project$ git ls-files --other --ignored --exclude-standard
.gitignore
feedme/.exrc
这里发生了什么事?
发布于 2020-10-13 06:28:11
,因为~/..gitignore的模式是最后读取的.
不是的。这就是你弄错的地方。您引用的Git手册中的一节:
Git通常检查来自多个源的gitignore模式,其优先级顺序如下:从最高到最低的.
这意味着全局.gitignore
会被本地覆盖,而不是反过来。
因此,!/feedme/
在您的本地.gitignore
超过.exrc
在您的全球之一。因此,不排除feedme/.exrc
。
一个简单的解决方案是将.exrc
添加到本地.gitignore
文件中,并确保它低于!/feedme/
行,因为:
(在优先级的一个级别内,最后一个匹配模式决定结果)
注意:
不可否认,“优先顺序”一词可能令人困惑。
在这里,“更高的优先级”意味着它比“更重要”(因此它覆盖)。
您似乎从操作符优先的意义上理解了它,其中“更高的优先级”意味着“在此之前执行”,这将导致相反的结果。因此产生了混乱。
编辑完问题后进行编辑:
既然你已经改正了你的处境,我认为你是对的。
我复制了你的情况,然后跑:
git check-ignore -v feedme/.exrc
我得到了:
.gitignore:1:.exrc feedme/.exrc
显示.exrc
的排除没有被!/feedme/
所否定。
我试图谷歌这个,我也找不到任何文件。
https://stackoverflow.com/questions/64326256
复制相似问题