为什么我没有得到相同的SHA-1?
我尝试了以下两个命令:
philip@X230:~/Desktop/learn_git$ echo 'what is up, doc?' | git hash-object --stdin
7108f7ecb345ee9d0084193f147cdad4d2998293
philip@X230:~/Desktop/learn_git$ echo 'blob 16u0000what is up, doc?' | openssl sha1
(stdin)= 5bc40a1cd865de7a0a4641d3d059b1216ed9042c
我想知道为什么我没有得到相同的 SHA-1
回答
两件事情:
-
echo 'what is up, doc?'输出17 个字符,包括末尾的换行符。您应该echo -n两次使用(假设为 bash)来删除末尾的换行符,或者将手动构建的 blob 的长度调整为 17。 -
你的
u0000逃逸是无效的(测试它,echo 'blob 16u0000what is up, doc?'在没有管道进入 sha1 的情况下运行到控制台)。您需要-e选项(再次假设 bash)来使 echo 解释任何转义。
如果你这样做
echo -e 'blob 17u0000what is up, doc?' | openssl sha1
结果是
(stdin)= 7108f7ecb345ee9d0084193f147cdad4d2998293
这git hash-object很好匹配。