Reputation: 24708
My .gitignore
file seems to be being ignored by Git - could the .gitignore
file be corrupt? Which file format, locale or culture does Git expect?
My .gitignore
:
# This is a comment
debug.log
nbproject/
Output from git status
:
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# debug.log
# nbproject/
nothing added to commit but untracked files present (use "git add" to track)
I would like debug.log
and nbproject/
not to appear in the untracked files list.
Where should I start looking to fix this?
Upvotes: 1765
Views: 1012760
Reputation: 6147
I experienced that .gitignore is ignored
working with Flutter project in VS Code on Windows 10.
I tried many of the above suggestions. Nothing helped.
Final solution: just delete .git
folder and start with a new repository.
.git
folder is located in the root of Flutter project and hidden by default.
Be sure to add folders and files to .gitignore
before the first commit.
Upvotes: -1
Reputation: 7302
If it seems like Git isn't noticing the changes you made to your .gitignore
file, you might want to check the following points:
There might be a global .gitignore
file that might interfere with your local one
When you add something into a .gitignore file, try this:
git add [uncommitted changes you want to keep] && git commit
git rm -r --cached .
git add .
git commit -m "fixed untracked files"
If you remove something from a .gitignore file, and the above steps maybe don't work, if you found the above steps are not working, try this:
git add -f [files you want to track again]
git commit -m "Refresh removing files from .gitignore file."
// For example, if you want the .java type file to be tracked again,
// The command should be:
// git add -f *.java
Upvotes: 367
Reputation: 41
I saw that a few of you already answered that but I don't know whether it was stated clearly.
In my case the problem appeared due to creating the .gitignore
file with echo commmand which resulted in file encoding being changed.
In order to fix that I had to open the text file, click save as and change the encoding in the bottom tab to UTF-8.
When I used the touch command to create the file and edit its contents via text editor the problem did not occur.
Upvotes: 2
Reputation: 335
Despite having tried the various suggestions in this post and others (e.g. Gitignore not working and gitignore not working - being ignored?) I couldn't get git to ignore the files/folders contained within my .gitignore.txt file.
I should stress that unlike many of the previous answers that address the problem whereby a file/directory that has already been previously committed is to be untracked, in my case, I encountered this problem prior to making my first commit (i.e. having only run git init
followed by git status
).
There were a number of other promising suggestions including:
but none were applicable or resolved my issue.
After playing around with different ways of creating a .gitignore.txt file I managed to figure out how to get it to work, although I can't say that I understand why. It would be interesting to know if anyone can offer an explanation.
For the benefit of those who may also find that the previous answers don't address their issue I'll describe what I tried, what didn't work and what did. Hopefully by doing so it may also shed light on the why. Note that I'm using Windows 10.
Attempt #1 (failed)
Creating the new txt file in Windows Explorer:
I ran git status
but the files/folders I wanted ignored were shown as untracked. I checked the file properties in Windows Explorer. As expected the filename was ".gitignore" and the file type was "Text Document (.txt)".
Note 1:
Several contributors have stated that the encoding must be ANSI (rather than UTF). In Notepad++ I've found that regardless whether I do Encoding -> ANSI, or Encoding -> Convert to ANSI + save, close the file, and re-open it (in Notepad++), when I check the encoding it always reports UTF-8. This was also the case for the .gitignore.txt file that eventually worked.
Attempt #2 (failed)
Creating the new txt file in Notepad++:
I ran git status
and as before all files/directories were listed under untracked files. As before the filename was ".gitignore" and the file type was "Text Document (.txt)".
Attempt #3 (succeeded)
With the same file (.gitignore.txt) still open in Notepad++:
I noticed that the file created appeared to be name-less in Windows Explorer. I checked the file's properties: the file name field was blank and the file type was "Text Document (.gitignore)". After ticking "File name extensions" in Windows Explorer (View -> File name extensions) the "name-less" file shows the ".gitignore" extension.
I ran git status
and this time the files/folders I wanted ignored were not listed as untracked files - success!
Opening the file in Notepad++ I noticed that the encoding was UTF-8, and the file name was identified as ".gitignore" (unlike in Windows Explorer).
So it appears there is subtlety in the way the txt file is created. Perhaps this is a peculiarity unique to Windows?
Upvotes: 2
Reputation: 2943
There are some great answers already, but my situation was tedious. I'd edited the source of an installed PLM (product lifecycle management) software on Win10 and afterward decided, "I probably should have made this a git repo."
So, the cache option won't work for me, directly. Posting for others who may have added source control AFTER doing a bunch of initial work AND .gitignore
isn't working BUT, you might be scared to lose a bunch of work so git rm --cached
isn't for you.
!IMPORTANT: This is really because I added git too late to a "project" that is too big and seems to ignore my .gitignore. I've NO commits, ever. I can git away with this :)
First, I just did:
rm -rf .git
rm -rf .gitignore
Then, I had to have a picture of my changes. Again, this is an install product that I've done changes on. Too late for the first commit of the pure master branch. So, I needed a list of what I changed since I'd installed the program by adding > changed.log
to either of the following:
PowerShell
# Get files modified since date.
Get-ChildItem -Path path\to\installed\software\ -Recurse -File | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-02-25')} | Select-Object FullName
Bash
# Get files modified in the last 10 days...
find ./ -type f -mtime -10
Now, I have my list of what I changed in the last ten days (let's not get into best practices here other than to say, yes, I did this to myself).
For a fresh start, now:
git init .
# Create and edit .gitignore
I had to compare my changed list to my growing .gitignore, running git status
as I improved it, but my edits in .gitignore are read-in as I go.
Finally, I've the list of desired changes! In my case it's boilerplate - some theme work along with sever xml configs specific to running a dev system against this software that I want to put in a repo for other devs to grab and contribute on... This will be our master branch, so committing, pushing, and, finally BRANCHING for new work!
Upvotes: 7
Reputation: 960
Lot of answers here but what worked for me is not altogether in any particular one , I am jotting all the steps one by one that needs to be done here in a simple manner :
Pre --- Take a backup of repo just in case. (I did not but may make you feel safer)
Upvotes: 1
Reputation: 161
Whenever I encounter the situation that git is tracking a file that is listed in .gitignore
, I use the following:
git update-index --skip-worktree <file_name>
Upvotes: 13
Reputation: 35861
Even if you haven't tracked the files so far, Git seems to be able to "know" about them even after you add them to .gitignore
.
WARNING: First commit or stash your current changes, or you will lose them.
Then run the following commands from the top folder of your Git repository:
git rm -r --cached .
git add .
git commit -m "fixed untracked files"
Upvotes: 3544
Reputation: 1971
My 30 cent trick:
git clean -f
(I tried git rm -r --cached .
but it did not work for me.)Warning: git clean -f will remove untracked files, meaning they're gone for good since they aren't stored in the repository. Make sure you really want to remove all untracked files before doing this.
May be you can try git clean -xdf
which removes ignored dirs and untracked files
HEAD
to the current position
git reset HEAD --hard
. check git status
.
Now create .gitignore
which in my cases wanted to ignore a folder called data
. So I wrote /data/
(initial /
is for file/folder, later /
is for folder only).
Upvotes: 0
Reputation: 590
PhpStorm (and probably some other IDE users), in my case problem was that I created and added file outside the project, through the finder.
I deleted that one, and recreated the same one but in PhpStorm project, with right-click -> New -> File, and it worked right away.
Upvotes: 0
Reputation: 9576
This might sound silly, but what solved my problem was realizing that .gitignore
is working correctly, even if it says deleted: yourfile
on git status.
I was going to ignore an error log file, to ignore any errors I caused, but save the ones caused by other developers in case they came in handy one day while debugging an odd problem. However, git does not let you "ignore" and also keep a file at the same time.
I wanted it to be "frozen in time", but git says it either gets tracked, or it is not allowed to be there at all.
Upvotes: 0
Reputation: 179
My problem was that I wrote down files to ignore with quotes " " separation not with slash /.
This did not work and was ignored by git :
"db.sqlite3"
"tdd_venv/"
This worked just fine :
/db.sqlite3
/tdd_venv/
I also checked my file encoding in windows with Notepad++. Encoding was set to UTF-8.
Upvotes: 2
Reputation: 1370
Mine wasn't working because I've literaly created a text document called .gitignore
Instead, create a text document, open it in Notepad++ then save as .gitignore
Make sure to pick All types (*.*) from the dropdown when you save it.
Or in gitbash, simply use touch .gitignore
Upvotes: 2
Reputation: 3383
I too have the same issue on Ubuntu, I created the .gitignore
from the terminal and it works for me
touch .gitignore
Upvotes: 2
Reputation: 143
Specifically for Windows users: If you have untracked files and clearing/removing the cached files is not working. Try opening PowerShell and converting the .gitignore file to UTF-8 encoding:
$Myfile = Get-Content .\.gitignore`
$Myfile | Out-File -Encoding "UTF8" .gitignore
You need to only do this once to encode the .gitignore file for that directory, and since the file is then encoded correctly, whenever you edit the file in the future it should work. I believe this is due to a glitch with GitHub not being about to read non UTF-8 encoding for a .gitignore file. As far as I'm aware this issue has not yet been resolved for Windows. It's not too big of a deal, just a pain to debug when it's not working.
Upvotes: 9
Reputation: 5976
I had this problem, with a .gitignore file containing this line:
lib/ext/
I just realized that in fact, this directory is a symbolic link to a folder somewhere else:
ls -la lib/ext/
lrwxr-xr-x 1 roipoussiere users 47 Feb 6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib
On the line lib/ext/
, Git actually looks for a folder, but a symbolic link is a file, so my lib
folder is not ignored.
I fixed this by replacing lib/ext/
by lib/ext
in my .gitignore file.
Upvotes: 6
Reputation: 3212
Another possible reason – a few instances of Git clients running at the same time. For example, "git shell" + "GitHub Desktop", etc.
This happened to me. I was using "GitHub Desktop" as the main client, and it was ignoring some new .gitignore settings: commit after commit:
Reason: the Visual Studio Code editor was running in the background with the same opened repository. Visual Studio Code has built-in Git control, and this makes for some conflicts.
Solution: double-check multiple, hidden Git clients and use only one Git client at a time, especially while clearing the Git cache.
Upvotes: 4
Reputation: 5760
I've created .gitignore using echo "..." > .gitignore
in PowerShell in Windows, because it does not let me to create it in Windows Explorer.
The problem in my case was the encoding of the created file, and the problem was solved after I changed it to ANSI.
Upvotes: 4
Reputation: 983
It is also a possibility that you edited the .gitignore
file with a sudo
command. I encountered the same issue and while executing the commands: git status
, I could still see the "should be ignored" files.
Upon editing with nano .gitignore
instead of sudo nano .gitignore
, I could see the correct reflection.
Upvotes: 2
Reputation: 703
For me it was yet another problem. My .gitignore file is set up to ignore everything except stuff that I tell it to not ignore. Like such:
/*
!/content/
Now this obviously means that I'm also telling Git to ignore the .gitignore file itself. Which was not a problem as long as I was not tracking the .gitignore file. But at some point I committed the .gitignore file itself. This then led to the .gitignore file being properly ignored.
So adding one more line fixed it:
/*
!/content/
!.gitignore
Upvotes: 3
Reputation: 6994
If you are a Notepad++ user, try doing the following:
Open your .gitignore file using Notepad++ and do:
Menu Edit → EOL Conversion → Windows Format → Save.
Try using git status
again and see if it works for you.
I have posted the answer to a similar question here.
Upvotes: 1
Reputation: 3062
My issue was (as OP suggested) a corrupt .gitignore file. I didn't believe that it was and ignored the possibility until everything else failed. The corruption didn't show up in vi
, but there were two bytes on the start of the file that caused the .gitignore file to be ignored. For me, these only showed up when I typed cat .gitignore
, which showed:
��# Built application files
*.apk
*.ap_
# ...
I have no idea how these ended up there, but recreating the file fixed the issue. A hex analysis of the corrupt file showed the following:
user@dev ~/project/myproject $ xxd -b .gitignore
00000000: 11111111 11111110 00100011 00000000 00100000 00000000 ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000 B.u.i.
Upvotes: 6
Reputation: 1547
One tricky thing not covered by the other answers here is that the .gitignore file won't work if you have inline comments, like this:
foo/bar # The bar file contains sensitive data so we don't want to make this public
So, if you do have comments like that, change them like this:
# The bar file contains sensitive data so we don't want to make this public
foo/bar
Upvotes: 3
Reputation: 1048
I just ran into this issue. The content within my .gitignore file continued to appear in the list of untracked files.
I was using this to create the ignore file:
echo "node_modules" > .gitignore
It turns out that the double quotations were causing the issue for me. I deleted the ignore file and then used the command again without quotes, and it worked as expected. I did not need to mess with the file encoding. I'm on a Windows 10 machine using Cmder.
Example:
echo node_modules > .gitignore
Upvotes: 8
Reputation: 591
In my case, it's because the files already exist in the repository and I'm trying to ignore it.
These are the things I did to fix the issue:
By then, any changes I made on those files were ignored.
I think you can't ignore files that already exist on the repository.
Upvotes: 25
Reputation: 898
Just remove the folder or file, which was committed previously in Git, by the following command. Then gitignore file will reflect the correct files.
git rm -r -f "folder or files insides"
Upvotes: 1
Reputation: 937
For me none of the previous answers worked. I had to copy .gitignore
text into the exclude.txt
file found at
<Your-project-folder>\.git\info
Once done, refresh your changes and all the untracked files are gone. Commit as usual.
Upvotes: 6
Reputation: 1259
As with the other solutions, commit first and be aware that you will lose any un-committed changes.
I had better results with this:
git rm -r --cached .
git reset HEAD --hard
git status
Note that the status shouldn't have any modified files now.
Upvotes: 37
Reputation: 4786
OK, so in my case the accepted solution did not work, and what worked is described here:
Is Visual Studio 2013 ignoring your .gitignore file?
In short:
ms-persist.xml
Upvotes: 6
Reputation: 7768
All the answers here are actually workarounds. You need to create the .gitignore file before you run git init
. Otherwise git
will never know you need to ignore those files, because they have been tracked already.
echo .idea/ >> .gitignore
git init
If you develop on a daily basis, I advise you to add your habitual ignored files to your ~/.gitignore_global
file. That way, git
will already know which files you (meaning "your user", since it's a file in your home directory) usually ignore.
Upvotes: 20