I have a gitignore file that makes git ignore *.dll
files, and that is actually the behavior I want. However, if I want an exception ( i.e. to be able to commit foo.dll
), how can I achieve this?
Use:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
From gitignore:
An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again. If a negated pattern matches, this will override lower precedence patterns sources.
*.dll
in it, and my project's gitignore has !Libs/*.dll
but that doesn't seem to be working. –
Turves !Libs/**/*.dll
. –
Maker !**/Libs/*.dll
, depending on the folder structure. –
Pudency !foo.dll
did invalidate the command. If I add the comment on a separate row it works. –
Custom #
should be avoided. –
Scandian Git ignores folders if you write:
/js
but it can't add exceptions if you do:
!/js/jquery
or !/js/jquery/
or !/js/jquery/*
You must write:
/js/*
and only then you can except subfolders like this
!/js/jquery
!/js/jquery/xyzlib
will not be ignored... –
Recuperative /js/*
, !/js/jquery
, /js/jquery/*
, !/js/jquery/xyzlib
? Feels like a rather funny way to do it... –
Send You can simply git add -f path/to/foo.dll
.
.gitignore
ignores only files for usual tracking and stuff like git add .
-f
tells git to force the adding of this file in the repo since it might ignore it first because of your .gitignore
–
Gisele To exclude everything in a directory, but some sub-directories, do the following:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
Source: https://gist.github.com/444295
Just add !
before an exclusion rule.
According to the gitignore man page:
Patterns have the following format:
...
- An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again. If a negated pattern matches, this will override lower precedence patterns sources.
For Nested Folders, I came up with a solution based on Matiss's answer.
Let's say I want to ignore everything in build/
directory (which is in /app
). So I do:
build/*
However, if I want to exclude build/outputs/bundle/release
subfolder, I need to play some hide and seek!
/app/build/*
!/app/build/outputs
/app/build/outputs/*
!/app/build/outputs/bundle
/app/build/outputs/bundle/*
!/app/build/outputs/bundle/release
Important Notes:
- All the paths should start with
/
and be relative to the.gitignore
- You have to do it one subfolder at a time. You can see in VS Code (for instance) what it includes and what not at every step.
!foo.dll
in .gitignore, or (every time!) git add -f foo.dll
If you're working with Visual Studio and your .dll happens to be in a bin
folder, then you'll need to add an exception for the particular bin folder itself, before you can add the exception for the .dll file. E.g.
!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll
This is because the default Visual Studio .gitignore
file includes an ignore pattern for [Bbin]/
This pattern is zapping all bin folders (and consequently their contents), which makes any attempt to include the contents redundant (since the folder itself is already ignored).
I was able to find why my file wasn't being excepted by running
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
from a Git Bash window. This returned the [Bbin]/
pattern.
The solution depends on the relation between the git ignore rule and the exception rule:
- Files/Files at the same level: use the @Skilldrick solution.
- Folders/Subfolders: use the @Matiss Jurgelis solution.
Files/Files in different levels or Files/Subfolders: you can do this:
*.suo *.user *.userosscache *.sln.docstates # ... # Exceptions for entire subfolders !SetupFiles/elasticsearch-5.0.0/**/* !SetupFiles/filebeat-5.0.0-windows-x86_64/**/* # Exceptions for files in different levels !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo !SetupFiles/logstash-5.0.0/**/*.suo
This is how I do it, with a README.md file in each directory:
/data/*
!/data/README.md
!/data/input/
/data/input/*
!/data/input/README.md
!/data/output/
/data/output/*
!/data/output/README.md
Since Git 2.7.0 Git will take exceptions into account. From the official release notes:
- Allow a later "!/abc/def" to override an earlier "/abc" that appears in the same .gitignore file to make it easier to express "everything in /abc directory is ignored, except for ...".
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt
edit: apparently this doesn't work any more since Git 2.8.0
If you have a directory and want to ignore everything with the exception of some files (e.g. *.py
files), you can do:
sub-dir/**/*.*
!sub-dir/**/*.py
© 2022 - 2024 — McMap. All rights reserved.