git - .gitignore 规则之间有和没有尾部斜杠的区别,如/dir 和/dir/

标签 git gitignore

Git 存储库中.gitignore 文件中的/dir/dir/ 有区别吗?

以下有何不同?

/dir
/dir/
/dir/*

最佳答案

是的,这些规则是不同的。

  • /dir 将匹配文件、目录、链接、任何名为 dir
  • 的内容
  • /dir/ 将匹配 名为 dir
  • 的目录
  • /dir/* 将匹配所有文件、目录和里面的任何其他内容 名为 dir 的目录(但不是 dir 目录本身)。

/dir/dir//dir/*等价的。区别 在使用覆盖规则时非常清晰,比如著名的 !.gitkeep 绕过跟踪空目录的限制。认为 文件 dir/.gitkeep

的存在
  • 使用 /dir/dir/,Git 甚至不会查看目录内部 所以 .gitkeep 不会被看到。
  • 使用/dir/*,文件会被Git和目录检测到 如果这个 .gitkeep 被提交,将被保留,因为规则 不适用于目录本身,仅适用于其内容。

观察:上面提到的所有规则都锚定在当前目录 (.gitignore 所在的地方),因为 / 前缀。 如果没有前缀,规则不仅适用于该特定目录,还适用于子目录或存储库中的任何地方, 如果 .gitignore 位于根级别。

关于git - .gitignore 规则之间有和没有尾部斜杠的区别,如/dir 和/dir/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888695/

相关文章:

Git:如何执行硬推送

npm - .npmignore : ignore whole folder except given file types

gitignore 跨所有分支?

Github GitIgnore 错误

git - 仅还原推送提交的单个文件

git - 为什么 git 不能按路径进行硬/软重置?

git - 如何撤消最新提交并保留更改?

PHP根据.gitignore过滤文件和路径

android - Eclipse Git gitignore 文件被忽略

git - 是否可以硬链接(hard link)本地 git 子模块存储库?