为什么使用 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 ;)
时,我手头没有这个版本
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 ;)
时,我手头没有这个版本