space 在 .gitignore 中行的开头似乎忽略了该行

space at beginning of line in .gitignore seems to get the line ignored

.gitignore 之间的唯一区别是行首的 space,它似乎使该行被忽略。为什么结果不一样。我添加了 space 用于对齐。

Git文件夹树结构:

.
└── d1
    ├── d11
    │   ├── f1
    │   └── f2
    ├── d12
    │   ├── f1
    │   └── f2
    └── f1

首先.gitignore:

/*
!d1
d1/*
!/d1/d11

第一个可暂存文件:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   d1/d11/f1
        new file:   d1/d11/f2

第二条.gitignore:(注意第三条规则的区别)

/*
!d1
 d1/*
!/d1/d11

第二个可暂存文件:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   d1/d11/f1
        new file:   d1/d11/f2
        new file:   d1/d12/f1
        new file:   d1/d12/f2
        new file:   d1/f1

Here is the image of my execution我希望结果应该是一样的。

错误的直觉可能来自这条规则,它没有说明开始 space。不过我确实看到了尾随这个词。

Trailing spaces are ignored unless they are quoted with backslash ("\").

d1/* d1/* 的区别在于,第一个忽略文件夹 d1 下的所有内容,第二个忽略文件夹 ' d1' 下的所有内容。

这背后的原因是 文件夹可以以空格开头

所以这两个 .gitignore 文件匹配不同的文件夹。因此,为什么第二个包含 d1 文件夹下的所有内容。