.gitignore does not work - file is still being tracked
GitGitignoreGit Problem Overview
I've a .gitignore
file at the root of my repo. The .gitignore
file has the following pattern to exclude the compiled Python files and that is the only line in the file.
*.pyc
Now when i do the following at the root of the repo.
git init
git add .
git status
It shows that it still tracks the .pyc
file and tries to add it as new file. See output below.
System info: Windows 7, cygwin
Note: This issue is CLEARLY not about the ignored file being already tracked. I also tried both DOS- and Unix-style line endings on the .gitignore
file.
git status
gives:
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitignore
# new file: feedapp/__init__.py
# new file: feedapp/appconfig.py
# new file: feedapp/appconfig.pyc
How do I troubleshoot this further?
Git Solutions
Solution 1 - Git
.gitignore
only applies to untracked files. If you are tracking a .pyc
then .gitignore
won't apply. Remove the .pyc
with git rm
and next time you do a git status
it (and any others) won't show up in the list of untracked file and nor will it be automatically added.
Otherwise if you need to ignore a file already under version control, update the index to ignore changes to files already under version control:
git update-index --assume-unchanged <files>
For more information please see git-update-index(1) Manual Page, the related answer to .gitignore file not ignoring and the related answer to question (GIT: Ignoring Version-Controlled Files).
Solution 2 - Git
man gitignore
:
A gitignore file specifies intentionally untracked files that git should ignore. Note that all the gitignore files really concern only files that are not already tracked by git
git rm file
will stop tracking them. I can't find a way to remove all ignored files from the repo.
As you point out, the files don't appear to already exist in the repo. In that case, your git
's behaviour matches neither the documentation or the behaviour of mine, and I can't help you.
$ mkdir foo
$ cd foo
/home/ikegami/foo
$ mkdir feedapp
$ touch feedapp/__init__.py
$ touch feedapp/appconfig.py
$ touch feedapp/appconfig.pyc
$ echo '*.pyc' > .gitignore
$ git init
Initialized empty Git repository in /home/ikegami/foo/.git/
$ git add .
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitignore
# new file: feedapp/__init__.py
# new file: feedapp/appconfig.py
#
$
Perhaps you did
git init
git add .
echo '*.pmc' >> .gitignore
git init
git add .
in which case you can fix the problem using
git rm --cached -r .
git add .
Solution 3 - Git
I had the exact same problem. I found out that running "someText" > .gitignore
made a file with a weird encoding. I changed it to UTF-8, then all worked fine.
Solution 4 - Git
I have had exactly the same problem--even if I prepare a .gitignore file before the first time I add anything. And I found the problem was in the blank space in my ignore file. DO NOT add any white space in your ignore file and try again. I think everything will just work fine. Good luck
Solution 5 - Git
Check the line endings on your .gitignore file. In an OS X repo, mine was using CR line endings. Everything worked again after switching over to LFs.
perl -p -e 's/\r/\n/g' < .gitignore > .gitignore-new
mv .gitignore-new .gitignore
Console jockeys will likely want to use sed
instead.
Background: I had copied my working copy from a Windows repository after a power failure.