这是我当前目录的内容。

$ 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 仅匹配非 stash 文件,即不以句点开头的文件名。
$ echo *.foo
foo.foo

但是 *.foo 中的 .gitignore 似乎匹配任何以 .foo 结尾的 stash 或非 stash 文件。
$ 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 模式的不同之处和原因?

最佳答案

gitignore 使用 ' * ' 跟随 glob convention :

OP Lone Learner 询问 in the comments :

因为那是 shell configuration choice
类型(使用 shopt ,即 specific to bash ):

shopt -s dotglob
echo *.foo
.foo foo.foo
那是使用 dotglob

关于git - .gitignore 遵循什么模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34901807/

10-14 17:18