How to stop tracking and ignore changes to a file in Git?
I have cloned a project that includes some .csproj
files. I don't need/like my local csproj
files being tracked by Git (or being brought up when creating a patch), but clearly they are needed in the project.
I have added *.csproj
to my LOCAL .gitignore
, but the files are already in the repo.
When I type git status, it shows my changes to csproj
which I am not interested in keeping track of or submitting for patches.
How do I remove the "tracking of" these files from my personal repo (but keep them in the source so I can use them) so that I don't see the changes when I do a status (or create a patch)?
Is there a correct/canonical way to handle this situation?
Just calling git rm --cached
on each of the files you want to remove from revision control should be fine. As long as your local ignore patterns are correct you won't see these files included in the output of git status.
Note that this solution removes the files from the repository, so all developers would need to maintain their own local (non-revision controlled) copies of the file
To prevent git from detecting changes in these files you should also use this command:
git update-index --assume-unchanged [path]
What you probably want to do: (from below @Ryan Taylor answer)
git update-index --skip-worktree <path-name>
The full answer is here in this URL: http://source.kohlerville.com/2009/02/untrack-files-in-git/
If you do git update-index --assume-unchanged file.csproj
, git won't check file.csproj for changes automatically: that will stop them coming up in git status whenever you change them. So you can mark all your .csproj files this way- although you'll have to manually mark any new ones that the upstream repo sends you. (If you have them in your .gitignore
or .git/info/exclude
, then ones you create will be ignored)
I'm not entirely sure what .csproj files are... if they're something along the lines of IDE configurations (similar to Eclipse's .eclipse and .classpath files) then I'd suggest they should simply never be source-controlled at all. On the other hand, if they're part of the build system (like Makefiles) then clearly they should--- and a way to pick up optional local changes (eg from a local.csproj a la config.mk) would be useful: divide the build up into global parts and local overrides.
This is a two step process:
Remove tracking of file/folder - but keep them on disk - using
git rm --cached
Now they do not show up as "changed" but still show as
untracked files in git status -u
Add them to .gitignore
上一篇: 修复Git分离的头部?
下一篇: 如何停止跟踪并忽略Git中文件的更改?