Исключение подстановочного знака .gitignore с отрицанием для подпапки - PullRequest
0 голосов
/ 19 октября 2018

У меня есть .gitignore, который выглядит следующим образом:

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

Я хочу игнорировать все файлы изображений (.png, .jpg, .gif) во всех папках, но не в папке /0/,Не следует игнорировать все файлы изображений в этой папке.

Я пытался использовать указанный выше файл .ignore, но он не работает, поскольку файлы изображений в /0/ все еще игнорируются.Как правильно написать это?

1 Ответ

0 голосов
/ 19 октября 2018

Шаблон игнорирования:

!0/*.png

означает «не игнорировать файл *.png, который напрямую внутри папки с именем 0».Так что это будет включать 0/abc.png, и это будет включать 1/0/def.png, но это исключит 0/1/ghi.png.

Если вы хотите включить все *.png ниже папки 0, есть два способа сделатьthis.

Вы можете использовать следующий шаблон:

*.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'
...