English 中文(简体)
.gitignore doesn t ignore files
原标题:

My .gitignore file gets ignored and the files which should be ignored are still visible.

user@host ~/workdir % git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   .htaccess
#       modified:   application/controllers/statistics.php
#
no changes added to commit (use "git add" and/or "git commit -a")
user@host ~/workdir % cat .gitignore
.htaccess
application/config/config.php
application/config/database.php
user@host ~/workdir %

The files are in version control, but with sensible changes I dont want to push. git rm ... is not an option because the files should be in version controll (with other settings in the files). I just dont want to push my changes on this files.

最佳回答

after anybug s steps noted here my git still kept track of .htaccess and this helped:

git update-index --assume-unchanged .htaccess

To revert back:

git update-index --no-assume-unchanged .htaccess
问题回答

i had same problem: i wanted different .htaccess file per repository then i couldn t because htaccess file had already been added to repository. It s working now, i can change any of the .htaccess file from any version without getting git pushing them. Marc is right when he says "You need to remove it first, before it can be ignored. This can be done using git rm".

i proceeded in this order:

  • backup your .htaccess file somewhere
  • remove .htaccess file using git rm .htaccess
  • commit this change (.htaccess deletion)
  • push it (git push)

this will obviously remove your .htaccess file

  • then edit .gitignore and add /.htaccess
  • commit then push it
  • recreate your .htaccess file by restoring your previous backup

then you re done: whatever changes you make into .htaccess won t be pushed anymore. The hard part is following steps order...

hope this is clear

Since you want to:

  • keep .htaccess in the Git repo (no git rm)
  • have local sensitive data in it

use a filter driver which will:

  • during the checkout phase, complete the .htaccess with private data
  • during the commit phase clean the .htaccess from all sensitive data

content filter driver

you can then version an encrypted file that your smudge script will:

  • be the only one to decrypt
  • use in order to complete the classic (and pushed/pulled) .htaccess file.

You can version that encrypted sensible data in a special branch you won t push.
Even if you did push that file somehow, the damage would be limited, since only your workstation has the private key needed to decrypt said file.

Suppose the below is the content of .gitignore file. Here, .htaccess is in the project s root directory.

/.htaccess
application/config/config.php
application/config/database.php

Let s run the below command to ignore the .htaccess, config.php and database.php files.

badelal143@gmail.com:work-dir$ git update-index --assume-unchanged .htaccess
badelal143@gmail.com:work-dir$ git update-index --assume-unchanged application/config/config.php
badelal143@gmail.com:work-dir$ git update-index --assume-unchanged application/config/database.php

If you want to start tracking it again:

badelal143@gmail.com:work-dir$ git update-index --no-assume-unchanged path/to/file

e.g.

badelal143@gmail.com:work-dir$ git update-index --no-assume-unchanged .htaccess

It seems that the .htaccess file has already been added to the version control. You need to remove it first, before it can be ignored. This can be done using git rm

Ignoring files in git doesn t mean that you won t push them. It means that you won t version control them. If you don t want to push then, I suggest you create a local branch which will contain stuff for the local machine and then merge necessary changes to a branch which you ll push to remote.

I think you ve already added your files and are now trying to ignore them.

I do this all the time. I start with configuration files in my repo then decide that I don t want them in there.

You can remove something from your repo by using

git rm --cached <<filename>>

This one bugged me for days. The .htaccess file is already under version control and has been modified.





相关问题
Tracking Versions, Builds, Revisions, with TortiseSVN

I am the sole developer on a project and have been using tortoiseSVN for quite a while. Now Id like to start getting version information working correctly in the project I.E. show Major Version, Minor ...

Tips on upgrading CVS to git/hg?

We still use CVS, I use git and hg for my personal use though I m still a novice at both, but I realize they re much more modern and better, faster, distributed, etc. It s just everyone is so ...

How to handle different csproj [closed]

I am working in a team of five. We are working on a C# application with five csprojects. The problem is that for each csproject, each of my colleagues has their own ideas on how to reference a DLL; ...

Changing username in SVN+SSH URI on the fly in working copy

I am using SVN+SSH to check out a working copy of repository from an SVN server on which all developers are members of a developer group and have full read/write permissions on the repository ...

How to search for file in subversion server?

Is there a way to search for a file in a subversion repository? Something similar to Unix find command, with which I can find the location of a file in a repository. I know there is svn list, but ...

热门标签