Git: обратное игнорирование (.gitignore)

Я создал репозиторий для своей домашней папки. Это мой файл .gitignore:

!.vim/plugin/*
!.vim/doc/*
.*
*
.viminfo
.vim/.netrwhist
.vim-fuf-data/file/stats
bin/dwm/dwm

Поэтому, когда я создаю новый файл внутри .vim/plugin, я ожидал, что после git status этот файл будет показан, но no..why?

EDIT: после пары ответов я изменил позицию обратного игнорирования строк таким образом ниже, но проблемы одинаковы: новые файлы, которые я создаю внутри папки .vim/plugin, не отображаются после git status..

.*
*
.viminfo
.vim/.netrwhist
.vim-fuf-data/file/stats
bin/dwm/dwm
!.vim/plugin/*
!.vim/doc/*

Ответ 1

В строке 4 вы игнорируете все с помощью *. Это отменяет предыдущий шаблон отрицания. На странице man:

в пределах одного уровня приоритета, последний шаблон соответствия решает Исход

Где "уровень приоритета" означает разные источники для игнорирования шаблонов, таких как .gitignore и $GIT_DIR/info/exclude.

Если вы хотите игнорировать все, кроме шаблонов, начинающихся с !, вы должны переместить * в начало .gitignore


Edit

Я нашел решение с помощью другого вопроса о SO:

*
!*/
!.vim/plugin/*

Ответ 2

Попробуйте переместить отрицательные строки (те, которые начинаются с !) в нижней части файла .gitignore.

Смотрите раздел Примеры здесь

Ответ 3

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

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

/*
!.gitignore
!.vimrc
!.bashrc
!.vim/
.vim/.netrwhist
!.gconf/
.gconf/apps/*
!.gconf/apps/gnome-terminal
!bin/

Ответ Deve делает git очень медленным, потому что он ищет все каталоги под вашим homedir. (В конкретном случае использования git для настроек в вашем homedir)