I have a git repo at path dir_a, and I have a file that I want to trace it at dir_a/dir_b/dir_c/memory.cpp. But I can't trace it, when I try to add it git add ./dir_b/dir_c/memory.cpp , it will announce me :
The following paths are ignored by one of your .gitignore files:
dir_b
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
I have check my .gitignore file in dir_a and dir_b, but I don't understand why my whilelist cannot work. My .gitignore file as follows:
#dir_a/.gitignore
*.*
*
!/dir_b/*
#dir_b/.gitignore
*.*
*
!*.cpp
And I had try to figure out which file results into this situation, and the output is as follows:
% git check-ignore -v ./dir_b/dir_c/memory.cpp
.gitignore:2:* ./dir_b/dir_c/memory.cpp
% git check-ignore -v ./dir_b/dir_c/main.cpp
It looks like it can trace my main.cpp but cannot trace another file in the same path
From the gitignore docs...
*has ignored everything at the top-directory (*.*is unnecessary) including dir_b. You need to restore dir_b.!/dir_b/*restores what's in dir_b, but not dir_b itself. You also need to restore dir_b with!/dir_b/.One more issue.
!/dir_b/*only restores what's in dir_b.*does not match a/; it does not restore subdirectories. For example, dir_b/subidr/foo will not be restored. For that you need!/dir_b/**,**matches everything.