git - 为什么使用 git 从 powershell 复制的二进制文件与原始文件不同?
问题描述
Powershell 代码
Set-Location 'C:\Users\jdyun\Desktop\fsef' #Test git repository
git show 18ba8db7d3ddf07a432d5e5ea141a2b779d33eb6:BugTrap.dll > CopiedBugTrap.dll
使用 Bash
用 git-bash 复制的二进制文件是相同的二进制文件大小
但是,使用powershell,原始文件和复制文件的文件大小不同
我想知道为什么会这样。
解决方案
Powershell 中的“管道”和“重定向输出”有点混乱,并且不像在 bash 中那样工作(有些人会简单地说:不起作用)。
您可以阅读@iRon 建议的问题的答案:
根据您的设置:
- 如果文件不以 a 开头
BOM
,powershell 可能会尝试将输入流中的字节(就好像它们是 ASCII 文本一样)转换为目标编码, - 如果您不调整 powershell 设置,则目标编码默认为
UTF16
, - 即使您将默认输出编码设置为
UTF8
,我也永远无法摆脱BOM
它会在输出开头如此有用地插入, - ETC ...
底线是:
- 如果你想使用“提取文件”
git show commit:file > content
,请坚持使用 bash。 - 当然,同时拥有两个版本的另一种方法是重命名文件的当前版本,然后运行
git checkout commit -- file
.
引用另一个答案:似乎有一个“Powershell Core”版本应该可以解决大多数这些问题;当我使用 Windows 时,我没有足够的幸运手头有这个版本;)
推荐阅读
- r - 具有相关结构的 nlme 不适合并崩溃 R
- java - 函数 isAssignableFrom 在 Java 中无法正常工作
- angular - Angular serviceworker 并行请求
- android - Jetpack Navigation:如何从一个嵌套图的子节点导航到另一个嵌套图的子节点?
- php - 如何根据区域而不是国家限制 WooCommerce 运输扩展
- java - 使用 jdbcTemplate 创建表作为带参数的选择
- python - 图表之间的差异
- angular12 - 为什么我在 angular12 的 core.js 文件中出现错误
- javascript - 是否可以在反应中监控dispath完成
- terraform - 我如何简单地引用 terraform 中的实例?