为什么使用 git 从 powershell 复制的二进制文件与原始文件不同?

Why a binary file copied from powershell using git is different from original file?

Powershell 代码

Set-Location 'C:\Users\jdyun\Desktop\fsef'  #Test git repository
git show 18ba8db7d3ddf07a432d5e5ea141a2b779d33eb6:BugTrap.dll > CopiedBugTrap.dll

Copy from Powershell git command

使用Bash

Copy from Git-Bash git command

复制的二进制文件 git-bash 的二进制文件大小相同

但是,使用 powershell,原始和复制的文件大小不同

我想知道为什么会这样。

Powershell 中的“管道”和“重定向输出”有点乱,而且不像 bash 那样工作(有些人会简单地说:不起作用)。

您可以阅读@iRon 提出的问题的答案:

取决于您的设置:

  • 如果文件不是以 BOM 开头,powershell 可能会尝试将输入流中的字节转换为目标编码,就好像它们是 ASCII 文本一样,
  • 如果您不调整 powershell 设置,目标编码默认为 UTF16
  • 即使您将默认输出编码设置为 UTF8,我也永远无法摆脱 BOM,它会非常有帮助地插入输出的开头,
  • 等...

底线是:

  • 如果您想使用 git show commit:file > content“提取文件”,请坚持使用 bash。
  • 另一种同时拥有两个版本的方法,当然是重命名文件的当前版本,运行 git checkout commit -- file.

引用另一个答案:似乎有一个“Powershell Core”版本应该可以解决大部分这些问题;当我使用 Windows ;)

时,我手头没有这个版本