Exceptions in .gitignore [duplicate]
Asked Answered
K

5

280

How can I add an exception to .gitignore, like "ignore all the .dll files BUT myfile.dll"?

Koenraad answered 10/3, 2010 at 9:52 Comment(0)
L
371

Use ! to negate the pattern:

*.dll
!myfile.dll
Ladybird answered 10/3, 2010 at 9:55 Comment(0)
A
240

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
Affra answered 22/12, 2013 at 16:16 Comment(4)
Note 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.txtFurr
The 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. " [git-scm.com/docs/gitignore]Exocentric
So "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. 🙄Remmer
@endolith, have you found a better way to do it?Gesticulate
T
49

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

Twibill answered 29/2, 2012 at 7:1 Comment(1)
you mean "ignore ignoring them", so they will be included in the source repository ;-)Hildehildebrand
A
17

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/
Apperceive answered 9/9, 2019 at 18:42 Comment(2)
This is the only method that actually worked for me.Recalcitrate
OMG thank you, exactly what I was trying to do and amazing how many garbage answers I had to sift through to find this.Sudatory
D
14

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.

Disinterested answered 18/1, 2016 at 21:37 Comment(1)
The doc snippet you pasted seems out of date. The site currently states that you can't re-include files under parent directories.Attune

© 2022 - 2024 — McMap. All rights reserved.