I'm surprised to find that git cat-file --batch, on a Linux system, strips the \r from an input like "HEAD:foo\r\n" It's obvious, of course, that it will remove the newline, and so this interface cannot be used to query about a filename that, for some horrible reason[1], contains a newline. But very surprising that it cannot be used for filename that contains a carriage return, at least on a non-Windows system. The docs for cat-file --batch say the list of objects is separated by linefeeds. I don't know if updating the docs is the best fix. (I'd be happy to use a -z if it had one.) -- see shy jo [1] aka "a large enough number of monkeys"