Git skip-worktree and how I used to hate config files
I’m working on a large-ish PHP project right now and there’s always a handful of config files that I need set up differently on my local vagrant box than on production.
Say hello to:
git update-index <file_name>
When update-index is told about a file, it clears any unmerged or needs updating state. It won’t show up on your git status anymore. Handy dandy. To make the incognito status more permanent, just add the skip-worktree flag:
git update-index --skip-worktree <file_name>
When a file is marked as skip-worktree, git will read it as if it were up to date. Any changes made to the file will not be read. The file will be updated on a pull if the upstream file was changed. Git will output a conflict if both the local and upstream file are changed.
Removing the update-index flag:
git update-index --no-skip-worktree <file_name>
List all flagged files:
git ls-files -v|grep '^h'