Reputation: 4255
I added the following line to .gitignore
:
sites/default/settings.php
but when I type git status
it shows the file as unstaged file.
What's the problem? All other patterns work well.
Upvotes: 342
Views: 281237
Reputation: 2068
I run into this, it's an old question, but I want that file to be tracked but to not track it on certain working copies, to do that you can run
git update-index --assume-unchanged sites/default/settings.php
To unset the flag:
git update-index --no-assume-unchanged sites/default/settings.php
Upvotes: 176
Reputation: 2746
my solution is
Upvotes: 0
Reputation: 387825
Make sure that your .gitignore
is in the root of the working directory, and in that directory run git status
and copy the path to the file from the status output and paste it into the .gitignore
.
If that doesn’t work, then it’s likely that your file is already tracked by Git. You can confirm this through the output of git status
. If the file is not listed in the “Untracked files” section, then it is already tracked by Git and it will ignore the rule from the .gitignore
file.
The reason to ignore files in Git is so that they won't be added to the repository. If you previously added a file you want to be ignored, then it will be tracked by Git and the ignore rules matching it will be skipped. Git does this since the file is already part of the repository.
In order to actually ignore the file, you have to untrack it and remove it from the repository. You can do that by using git rm --cached sites/default/settings.php
. This removes the file from the repository without physically deleting the file (that’s what the --cached
does). After committing that change, the file will be removed from the repository, and ignoring it should work properly.
As pointed out by @display-name below, sometimes it's neccessary to do a git add .
after the git rm --cached
to properly rebuild the index.
Upvotes: 688
Reputation: 794
I had the same problem. On Win10 I used the Geany editor and it uses UNIX line-ends. Now I created my .gitignore using notepad.exe and all is well.
Upvotes: -1
Reputation: 3913
One thing that I think has been missed in the excellent answers here is the existence of another .gitignore or multiple of them.
In a case, I had cloned a repo and could not figure out why a "ignored" file was being added again when running git add. It worked out that there was another .gitignore in a subfolder and that was overriding the one in the root folder.
/.gitignore
/some-folder/.gitignore
/some-folder/this-file-keeps-getting-staged
The
root /.gitignore
was ignoring this-file-keeps-getting-staged
The
/some-folder/.gitignore
did not have a specification to ignore "this-file-keeps-getting-staged
" file.
And hence the issue.
One of the things is to simply search for multiple .gitignore
files in the hierarchy. And figure out the rules as they apply.
Upvotes: 3
Reputation: 3667
I had the same problem.
Files defined in .gitingore
where listed as untracked files when running git status
.
This was because the .gitignore
file was saved in UTF-16LE
encoding, and not in UTF8
encoding.
After changing the encoding of the .gitignore
file to UTF8
it worked.
Upvotes: 29
Reputation: 15700
One tricky problem is that If you do something like echo node_modules >> .gitignore
, it won't work. The windows terminal saves the file in UCS-2 LE BOM
and git doesn't seem to accept that.
You can open the file with Notepad
and save it with UTF-8
encoding
It Works now.
I think they need to fix this since echo "filetoignore" >> .gitignore
actually seems a handy thing to do
Upvotes: 1
Reputation: 1476
Please use this command
git rm -rf --cached .
git add .
Sometimes .gitignore files don't work even though they're correct. The reason Git ignores files is that they are not added to the repository. If you added a file that you want to ignore before, it will be tracked by Git, and any skipping matching rules will be skipped. Git does this because the file is already part of the repository.
Upvotes: 111
Reputation: 127
I tried most commands above on VS Code terminal and I got errors like:
fatal: pathspec '[dir]/[file]' did not match any files
I opened the project on GitHub Desktop and ignored from there and it worked.
Upvotes: 2
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. VS Code has built-in git control, and this makes some conflicts.
Solution: double-check multiple, hidden git clients and use only one git client at once, especially while clearing git cache.
Upvotes: 5
Reputation: 243
There are instances e.g. Application Configuration files, which I want tracked in git (so .gitignore will not work), but that I need to change for local settings. I do not want git to manage these files or show them as modified. To do this I use skip-worktree:
git update-index --skip-worktree path/to/file
You can confirm files are skipped by listing files and checking for lines starting with S for skipped
git ls-files -v | grep ^S
If in the future you want to have git manage the file locally again simply run:
git update-index --no-skip-worktree path/to/file
Mescalito above had a great answer, that led me down the right track but
git update-index --assume-unchanged file/to/ignore.php
Has a contract with git that in which : the user promises not to change the file and allows Git to assume that the working tree file matches what is recorded in the index.
However, I change the content of the files, so in my case --skip-worktree is the better option.
Toshiharu Nishina's website provided an excellent explanation of skip-worktree vs assume-unchanged: Ignore files already managed with Git locally
Upvotes: 7
Reputation: 9644
What I did it to ignore the settings.php file successfully:
I think if there's the committed file on Git then ignore doesn't work as expected. Just delete the file and commit. Afterwards it'll ignore.
Upvotes: 7
Reputation: 21
Just in case anyone in the future has the same problem that I did:
If you use the
*
!/**/
!*.*
trick to remove binary files with no extension, make sure that ALL other gitignore lines are BELOW. Git will read from .gitignore from the top, so even though I had 'test.go' in my gitignore, it was first in the file, and became 'unignored' after
!*.*
Upvotes: 2
Reputation: 637
Make sure the .gitignore does not have a extension!! It can't be .gitignore.txt, in windows just name the file .gitignore. and it will work.
Upvotes: 2
Reputation: 22771
.gitignore will only ignore files that you haven't already added to your repository.
If you did a git add .
, and the file got added to the index, .gitignore won't help you. You'll need to do git rm sites/default/settings.php
to remove it, and then it will be ignored.
Upvotes: 59
Reputation: 636
I just tried this with git 1.7.3.1, and given a structure like:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
where repo
thus is the "root" mentioned above (I would call it the root of your working tree), and .gitignore
contains only sites/default/settings.php
, the ignore works for me (and it does not matter whether .gitignore
is added to the repo or not). Does this match your repo layout? If not, what differs?
Upvotes: 1