.gitignore 通配符后缀排除与子文件夹的否定
.gitignore wildcard suffix exclusion with negation for subfolder
我有一个 .gitignore 是这样的:
*.png
*.jpg
*.gif
!0/*.png
!0/*.jpg
!0/*.gif
我想忽略所有文件夹中但不在文件夹 /0/
中的所有图像文件(.png、.jpg、.gif)。不应忽略此文件夹中的所有图像文件。
我尝试使用上面的 .ignore 文件,但它不起作用,因为 /0/
中的图像文件仍然被忽略。怎么写才正确?
忽略模式:
!0/*.png
表示"don't ignore any *.png
file that is directly inside a folder named 0"。所以这将包括 0/abc.png
,它会包括 1/0/def.png
,但它会排除 0/1/ghi.png
。
如果要包含文件夹 0 下的所有 *.png
,有两种方法可以做到这一点。
您可以使用以下模式:
*.png
!/0/**/*.png
**
模式匹配任何系列的子目录,包括根目录。以 /
开头的模式意味着模式必须从当前目录开始匹配。
所以这将包括 0/abc.png
、0/subdir/def.png
和 0/subdir/ghi/jkl.png
。它将排除 abc.png
和 1/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'
我有一个 .gitignore 是这样的:
*.png
*.jpg
*.gif
!0/*.png
!0/*.jpg
!0/*.gif
我想忽略所有文件夹中但不在文件夹 /0/
中的所有图像文件(.png、.jpg、.gif)。不应忽略此文件夹中的所有图像文件。
我尝试使用上面的 .ignore 文件,但它不起作用,因为 /0/
中的图像文件仍然被忽略。怎么写才正确?
忽略模式:
!0/*.png
表示"don't ignore any *.png
file that is directly inside a folder named 0"。所以这将包括 0/abc.png
,它会包括 1/0/def.png
,但它会排除 0/1/ghi.png
。
如果要包含文件夹 0 下的所有 *.png
,有两种方法可以做到这一点。
您可以使用以下模式:
*.png
!/0/**/*.png
**
模式匹配任何系列的子目录,包括根目录。以 /
开头的模式意味着模式必须从当前目录开始匹配。
所以这将包括 0/abc.png
、0/subdir/def.png
和 0/subdir/ghi/jkl.png
。它将排除 abc.png
和 1/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'