首页 > 解决方案 > 为什么使用 git 从 powershell 复制的二进制文件与原始文件不同?

问题描述

Powershell 代码

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

从 Powershell git 命令复制

使用 Bash

从 Git-Bash git 命令复制

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

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

我想知道为什么会这样。

标签: gitpowershellcommandshowgit-bash

解决方案


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

您可以阅读@iRon 建议的问题的答案:

将 PowerShell 的默认输出编码更改为 UTF-8

根据您的设置:

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

底线是:

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

引用另一个答案:似乎有一个“Powershell Core”版本应该可以解决大多数这些问题;当我使用 Windows 时,我没有足够的幸运手头有这个版本;)


推荐阅读