git 1.7.12
I want to mark all files below a given directory as assume-unchanged.
1) git update-index --assume-unchaged dir/
gives "Ignoring path."
2) git update-index --assume-unchaged dir/*
quickly fails because it will encounter files which are not being tracked, hence it gives "fatal: Unable to mark file" and quits.
3) Try generating a list of files to mark. cd
into the desired directory and then run git ls-files | tr '\n' ' ' | git update-index --assume-unchanged
. This produces no error message, but it does not successfully mark the files. The first portion of the command, git ls-files | tr '\n' ' '
, correctly produces a space delimited list of all the files I want to mark. If I copy and paste the output of that command onto the command-line, then the git update-index
command works. What is not working with the pipes?
No, it is not sufficient for me to add dir
to .gitignore. I need these files to be in the repository, but undesired changes will be made locally that need to be ignored so that users can do pulls.
The
find
command from GNU Findutils has a-exec
option which removes most of the hassle of usingxargs
, 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 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 it's command line, not on it's standard input.Step 1:
cd
into the folder you want to assume is unchanged,Step 2:
You can do either this:
or
Although, with either case, file names with spaces will be problematic. If you have those, you can use this:
Edit: incorporated input from @MatthewScharley regarding
git ls-files -z
.Windows Commands
Add the directory name to
.git/info/exclude
. This works for untracked files.Yeap,
works with files only, not with directories. I think, one of faster ways: