23

I created a repository for my home folder. This is my .gitignore file:

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

So when I create a new file inside .vim/plugin I expected that after git status this file was shown, but no..why?

EDIT: after a pair of answers I changed the position of inverse ignoring lines this way below, but the problems is the same: the new files I create inside the .vim/plugin folder are not shown after git status..

.*
*
.viminfo
.vim/.netrwhist
.vim-fuf-data/file/stats
bin/dwm/dwm
!.vim/plugin/*
!.vim/doc/*
ziiweb
  • 29,901
  • 71
  • 176
  • 297

3 Answers3

25

In line 4 you're ignoring everything with *. This overrides the previous negating pattern. From the man page:

within one level of precedence, the last matching pattern decides the outcome

Where "level of precedence" means different sources for ignore patterns like .gitignore and $GIT_DIR/info/exclude.

If you want to ignore everything but the patterns beginning with ! you should move the * to the beginning of .gitignore


Edit

I found a solution with the help of another question on SO:

*
!*/
!.vim/plugin/*
Community
  • 1
  • 1
Deve
  • 4,380
  • 2
  • 23
  • 26
2

Try moving the negated lines (those starting with !) to the bottom of the .gitignore file.

See the Examples section here

garyh
  • 2,712
  • 1
  • 26
  • 28
2

Another way would be to ignore only top level files and directories, and in the whitelisted directories do the same if necessary, as in this answer to a related question

For example my .gitignore now looks like this

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

The answer of Deve makes git very slow because it searches all directories under your homedir. (In the specific case of using git for the settings in your homedir)

Community
  • 1
  • 1
PTT
  • 106
  • 3