【发布时间】:2023-01-25 00:17:09
【问题描述】:
我在 git 上提交了两个具有相同内容(“hello”)的文件(note1a.txt 和 note1b.txt)。鉴于内容相同,我希望 SHA-1 哈希值相同。但是他们有不同的哈希值(见下图)。为什么是这样?
我正在使用 Android Studio GUI。
【问题讨论】:
-
原因可能有很多,但归根结底都是“内容不一样”。检查 hexdump(可能使用 IntelliJ 插件)以查看差异。第一个散列是我对末尾没有换行符的普通旧 ASCII 文件的期望。
-
Git SHA-1 不仅包括提交文件的内容,还包括更多信息,如提交者姓名和提交日期。请参阅stackoverflow.com/a/68806436/14967413(“获取提交哈希”标题)。
-
@user14967413:那些不是提交哈希,而是对象 ID(也在您发布的链接中描述)。它们只是文件的内容(和一个固定的前缀)。 IE。如果这两个值不同,则内容的文件做不同。
-
它们是 git 对象 ID。它们不是 Android Studio 发明的任何东西。他们只是不是 git提交 ID. git 中有不止一种类型的哈希/id。而 Android Studio 展示的不止一个。尝试运行
echo -n hello > hello.txt ; git hash-object hello.txt,您会看到输出包含第一个散列作为前缀。我有点惊讶我必须向您解释这种差异,因为您提供的链接中对此进行了准确解释。 -
据我所知,它们确实是对象 ID。我可以重现第一个。我仍然相信第二个文件实际上有不同的内容(不可见的控制字符,看起来像它们的 ascii 等效字符,......)。使用十六进制查看器/编辑器检查以验证内容的不同之处。