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)