Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Comments on How to configure .gitignore to ignore all files except a certain directory
Parent
How to configure .gitignore to ignore all files except a certain directory
MWE
In the terminal run:
mkdir mwe
cd mwe
mkdir dir
touch f1.txt f2.pdf dir/f1.txt dir/f2.pdf
git init .
Create a .gitignore
with:
* # ignore all
!dir/ # except this directory
Problem
Git doesn't register this and all files are still ignored:
git status
But, a normal file pattern works:
* # ignore all
!f1.txt # except this file
Question
How do I configure my .gitignore
to ignore all except a certain
directory?
Post
The following users marked this post as Works for me:
User | Comment | Date |
---|---|---|
mcp | (no comment) | Jul 20, 2022 at 23:29 |
From the docs
Example to exclude everything except a specific directory
foo/bar
(note the/*
- without the slash, the wildcard would also exclude everything withinfoo/bar
):$ cat .gitignore # exclude everything except directory foo/bar /* !/foo /foo/* !/foo/bar
Just do
/*
!/dir
Why this works (and yours doesn't)
When you exclude *
, you end up excluding everything, directories and files alike. When you un-exclude dir
, the files inside aren't un-excluded as well. This is why it doesn't appear to do anything. You can actually fix this by first un-excluding dir
and then un-excluding everything in it like this:
*
!/dir
!/dir/**/*
By using /*
though, it doesn't exclude everything, but only the top-level stuff. The files inside technically weren't excluded, but as long as the directory the files are in is excluded, the files won't be included.
Therefore, when you un-exclude dir
, the files within (which hadn't been excluded) are included without a problem.
1 comment thread