Yes, you're correct, it was a bug in my pre-commit hook. Thanks!
For posterity, the issue is that I had the following line:
git diff -z --cached --name-only | egrep -z '\.(pl|pm|t)$' | \
while read -d'' -r f; do ...
In Bash, when `read` is passed the `-d` option with a zero-length
string argument, read will split on null characters (`'\0'`). However,
I did not put a space between the `-d` option and the argument, so
it took the `-` in the next argument `-r` as the delimiter. My commit
includes Perl files with `-` characters in the name, which I had not
previously committed to this repo, which is why I only ran into the
problem now. I fixed it by changing the read command to
`read -r -d '' f`, which now has the crucial space between -d and
its argument, making the zero-length string a separate argument.
Robert Irelan | Server Systems | Epic | (608) 271-9000
From: Thomas Rast [mailto:tr...@student.ethz.ch]
Sent: Monday, March 04, 2013 2:59 PM
To: Robert Irelan
Subject: Re: "git commit" fails due to spurious file in index
Robert Irelan <rire...@epic.com> writes:
> Now, when I run 'git add admin_script/setup' to add the new directory
> to the repo and then try to commit, I receive the following message:
> $ git commit
> mv: cannot stat `admin_scripts/setup/2012/setup': No such file or
> The error message is correct in that `admin_scripts/setup/2012/setup`
> does not exist, either as a file or as a directory. However, I'm not
> attempting to add this path at all. Using grep, I've confirmed that
> the only place this path appears in any of my files is in `.git/index`.
To me that sounds like the message comes from a commit hook. Can you check if
you have anything in .git/hooks/, especially pre-commit?
There really isn't any other good reason why 'git commit' would call 'mv'
(plain mv, not git!).
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html