【发布时间】:2022-01-13 21:51:01
【问题描述】:
请注意以下简短场景(在 Powershell 中):
PS> git diff -U3 -r -M HEAD -- .\Metadata\LegacyTypeModules\xyz.Web.Main.draft.json | Out-File -Encoding ascii c:\temp\1.diff
PS> git apply --cached C:\temp\1.diff
error: patch failed: Metadata/LegacyTypeModules/xyz.Web.Main.draft.json:69
error: Metadata/LegacyTypeModules/xyz.Web.Main.draft.json: patch does not apply
但是,在 bash 中运行时,完全相同的命令可以工作:
$ git diff -U3 -r -M HEAD -- Metadata/LegacyTypeModules/xyz.Web.Main.draft.json > /c/Temp/2.diff
$ git apply --cached /c/Temp/2.diff
P11F70F@L-R910LPKW MINGW64 /c/xyz/tip (arch/1064933)
所以问题似乎发生了,因为 Powershell 使用 CRLF 终止通过管道的每一行,而 bash 保留原始行结尾。
我理解为什么会发生这种情况 - Powershell 使用对象进行操作,并且对象是字符串不包括 EOL 字符。写入文件时,Powershell 将对象转换为字符串(在字符串的情况下,转换是 nop)并使用默认的 EOL 序列来分隔行。
是不是说Powershell根本不能用在EOL敏感的场景中?
【问题讨论】:
标签: bash git powershell newline