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


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

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

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

Ответы:


220

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

*
!.gitignore

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


7
Файлы .gitignore, используемые для этой цели, могут быть пустыми.
kevpie 08

2
Они могут быть пустыми, если папки игнорируются верхним .gitignoreфайлом. В данном случае это точный мой ответ.
KingCrunch

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

3
@kevpie В папке есть другие файлы, и он не хочет, чтобы они отслеживались. Если файл .gitignore пуст, эти файлы, по-видимому, будут отслеживаться.
Maliayas

с той же целью я использую .gitkeepвместо .gitignore. для меня это имеет больше смысла
Эдерсон Т. Шлахта

22

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

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

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


16

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

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

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


2
или просто !*.gitkeep:)
Éderson T. Szlachta

Вопрос был в том, как игнорировать содержимое папок, но оставить сами папки. Поэтому я считаю, что мой ответ остается в силе, и просто! *. Gitkeep не проигнорирует содержимое папок.
Джоэл Дакворт,

3

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

/assets/*/
/assets/*.*

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


Это работает, но только если репо использует расширения файлов. Ничего подобного root/LICENSE-FILEне исключено.
Brett Zamir

2

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

# Ignore all files in this folder.
*
!.gitignore
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.