gitignore не игнорирует файлы в подкаталогах - PullRequest
1 голос
/ 21 февраля 2020

Я новичок в git и пытаюсь понять gitignore. Пока у меня есть каталог, который я хочу исключить, который называется build, , за исключением файлов с именем BUILD.

build/**
!build/**/BUILD

Но, похоже, файл BUILD также исключен. Кто-нибудь знает, что я делаю не так?

resource/obj1/BUILD
resource/obj2/BUILD
resource/obj3/BUILD

Ответы [ 2 ]

4 голосов
/ 21 февраля 2020

Вы должны исключить (белый список) папок, затем BUILD/ content:

build/**
!build/**/
!build/**/BUILD/**

См. ".gitignore исключить папку, но включить указанную c подпапку "

  • build/** ignores файлов и папок, поэтому build/aFolder/ игнорируется
  • !build/**/BUILD/** пытается найти файл в build/aFolder/BUILD/

Но: « Невозможно повторно включить файл, если исключен родительский каталог этого файла. »

И: build/aFolder/ - это уже игнорируемая папка.

Следовательно: !build/**/BUILD/** не применяется.

Если : вы игнорируете папки сначала: !build/**/ (конечный / важен):
build/aFolder/ больше не игнорируется, хотя build/aFolder/<files> все еще игнорируется build/**.

Тогда : !build/**/BUILD/** может применяться к папке BUILD/ содержимое (его файлы), поскольку папки !build/aFolder/ и !build/aFolder/BUILD/ не игнорируются.


Проверьте, если это затем работает с:

git check-ignore -v -- build/aFile
git check-ignore -v -- build/path/to/BUILD/aFile

Первая команда должна вернуть .gitignore строку правила.
Вторая команда не должна ничего возвращать, так как файл не должен игнорироваться.

0 голосов
/ 21 февраля 2020

Вам не нужно указывать файлы, если вы хотите исключить весь каталог.

build

и git будут игнорировать каталог сборки.

...