这里是我当前目录的内容。
$ ls
foo.foo
$ ls -a
. .. .bar.foo .foo foo.foo .gitignore
然后我将这个目录转换为一个Git仓库。
$ git init
Initialized empty Git repository in /home/lone/foo/.git/
$ ls -a
. .. .bar.foo .foo foo.foo .git .gitignore
这里是.gitignore
文件的内容。
$ cat .gitignore
*.foo
我注意到在.gitignore
中的模式与在shell中的相同模式有不同的行为。在shell中,*.foo
仅匹配非隐藏文件,即不以句点开头的文件名。
$ echo *.foo
foo.foo
但是在.gitignore
中的*.foo
似乎会匹配以.foo
结尾的任何文件,无论是隐藏的还是非隐藏的。
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
我在哪里可以了解更多关于.gitignore所遵循的模式的精确定义,以便我可以理解为什么它的行为与Shell glob模式不同?
fnmatch(3)
来处理 glob 模式?如果是这样,为什么*
不匹配.
前的零个字符(即隐藏文件),但 gitignore 却可以呢?我无法在gitignore
文档中找到精确的部分来解释这一点。 - Lone Learner