I've added .DS_Store to the .gitignore file, but it seems that it is only ignoring .DS_Store in the root directory, not in every folder and subfolder.
How do I fix this?
I've added .DS_Store to the .gitignore file, but it seems that it is only ignoring .DS_Store in the root directory, not in every folder and subfolder.
How do I fix this?
I think the problem you're having is that in some earlier commit, you've accidentally added .DS_Store
files to the repository. Of course, once a file is tracked in your repository, it will continue to be tracked even if it matches an entry in an applicable .gitignore file.
You have to manually remove the .DS_Store
files that were added to your repository. You can use
git rm --cached .DS_Store
Once removed, git should ignore it. You should only need the following line in your root .gitignore
file: .DS_Store
. Don't forget the period!
git rm --cached .DS_Store
removes only .DS_Store
from the current directory. You can use
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
to remove all .DS_Stores
from the repository.
Felt tip: Since you probably never want to include .DS_Store
files, make a global rule. First, make a global .gitignore
file somewhere, e.g.
echo .DS_Store >> ~/.gitignore_global
Now tell git to use it for all repositories:
git config --global core.excludesfile ~/.gitignore_global
This page helped me answer your question.
Add**/.DS_Store
into .gitignore
for the sub directory
If .DS_Store
already committed:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
To ignore them in all repository: (sometimes it named ._.DS_Store
)
echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
, from: stackoverflow.com/questions/18393498/…
Commented
Dec 2, 2016 at 7:40
-f
is needed if you have open files in the relavent folders: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Commented
Jan 25, 2019 at 10:04
printf "%b\n" ".DS_Store\n._.DS_Store\n**/.DS_Store\n**/._.DS_Store\n" >> ~/.gitignore_global && git config --global core.excludesfile ~/.gitignore_global
If .DS_Store was never added to your git repository, simply add it to your .gitignore file.
If you don't have one, create a file called
.gitignore
In the root directory of your app and simply write
**/.DS_Store
In it. This will never allow the .DS_Store file to sneak in your git.
But, if it's already there, write in your terminal:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
then commit and push the changes to remove the .DS_Store from your remote repo:
git commit -m "Remove .DS_Store from everywhere"
git push origin master
And now add .DS_Store to your .gitignore file, and then again commit and push with the 2 last pieces of code (git commit..., git push...)
*
or **
depending on what you want to achieve. It is a way of telling the shell how to navigate directories. This stackoverflow answer explains it fully stackoverflow.com/a/28199633/4092170
Commented
Jan 3, 2018 at 20:45
find . -name '.DS_Store' -type f -delete
to delete all created .DS_store recursively
Commented
Jun 18, 2023 at 10:05
Your .gitignore file should look like this:
# Ignore Mac DS_Store files
.DS_Store
As long as you don't include a slash, it is matched against the file name in all directories. (from here)
git rm --cached path/to/file/here
Simply place this on a new line in .gitignore
**/.DS_Store
From git documentation
- A leading "**" followed by a slash means match in all directories. For example, "**/foo" matches file or directory "foo" anywhere, the same as pattern "foo". "**/foo/bar" matches file or directory "bar" anywhere that is directly under directory "foo".
**/.DS_Store
is just a more complicated way of writing .DS_Store
. You only need the double star when you want to gitignore a specific path pattern, regardless of where it occurs. For example **/foo/.DS_Store
would hide .DS_Store
files only if found in a foo
subdirectory (regardless of where foo
is).
Step 1, delete all the *.DS_store
files. One can run
git rm -f *.DS_Store
but be aware that rm -f
can be a bit dangerous if you have a typo!
Step two: add
*.DS_Store
.DS_Store
to .gitignore. This worked for me!
You can also add the --cached
flag to auco's answer to maintain local .DS_store files, as Edward Newell mentioned in his original answer. The modified command looks like this: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch
..cheers and thanks!
Step :1)Remove the existing files using this command
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Step : 2)Add .DS_Store in your .gitignore file
Step :3) Commit your changes in .gitignore git add .gitignore git commit -m "removed .DS_Store"
$ git rm ./*.DS_Store
- remove all .DS_Store from git$ echo \.DS_Store >> .gitignore
- ignore .DS_Store in futurecommit & push
You should add following lines while creating a project. It will always ignore .DS_Store
to be pushed to the repository.
*.DS_Store
this will ignore .DS_Store while code commit.
git rm --cached .DS_Store
this is to remove .DS_Store files from your repository, in case you need it, you can uncomment it.
## ignore .DS_Store file.
# git rm --cached .DS_Store
*.DS_Store
In case you want to do this globally so you never have to think about .DS_Store
again:
git config --get core.excludesfile
.DS_Store
to the global Git ignore fileFrom this point on, Git will act as if you've placed the patterns in the global Git ignore file into your local ignore file every time.