Git Hash-Object在PowerShell,CMD和Bash中产生不同的SHA1



我认为SHA1值与平台无关。我今天遇到了这个,希望我可以在这里得到一些澄清。

我的测试字符串是:'Apple Pie'

bash:

echo 'Apple Pie' | git hash-object --stdin
23991897e13e47ed0adb91a0082c31c82fe0cbe5

在CMD中(Windows 10(:

echo 'Apple Pie' | git hash-object --stdin
f554ff1fdde0e3c2ca9f67849791456302b5c12b

在PowerShell 5.0(Windows 10(中:

echo 'Apple Pie' | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053

我现在很困惑GIT如何在这里工作,因为文件内容的SHA1密钥在不同的环境中有很大不同,如果我将一个项目插入我的Linux机器中,该项目是否会起作用?这种行为通常在git还是SHA1中?

所有三个值无疑都是正确的。您看到的是echo在三个命令解释器中不是同一命令!

$ printf 'Apple Pien' | git hash-object --stdin
23991897e13e47ed0adb91a0082c31c82fe0cbe5
$ printf 'Apple Piern' | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053

编辑:Windows 10 CMD可以通过:

以bash(获取相同的哈希(模拟
$ printf "'Apple Pie' rn" | git hash-object --stdin
f554ff1fdde0e3c2ca9f67849791456302b5c12b

感谢另一个人的提示。

我在执行CMAKE项目时遇到了类似的问题。我发现您可以通过添加--path /选项来创建一致性。根据GIT文档,--path将对象像位于给定路径一样,如果文件真正在那里,则使用任何过滤器。

由于奇怪的报价解析,它对echo问题不起作用,并且它仍然无法与CMD中的单个引号一起使用,但是它将适用于大多数程序的输出。

就我而言,我使用了cmake -E echo命令代替echo,然后将其管道输送到git hash-object --path / --stdin并能够获得一致的哈希。

bash:

cmake -E echo "Apple Pie" | git hash-object --path / --stdin
23991897e13e47ed0adb91a0082c31c82fe0cbe5

在CMD中:

cmake -E echo "Apple Pie" | git hash-object --path / --stdin
23991897e13e47ed0adb91a0082c31c82fe0cbe5

在PowerShell中:

cmake -E echo "Apple Pie" | git hash-object --path / --stdin
23991897e13e47ed0adb91a0082c31c82fe0cbe5

最新更新