git update-index --assume-unchanged on directory
The find
command from GNU Findutils has a -exec
option which removes most of the hassle of using xargs
, although its syntax is a little special. It does however deal perfectly with filenames with spaces.
This command will get git to assume all files in and under the listed directory are unchanged:
find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;
Find takes every argument after -exec
until ;
(which you have to escape lest your shell eats it) and runs it once for each file found, while replacing {}
(again, single quoted so your shell won't eat it) with the found file's name.
Using find
's matching criteria (maximum recursion depth, whether the match is a file or is a directory, whether the filename matches an expression) and -exec
you can do all sort of powerful things.
Not sure about other implementations of the find
command. YMMV.
git update-index
wants the file names on its command line, not on its standard input.
Step 1:
cd
into the folder you want to assume is unchanged
Step 2:
You can do either this:
git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')
or
git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged
Although, with either case, file names with spaces will be problematic. If you have those, you can use this:
git ls-files -z | xargs -0 git update-index --assume-unchanged
Edit: incorporated input from @MatthewScharley regarding git ls-files -z
.
Windows Commands
Note: If you're on windows, use Git Bash to run these commands
Add the directory name to .git/info/exclude
. This works for untracked files.