我最近遇到了一个.gitignore 文件,它以.gitignore 开头的一些换行符./。我不知道那些./s 做了什么,我很惊讶地发现这既 a) 一个看似新颖的问题,b) 很难找到答案。
我看过这些 相关的问题,但是./在 gitignores 中的功能似乎与在 bash 终端中的功能不同。
我的测试似乎表明./它没有做任何事情。给定文件夹结构:
C:.
? .gitignore
????bar
? bar0.txt
????baz
? baz0.txt
????foo
foo0.txt
Run Code Online (Sandbox Code Playgroud)
和一个 .gitignore
# .gitignore
./foo
./foo/*
./foo/
bar
/baz
Run Code Online (Sandbox Code Playgroud)
如果我这样做git add -A和git status,则只跟踪这些文件:
new file: .gitignore
new file: foo/foo0.txt
Run Code Online (Sandbox Code Playgroud)
那么,这样做的目的是./什么?
编辑:我在 Windows 上。
请记住,在 Windows(和 DOS)和 Unix(包括 macOS)中,文件路径中的单点.指的是当前目录。
从.gitignore文档中,相关要点是:
- 斜杠
/用作目录分隔符。分隔符可能出现在.gitignore搜索模式的开头、中间或结尾。- 如果模式的开头或中间(或两者)有一个分隔符,则该模式是相对于特定
.gitignore文件本身的目录级别的。否则模式也可能在低于该.gitignore级别的任何级别匹配。
所以:
foo
foo在同一目录中命名的任何文件或目录以及与该.gitignore文件相关的任何后代目录。./foo
foo 位于同一目录中的.gitignore文件或目录。**glob 通配符的子文件夹(或其他子目录)中的文件。当手册git本身不存储任何与目录相关的信息时,我不知道为什么手册会说“文件或目录” ——只有文件。/foo
./foo../foo/
foo 在同一目录中命名的目录.gitignore。/foo/
./foo/.至于为什么有人用作./前缀而不是仅仅用作前缀/,我只能推测,但有些原因可能是:
.gitignore's 规则的读者立即清楚指定路径是相对于.gitignore文件目录的,因为/foo(没有前导.)可以解释为绝对路径(即文件系统绝对路径) ,尤其是在 Linux 上,例如/usr/bin- 或 git repo 中的绝对路径).gitignore通过管道从另一个程序或实用程序的输出生成文件,该程序或实用程序.在其输出中使用了引导。