.gitignore исключить файлы в каталоге, но не в определенных каталогах - PullRequest
93 голосов
/ 09 апреля 2011
application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

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

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

Ответы [ 5 ]

212 голосов
/ 09 апреля 2011

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

*
!.gitignore

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

22 голосов
/ 09 апреля 2011

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

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

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

15 голосов
/ 09 мая 2016

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

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

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

3 голосов
/ 12 сентября 2013

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

/assets/*/
/assets/*.*

у меня нормально работает

1 голос
/ 19 января 2017

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

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