I have created a default version of a file included in a git repository. It's important that when someone clones the repository, they get a copy of this file. However, I would like to set git so that it ignores changes to this file later. .gitignore
works only on untracked files.
My motivation is that this file contains machine-specific information. I would like to provide default values, while allowing people to make local changes that won't get pushed back to the origin repository, creating merge conflicts when we pull new changes.
We are generally pretty lazy and use git add .
a lot, so I'm pretty sure if I can't tell git to ignore this file, changes to it will end up getting committed and pushed.
To summarize,
default_values.txt
that is added to my git repository and is included when someone clones that repository.git add .
should not add default_values.txt
to the commit.As many others have mentioned, a good modern solution is:
git update-index --skip-worktree default_values.txt
That will ignore changes to that file, both local and upstream, until you decide to allow them again with:
git update-index --no-skip-worktree default_values.txt
You can get a list of files that are marked skipped with:
git ls-files -v . | grep ^S
Note that unlike --skip-worktree
, the --assume-unchanged
status will get lost once an upstream change is pulled.