【问题标题】:What does !*/ mean in .gitignore.gitignore 中的 !*/ 是什么意思
【发布时间】:2014-10-22 15:39:38
【问题描述】:

使用 git 版本 1.7.1,我正在尝试排除除 .php 文件之外的所有文件。

我找到的工作解决方案依赖于命令!*/

# Ignore Everything
*

# Except these files
!.gitignore
!*/
!*.php

如果没有!*/,它将只包含根目录中的*.php 文件。 !*/ 做了什么才能让它发挥作用?

【问题讨论】:

  • ! 不要忽略* 此目录中/ 中以斜线结尾的所有内容。也就是不要忽略子目录。

标签: git gitignore


【解决方案1】:

看看documentation of gitignore

可选前缀“!”这否定了模式;任何匹配的文件 被先前的模式排除将再次被包含。它不是 如果该文件的父目录是,则可以重新包含该文件 排除。 Git 没有列出排除的目录以提高性能 原因,所以包含的文件上的任何模式都没有效果,不管 它们被定义的地方。在第一个前面放一个反斜杠(“\”) “!”对于以文字“!”开头的模式,例如, “!重要!.txt”。

【讨论】:

  • 之前,我错过了这一段的关键部分……“如果排除了该文件的父目录,则无法重新包含该文件。”谢谢!
  • 没问题 :) 很高兴我帮忙
【解决方案2】:

这是我的思路:

默认情况下,忽略语句* 将忽略所有内容,包括根目录及其所有内容。

所以此时,根目录下的所有文件和文件夹都会被忽略。

!*.php 命令将重新包含根路径中的所有*.php 文件,但这些文件夹仍被忽略(因为它们不以.php 结尾) - 因此,它们不是还没有被 gitignore 否定。

所以!*/ 命令重新包含所有目录(和后续子目录),以便可以检查它们是否有*.php 文件。示例:folder1/ 匹配否定语句 !*/,因为它在末尾包含 /,并且文件夹名称适合通配符运算符 *

【讨论】:

  • 这对我来说完全有道理,除了:!*/ 行不需要出现在 *.php 行之前,因此 git 可以看到其中的目录搜索 php 文件?还是命令在.gitignore 中没有任何影响?
  • @JacobFord 正确 - 文档指定了以前的模式,.gitignore 文件从上到下读取(否则,如何确定以前的模式?)文件夹将不知道!*.php 如果它出现在 !*/ 之前。这不是当前问题的重点。您可以将.gitignore 文件想象成一个漏斗。
  • 我的错!您的回答似乎暗示 !*.php 将出现在 !*/ 之前,但现在我看到您只是按此顺序解释它。
猜你喜欢
  • 2017-11-02
  • 1970-01-01
  • 2011-08-12
  • 2017-06-11
  • 2018-03-05
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
相关资源
最近更新 更多