gpt4 book ai didi

git - .gitignore 中 ./(点斜杠) 的功能?

转载 作者:行者123 更新时间:2023-12-02 19:00:24 26 4
gpt4 key购买 nike

我最近遇到了一个.gitignore file./ 开始一些换行符。我不知道那些 ./ 做了什么,我非常惊讶地发现这既是 a) 一个看似新颖的问题,b) 很难找到答案。

我见过these related问题,但是gitignores中./的功能好像和bash终端中的不一样。

我的测试似乎表明 ./ 只是没有做任何事情。给定文件夹结构:

C:.
│ .gitignore
├───bar
│ bar0.txt
├───baz
│ baz0.txt
└───foo
foo0.txt

还有一个 .gitignore

# .gitignore
./foo
./foo/*
./foo/
bar
/baz

如果我执行 git add -Agit status,则仅跟踪这些文件:

new file:   .gitignore
new file: foo/foo0.txt

那么,./的用途是什么?

编辑:我使用的是 Windows。

最佳答案

请记住,在 Windows(和 DOS)和 Unix(包括 macOS)中,文件路径 . 中的单点指的是当前目录。

.gitignore文档中,相关点是:

  • The slash / is used as the directory separator. Separators may occur at the beginning, middle or end of the .gitignore search pattern.
  • If there is a separator at the beginning or middle (or both) of the pattern, then the pattern is relative to the directory level of the particular .gitignore file itself. Otherwise the pattern may also match at any level below the .gitignore level.

所以:

  • foo

    • 将匹配同一目录中名为 foo 的任何文件或目录以及.gitignore 文件相关的任何后代目录。
  • ./foo

    • 将仅匹配与 foo 文件位于同一目录中的名为 .gitignore 的文件或目录。
    • 我注意到,即使 git 手册说它匹配“文件或目录”,请记住这是不是递归 - 它也不匹配该子文件夹(或其他子目录)中没有 ** glob 的文件通配符。我不知道为什么手册上说“文件或目录”,而 git 本身不存储与目录相关的任何信息 - 仅存储文件。
  • /foo

    • 的行为与 ./foo 相同。
  • ./foo/

    • 将仅匹配与 foo 文件位于同一目录中的名为 .gitignore 的目录。
  • /foo/

    • 的行为与 ./foo/ 相同。

至于为什么有人使用 ./ 作为前缀而不是仅仅使用 / ,我只能推测,但可能有一些原因:

  • 他们希望使用一种语法,让不熟悉 .gitignore 规则的读者立即清楚指定的路径是相对于 .gitignore 文件目录的,因为 /foo (没有前导 . )可以被解释为绝对路径 -路径(要么是文件系统绝对路径,尤其是在 Linux 上,例如 /usr/bin - 要么是 git 存储库内的绝对路径)
  • 他们通过管道传输另一个在输出中使用前导 .gitignore 的程序或实用程序的输出来生成 . 文件。
  • 他们自己不知道规则,这只是 Cargo Cult programming 的一个示例(即以特定方式做事(尤其是在复杂的情况下),而不理解他们为什么这样做,并且没有调查是否有必要)。

关于git - .gitignore 中 ./(点斜杠) 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65639119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com