.gitignore通配符后缀排除,子文件夹取反

时间:2018-10-19 17:34:26

标签: git wildcard gitignore subdirectory negation

我有一个.gitignore,就像这样:

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

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

我尝试使用上述.ignore文件,但由于/0/中的图像文件仍被忽略,因此无法正常工作。如何正确编写呢?

1 个答案:

答案 0 :(得分: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'

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

$ 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'