.gitignore исключить файлы в каталог, но не определенные каталоги

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

Это не работает. Когда я клонирую проект, нет папки "application/cache" или "application/cache/folder" и т.д....

Я бы хотел, чтобы файлы в папках кеша не были кэшированы, но были папки, так что права доступа к папкам и их существование.

Ответ 1

Git не отслеживает папки, только файлы, поэтому, если вы игнорируете все в папке, Git не будет ничего отслеживать. Вы можете добавить файл .gitignore в каждый каталог (application/cache, application/cache/folder, application/cache/folder/onemorefolder/) со следующим содержимым:

*
!.gitignore

Затем вы можете добавить эти каталоги, и только файл .gitignore в каждом каталоге будет добавлен, но это означает, что теперь будут отслеживаться каталоги (т.е. созданные при клонировании).

Ответ 2

Git не отслеживает пустые каталоги. Просто добавьте пустые файлы-заполнители в папки, которые вы хотите зафиксировать.

touch application/cache/.keep
git add -f application/cache/.keep

Сделайте это также с каждой "пустой" папкой. Позже вы можете игнорировать эти файлы, они действительно существуют только для того, чтобы git создавал эти каталоги на клоне. Записи в .gitignore не позволяют отслеживать другие файлы в папках (если вы не заставляете их с помощью git add -f;)).

Ответ 3

Есть еще один, возможно, более чистый способ сделать это. Вместо того, чтобы иметь файлы sub .gitignore в папках, которые вы хотите сохранить. Вы можете поместить это в корень .gitignore следующим образом:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

Теперь просто создайте и передайте пустые .gitkeep файлы в каталоги, как указано выше. Затем папка будет отслежена с этими .gitkeep файлами, но ни одно из содержимого не будет отслежено.

Ответ 4

вы можете поместить файл .gitignore в каждый из них (например, сказал mipadi) или сделать что-то подобное в своем корневом файле .gitingnore

/assets/*/
/assets/*.*

он отлично работает для меня

Ответ 5

Visual Studio не понравился принятый ответ. Я должен был добавить новую строку перед *, чтобы она работала.

# Ignore all files in this folder.
*
!.gitignore