Perhaps a duplicate, but haven't found an answer to this question.
We have a repository, and the repository contains some tracked files, for example, the ".gitignore" file, as well as "conf" folder.
I want to exclude tracking this file and folder because it contains changes that will only work on my machine, and where I don't want to disrupt the settings of others by committing my changes to these config files.
Adding this file and folder in ".gitignore" doesn't help since it still being tracked.
How can I avoid tracking these changes in these files?
What you want is setting the flag assume-unchanged
. You can use git update-index
for that purpose:
git update-index --assume-unchanged .gitignore
Later, if you want to unset the flag to commit the changes on the fil, use
git update-index --no-assume-unchanged .gitignore
For more information, refere to git doc:
--[no-]assume-unchanged
When this flag is specified, the object names recorded for the paths are not updated. Instead, this option sets/unsets the "assume unchanged" bit for the paths. When the "assume unchanged" bit is on, the user promises not to change the file and allows Git to assume that the working tree file matches what is recorded in the index. If you want to change the working tree file, you need to unset the bit to tell Git. This is sometimes helpful when working with a big project on a filesystem that has very slow lstat(2) system call (e.g. cifs).
Git will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
EDIT
To apply the flag on folder, you need to execute the command for each file in the folder. See this answer for hints to perform this task automatically (if your folder contains many files). Example:
cd /path/to/the/folder
git ls-files -z | xargs -0 git update-index --assume-unchanged