git - 为什么我没有得到相同的 SHA-1?

我尝试了以下两个命令:

philip@X230:~/Desktop/learn_git$ echo 'what is up, doc?' | git hash-object --stdin
7108f7ecb345ee9d0084193f147cdad4d2998293

philip@X230:~/Desktop/learn_git$ echo 'blob 16\u0000what is up, doc?' | openssl sha1
(stdin)= 5bc40a1cd865de7a0a4641d3d059b1216ed9042c

我想知道为什么我没有得到相同的 SHA-1

最佳答案

两件事:

  1. echo 'what is up, doc?' 输出 17 个字符,包括末尾的换行符。您应该两次都使用 echo -n(假设是 bash)来删除末尾的换行符,或者将手动构建的 blob 的长度调整为 17。

  2. 你的 \u0000 转义是无效的(测试它,运行 echo 'blob 16\u0000what is up, doc?' 到控制台而不用管道进入 sha1 ).您需要 -e 选项(同样假设为 bash)来使 echo 解释任何转义。

如果你这样做

echo -e 'blob 17\u0000what is up, doc?' | openssl sha1

结果是

(stdin)= 7108f7ecb345ee9d0084193f147cdad4d2998293

很好地匹配 git hash-object

https://stackoverflow.com/questions/65160623/

相关文章:

ansible - 删除文件夹文件夹内早于 x 天的文件

list - 如何将列表合并到 Elixir 中的元组列表中?

git - Git 中基于内容的寻址有什么好处?

python - 如何在输出文件中返回输入文件的第 k 个元素?

google-apps-script - 无法读取 null 的属性 'getSheetByName

xml - 如何使用 ConvertTo-Xml 和 Select-Xml 加载或读取 XML 文件

linux - 如何使用 xargs 将 ls 通过管道传输到 cat 中,以便列出文件名?

java - `Thread.sleep` 与 Project Loom for Java 中的虚拟

reactjs - 类型 'onClick' 上不存在属性 '{ children?: ReactN

linux-kernel - linux cdc_ecm 驱动程序与 rndis 驱动程序