25

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/*
tirenweb
  • 30,963
  • 73
  • 183
  • 303

3 Answers3

27

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,528
  • 2
  • 24
  • 27
3

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
  • 116
  • 3
2

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

See the Examples section here

garyh
  • 2,782
  • 1
  • 26
  • 28