Track file inside ignored directory

To add to “.gitignore exclude folder but include specific subfolder”, one good way to debug those .gitignore file is to use git check-ignore (Git 1.8.4+):

git check-ignore -v my_folder/my_file.md

You would see it is still ignored because of the my_folder/ rule.

That is because it is not possible to re-include a file if a parent directory of that file is excluded.(*)
(*: unless certain conditions are met in git 2.?+, see below)

That is why ignoring the files within that folder (my_folder/*, instead of the folder itself) allows you to exclude one.

Of course, you can force adding a file ignored (git add -f my_folder/my_file.md), but that is not the point of this answer.
The point is to explain why adding !my_folder/my_file.md in .gitignore doesn’t work with git 2.6 or less.


Note that with git 2.9.x/2.10 (mid 2016?), it might be possible to re-include a file if a parent directory of that file is excluded if there is no wildcard in the path re-included.

Nguyễn Thái Ngọc Duy (pclouds) is trying to add this feature:

  • commit 506d8f1 for git v2.7.0, reverted in commit 76b620d git v2.8.0-rc0
  • commit 5e57f9c git v2.8.0-rc0,… reverted(!) in commit 5cee3493 git 2.8.0-rc4.

So here, with git 2.8+, this would work:

/my_folder
!my_folder/my_file.md

Leave a Comment