e65ff9625f
Git for Windows ships core.autocrlf=true in its system config, which renormalizes this repo's LF text files to CRLF in the working tree. install.ps1 pins core.autocrlf=false on the managed clone for that reason (#67730), but a checkout created before that landed never got the pin -- and cannot get it, because hermes-setup.exe resolves install.ps1 by an immutable build-time commit pin and reuses the cached script forever. A Windows install from May 2026 still runs the May install.ps1 no matter how many times it updates. `hermes update` ships with the checkout itself, so it is the only path left that reaches those installs. The pin and the cleanup have to be one operation. Under autocrlf=true git compares normalized content, so a CRLF working tree reads clean; pinning alone would expose every tracked text file as modified and hand the very next update an autostash and pop of the whole tree -- strictly worse than the state it set out to fix. So the tree is evaluated as it would look pinned (git -c, nothing persisted), the files whose only difference is the line ending are restored, and the pin is written only once that is verified clean. A checkout we cannot fully normalize is left exactly as it was found. Files still dirty under --ignore-cr-at-eol are never touched, so a real edit survives even when it also got renormalized. The restore takes its pathspec over stdin because a fully renormalized checkout is thousands of paths, well past the Windows command-line limit.