git .ignore not working in a directory

I have the following .gitignore file

# file named .gitignore

system/application/config/database.php
system/application/config/config.php
system/logs
modules/recaptcha/config/*

However when I add any changes in config and recapcha.php, git status warns me as following. When I add any changes to database.php. it does not show it in status

shin@shin-Latitude-E5420:/var/www/myapp$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   modules/recaptcha/config/recaptcha.php
#   modified:   system/application/config/config.php
#
no changes added to commit (use "git add" and/or "git commit -a")

How can I fix this?

Thanks in advance.

I am using git version 1.7.5.1 on Ubuntu 11.04


Solution 1:

The files are already stored in your local commit tree. You'll need to first remove them from the repository. This can be done via:

git rm --cached system/application/config/config.php modules/recaptcha/config/recaptcha.php

After that you'll need to make one more commit and you're good to go.

Solution 2:

Do the following to trigger the gitignore

Step 1: Commit all your pending changes in the repo which you want to fix and push that.

Step 2: Now you need to remove everything from the git index in order to refresh your git repository. This is safe. Use this command:

git rm -r --cached .

Step 3: Now you need to add everything back into the repo, which can be done using this command:

git add .

Step 4: Finally you need to commit these changes, using this command:

git commit -m "Gitignore issue fixed"

Solution 3:

If your file is already in git before you add the directory to .gitignore git will keep tracking it. If you don't want it, do a "git rm" to remove it first.

Solution 4:

I'm guessing yout .gitignore is not in the root of your working tree.

If you put a .gitignore in the same directory as system/application/config/config.php you can just use

echo config.php >> system/application/config/.gitignore

The paths are relative to the current directory (or: .gitignore is a per-directory exclude/include file).

See man git-ignore