1)在DESCRIPTION
:
- 从命令行读取的模式支持那些支持它们的命令。
2)在PATTERN FORMAT
中(强调是我的):
如果模式不包含斜杠/,Git会将其视为shell glob模式并检查相对于路径名的匹配 .gitignore文件的位置(相对于。的顶层) 工作树,如果不是来自.gitignore文件)。
两个引号(上面用粗体字符表示的第二个)似乎是指SO中this answer中提到的 git ignore 命令(不是文件)。我在这里看到的问题是Pro Git book中甚至没有提到这个命令。因此,我对上述引言的解释可能是错误的。
我还有关于.gitignore
文件的另一个问题,这与SO中的this comment有关,我将在下面重复:
You can put .gitignore anywhere in a git project - if a path starts with /, it will be relative to the location of the .gitignore file; otherwise it will refer recursively to files in the current directory and its descendant directories.
我无法看到如何从link given above中推断出这一点。
答案 0 :(得分:0)
在给予它更多的思考之后,我开始意识到我在这里开始感到困惑。您刚刚引用(部分)git评估忽略模式的顺序。在此订单的最顶部是patterns from the command line
。这些都是内置和自定义(如在引用的答案中)处理git忽略模式的命令。
第二个引用最好用gitignore manpage底部的例子来解释。我在谈论:
$ git status
[...]
#未跟踪文件:
[...]
#Documentation / foo.html
#Documentation / gitignore.html
#file.o
#lib.a
#src / internal.o
[...]
$ cat .git / info / exclude
#忽略树中任何地方的对象和档案 * [OA]
$ cat Documentation / .gitignore
#ignore生成的html文件,
*。html的
#除了用手维护的foo.html外 !foo.html
$ git status
[...]
#未跟踪文件:
[...]
#Documentation / foo.html
[...]
将gitignore文件放在项目的任何位置也是完全有效的,请再次参考official documentation on gitignore:
Git通常会检查多个来源,具有以下优先顺序,从最高到最低:
- 命令行
- 相同目录中的.gitignore文件作为路径或任何父目录,更高级别文件中的模式(最多工作树的顶层)被低级文件覆盖直到包含该文件的目录。这些模式相对于.gitignore文件的位置匹配。项目通常在其存储库中包含此类.gitignore文件,其中包含作为项目构建的一部分生成的文件的模式。
关于主要斜杠的部分将在以下段落中描述:
前导斜杠与路径名的开头匹配。例如," / *。c"匹配" cat-file.c"但不是" mozilla-sha1 / sha1.c"。
换句话说,模式通常被评估为glob后跟模式,并将匹配任何子目录中相对于.gitignore
文件位置的任何路径。但是,如果模式以斜杠开头,则表示模式与相对路径名的开头完全匹配。