我尝试了以下两个命令:
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
最佳答案
两件事:
echo 'what is up, doc?'
输出 17 个字符,包括末尾的换行符。您应该两次都使用 echo -n
(假设是 bash)来删除末尾的换行符,或者将手动构建的 blob 的长度调整为 17。
你的 \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/
相关文章:
list - 如何将列表合并到 Elixir 中的元组列表中?
python - 如何在输出文件中返回输入文件的第 k 个元素?
google-apps-script - 无法读取 null 的属性 'getSheetByName
xml - 如何使用 ConvertTo-Xml 和 Select-Xml 加载或读取 XML 文件
linux - 如何使用 xargs 将 ls 通过管道传输到 cat 中,以便列出文件名?
java - `Thread.sleep` 与 Project Loom for Java 中的虚拟