【问题标题】:.gitignore wildcard suffix exclusion with negation for subfolder.gitignore 通配符后缀排除与否定子文件夹
【发布时间】:2019-03-24 15:24:01
【问题描述】:

我有一个像这样的 .gitignore:

*.png
*.jpg
*.gif
!0/*.png
!0/*.jpg
!0/*.gif

我想忽略所有文件夹中的所有图像文件(.png、.jpg、.gif),但不在文件夹/0/ 中。不应忽略此文件夹中的所有图像文件。

我尝试使用上述 .ignore 文件,但它无法正常工作,因为 /0/ 中的图像文件仍然被忽略。这个怎么写?

【问题讨论】:

  • 您的意思是./0/ 目录吗?我的意思是,不是/0/ 那样的绝对路径
  • 子目录的名称为 0。不应排除文件夹 0 内的所有图像。也许它只是微不足道的,但经过几次尝试,我没有弄清楚正确的写法。
  • .gitignore 是“使用第一个匹配”系统吗?试着把否定的线放在第一位。
  • 试过但没有帮助。 !0/ 顺便说一句,但这不是我需要的。
  • 您能否将您的实际目录结构添加到原始问题中? (即:treels -al . 0

标签: git wildcard gitignore subdirectory negation


【解决方案1】:

忽略模式:

!0/*.png

表示“不要忽略位于名为 0 的文件夹中直接的任何 *.png 文件”。所以这将包括0/abc.png,它将包括1/0/def.png,但它会排除0/1/ghi.png

如果你想将所有*.png包含在文件夹0下面,有两种方法可以做到这一点。

您可以使用以下模式:

*.png
!/0/**/*.png

** 模式匹配任何一系列子目录,包括根目录。以/ 开头的模式意味着该模式必须从当前目录开始匹配。 所以这将包括0/abc.png0/subdir/def.png0/subdir/ghi/jkl.png。它将排除abc.png1/abc.png

或者,您可以使用以下命令创建文件.gitignore

*.png

然后您可以创建另一个文件0/.gitignore,其中包含:

!*.png

这个比较明显一点,效果完全一样。

演示

这是基本的*.png 规则,它忽略所有*.png 文件:

$ git init
Initialized empty Git repository in .../.git/
$ mkdir -p 0/1
$ touch img.png 0/img.png 0/1/img.png
$ cat >.gitignore
*.png
$ git add -n .
add '.gitignore'

这是您的规则,其中包括任何名为 0 的目录中的任何 *.png

$ cat >.gitignore
*.png
!0/*.png
$ git add -n .
add '.gitignore'
add '0/img.png'

这是固定模式:

$ cat >.gitignore  
*.png
!/0/**/*.png
$ git add -n .
add '.gitignore'
add '0/1/img.png'
add '0/img.png'

这里是替代方案:

$ cat >.gitignore
*.png
$ cat >0/.gitignore
!*.png
$ git add -n .
add '.gitignore'
add '0/.gitignore'
add '0/1/img.png'
add '0/img.png'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多