Git: How to ignore changes to a tracked file?
I recommend naming the source-controlled file differently than its actual expected name. For example, if the file is normally named config.json
, then name your example file config.json.dist
and commit this file. Then add config.json
to your .gitignore
file. Your devs would simply cp config.json.dist config.json
after cloning, and then edit it as required, making subsequent commits without having to worry about accidentally changing the default file or forgetting to toggle some setting on and off all the time.
You might even edit your code to search for config.json
first, and if that doesn't exist, fall back to config.json.dist
. This would allow the devs to work without even performing the copy step. (This is how PHPUnit works.)
One may use git update-index --skip-worktree FILE
for this purpose.
It is similar to --assume-unchanged
but, unlike --assume-unchanged
, is not just an unpredictable performance trick.
To cancel --skip-worktree
effects and unset the flag use --no-skip-worktree
.
Downsides
- This flag is for local repository only and cannot be pushed to the remote. Thus every clone that needs to ignore the file should do it manually.
- You may face conflicts when switching to another branch or using
git pull
. (more details)
You can use git update-index --assume-unchanged <file>
And if you want to track it again use git update-index --no-assume-unchanged <file>