I have a lot of projects in my .Net solution. I would like to exclude all "bin/Debug" and "bin/Release" folders (and their contents), but still include the "bin" folder itself and any dll's contained therein.
.gitignore
with "bin/" ignores "Debug" and "Release" folders, but also any dll's contained in the "bin" folder.
bin/Debug
or bin/Release
in the .gitignore
file does not exclude the directories unless I fully qualify the ignore pattern as Solution/Project/bin/Debug
- which I don't want to do as I will need to include this full pattern for each project in my solution, as well as add it for any new projects added.
Any suggestions?
Have you tried wildcards?
Solution/*/bin/Debug
Solution/*/bin/Release
With version 1.8.2 of git, you can also use the **
wildcard to match any level of subdirectories:
**/bin/Debug/
**/bin/Release/
You can use .gitignore in the top level to ignore all directories in the project with the same name. For example:
Debug/
Release/
This should update immediately so it's visible when you do git status. Ensure that these directories are not already added to git, as that will override the ignores.
$GIT_DIR/.git/info/exclude
file.
git rm -rf DirectoryName/
All the above answers are valid, but something that I don't think is mentioned is that once you add a file from that directory into the repo, you can't ignore that directory/subdirectory that contains that file (git will ignore that directive).
To ignore already added files run
$ git rm -r --cached .
Otherwise you'll have to remove all files from the repo's target directory first - and then you can ignore that folder.
git rm -r --cached .
The question isn't asking about ignoring all subdirectories, but I couldn't find the answer anywhere, so I'll post it: */*
.
git add
to ignore a directory and all files in all subdirectories of that directory. I have tried dirname/
, dirname/*
, dirname/**
, dirname/*/*
, even in desperation dirname/*/*/*
, dirname/*/*/*/*
, dirname/*/*/*/*/*
.
*/*
ignores all subdirectories but not files in the current directory. To ignore a specific subdirectory is normal gitignore usage. dirname
, dirname/
, and dirname/*
all work for me. Has anything in that directory already been committed?
.git
directory between attempts, then git init
then git add --all .
(have also tried without --all
), using 1.9.4.msysgit.1. Every non-empty subdirectory under my named directory is added to the index (checked in TortoiseGit and git status
). There are no relevant lines in .gitignore
starting !
but must be some conflict. Solved for now by removing the folders during add
. Guess this is something that'll require a bit more digging to provide the necessary info to diagnose. Thanks for reassuring me that I'm not misunderstanding the syntax.
Besides putting the correct entries in your .gitignore file, if you're trying to ignore something already added to the repo, you have to do git rm -r /path/to/dir
and commit that before you add the dir to your .gitignore file. Otherwise the only thing git will ignore is your ignore directive.
The only way I got this to work on my machine was to do it this way:
# Ignore all directories, and all sub-directories, and it's contents:
*/*
#Now ignore all files in the current directory
#(This fails to ignore files without a ".", for example
#'file.txt' works, but
#'file' doesn't):
/*.*
#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
Notice how you have to explicitly allow content for each level you want to include. So if I have subdirectories 5 deep under themes, I still need to spell that out.
This is from @Yarin's comment here: https://stackoverflow.com/a/5250314/1696153
These were useful topics:
How do negated patterns work in .gitignore?
How do gitignore exclusion rules actually work?
I also tried
*
*/*
**/**
and **/wp-content/themes/**
or /wp-content/themes/**/*
None of that worked for me, either. Lots of trail and error!
To exclude content and subdirectories:
**/bin/*
To just exclude all subdirectories but take the content, add "/":
**/bin/*/
To ignore all subdirectories you can simply use:
**/
This works as of version 1.8.2 of git.
The generic way to ignore all subfolders, while continuing to track the files that are in the /bin
directory would be to add the following line to your project's .gitignore file:
bin/*/*
If you want to ignore only particular named subfolders, you can do:
bin/Debug/*
bin/Release/*
nb. if the bin
directory is not in the root of your project (alongside the .gitignore file), then instead of eg. bin/*/*
you might need path/to/bin/*/*
The simplest form to ignore all subfolders of the root of your repo in your .gitignore file is:
*/
If you want ignore all subfolders of another subfolder:
subfolder/*/
If you have already commited items that need to be ignored, you will need to remove them from the repo before they are ignored.
To remove all subfolders of the root of your repo:
git rm -r --cached */*
To remove all subfolders of another subfolder:
git rm -r --cached subfolder/*/*
Seems this page still shows up on the top of Google search after so many years...
Modern versions of Git support nesting .gitignore files within a single repo. Just place a .gitignore file in the subdirectory that you want ignored. Use a single asterisk to match everything in that directory:
echo "*" > /path/to/bin/Debug/.gitignore
echo "*" > /path/to/bin/Release/.gitignore
If you've made previous commits, remember to remove previously tracked files:
git rm -rf /path/to/bin/Debug
git rm -rf /path/to/bin/Release
You can confirm it by doing git status
to show you all the files removed from tracking.
For ignoring subfolders but not main folder I could only get this to work in Visual Studio Code by placing a dummy readme.txt in the main folder. Only then /*/ checked in the main folder (and no subfolders).
Success story sharing
**
. Should be fixed by now. link