How can I add an exception to .gitignore, like "ignore all the .dll files BUT myfile.dll"?
5 Answers
If you want to ignore whole folder, except some specific files, then write:
MyFolder/*
!MyFolder/CoolFile.txt
This won't work:
MyFolder/
!MyFolder/CoolFile.txt

- 7,833
- 4
- 41
- 65
-
34Note that this extends to subdirectories as well. For example, this will work: `MyFolder/sub/* !MyFolder/sub/file.txt` But this won't: `MyFolder/* !MyFolder/sub/file.txt` – ben Jan 14 '15 at 15:39
-
13The reason - " It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined. " [https://git-scm.com/docs/gitignore] – Craig Hicks Jun 21 '17 at 03:51
-
5So "for performance reasons" I have to manually enter 21 different subfolders that have the same name and were previously ignored by a single line, just so I can exclude one file. – endolith Jul 21 '20 at 03:23
-
1@endolith, have you found a better way to do it? – Angelin Calu Oct 18 '22 at 10:39
You can also ignore folders like
!src/main/resources/archetype-resources/**/*
you can also ignore nested folder with patterns like
!**/src/test/resources/**/*
For quick creation of .gitignore file try gitignore.io

- 3,074
- 1
- 25
- 26
I did this because I have a folder called /modules
that I want to ignore, except everything in the /modules/custom
folder. This worked for me. Now my custom modules will get synced to GitHub.
/modules/*
!/modules/custom/

- 30,738
- 21
- 105
- 131

- 954
- 4
- 14
- 44
-
3
-
1OMG thank you, exactly what I was trying to do and amazing how many garbage answers I had to sift through to find this. – Emperor Eto Apr 17 '21 at 13:21
You can have several .gitignore
files working together in a hierarchical manner to achieve your goal.
At the root level you may have:
root
*.dll
inside the folder having the myfile.dll
you can add another .gitignore
file like so:
root/lib/folderwithMyFiledll
!myfile.dll
more info here
An optional prefix "!" which negates the pattern; any matching file excluded by a previous pattern will become included again. Put a backslash ("\") in front of the first "!" for patterns that begin with a literal "!", for example, "!important!.txt". It is possible to re-include a file if a parent directory of that file is excluded if certain conditions are met. See section NOTES for detail.

- 420
- 6
- 10
-
2The doc snippet you pasted seems out of date. The site currently states that you can't re-include files under parent directories. – vivainio Jan 04 '19 at 14:57