我有一个.gitignore,就像这样:
*.png
*.jpg
*.gif
!0/*.png
!0/*.jpg
!0/*.gif
我想忽略所有文件夹中的所有图像文件(.png,.jpg,.gif),但不要忽略文件夹/0/
中的所有图像文件。此文件夹中的所有图像文件都不应忽略。
我尝试使用上述.ignore文件,但由于/0/
中的图像文件仍被忽略,因此无法正常工作。如何正确编写呢?
答案 0 :(得分:1)
忽略模式:
!0/*.png
表示“不要忽略名为0的文件夹中直接 的任何*.png
文件”。因此,这将包括0/abc.png
,并且将包括1/0/def.png
,但将排除0/1/ghi.png
。
如果要将所有*.png
包含在文件夹0下,则有两种方法可以实现。
您可以使用以下模式:
*.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'
这是您的规则,其中包括名为*.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'