错误的计算哈希对象,内容为“ 1”字符?

时间:2019-03-16 18:44:20

标签: bash git hash git-bash

我有一个git文件(例如file1.txt),其中有一个字符1。
echo -e 1 | git hash-object --stdin => d00491...39d4d
但不能接受
echo -en 'blob 2\01\n' | shasum ==>a1ff5...f6df,因为它不将1视为字符,而将\01计算为单独的字符。=> blob 2

我发现这种类型的转换不适用于数字内容。

但是以字母开头就可以了!如。
echo -e 'blob 2\0w' | shasum ==> e556b8...52ef
echo w | git hash-object --stdin ==> e556b830c...052ef

从纯数字内容开始对calc哈希对象有什么想法吗?

1 个答案:

答案 0 :(得分:2)

echo -en 'blob 2\01\n' | cat -v

不产生您想要的内容,结果是blob 2^A而不是blob 2^@1

你想要的是

echo -en 'blob 2\00001\n' | cat -v
blob 2^@1

这是因为\0echo开始了一个数字序列,然后echo期望最多3位数字。也就是说,\01的{​​{1}}是1个字符,代码为1;要生成echo + \0,您需要对代码为0的字符使用1,然后下一个字符为1。

\0000

Voila!