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