为什么提交哈希在以下玩具回购中有所不同?

时间:2015-06-03 20:10:25

标签: git

它在所有提交中都是相同的文件,只是在不同的分支中。我的理解是git不使用分支名来计算哈希值。

3 个答案:

答案 0 :(得分:1)

目前还不足以确定,但可能是因为您在不同时间提交了提交,或者对作者和/或提交者名称进行了轻微更改,和/或使用了不同的提交消息。

如果所有文件都相同,哈希应该是相同的。但是, commit 哈希是提交内容的SHA-1,提交内容如下所示:

tree 2d6f17582c301f3c19f64afbe70b629fcc68505b
parent 3dc5ce0a5686ede82b7ee20c895372f61a74f839
author Junio C Hamano <gitster@pobox.com> 1433188076 -0700
committer Junio C Hamano <gitster@pobox.com> 1433188076 -0700

Sixth batch for 2.5 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>

(这是git的当前主分支,截至我运行时git fetch)。请注意作者和提交者时间戳。

答案 1 :(得分:0)

根据this gist,使用以下所有信息计算提交SHA:

  • 提交的源代码树(对所有子树和blob进行解析)
  • 父提交sha1
  • 作者信息(姓名,电子邮件和时间)
  • 提交者信息(姓名,电子邮件和时间)
  • 提交消息

在您的情况下,提交时间可能不同,这将导致不同的提交ID。

要查看用于计算提交哈希的确切信息,您可以使用以下命令(将HEAD替换为您要查看数据的任何提交):

(printf "commit %s\0" $(git cat-file commit HEAD | wc -c); git cat-file commit HEAD)

您可以通过将上一个命令的结果传递给sha1sum来验证这一点。您应该获取用于代替HEAD的提交的完整ID。

要确切了解这两个提交之间的不同之处,您可以运行以下命令:

diff <(git cat-file commit 3fbf300) <(git cat-file commit 5bc715f)

如果树具有不同的ID,则可以运行git diff 3fbf300 5bc715f以准确找出每个提交中的文件之间的差异。

答案 2 :(得分:0)

尝试运行git cat-file commit <branch/commit/etc>。这是通过SHA1运行以生成提交ID(加上指示数据长度的标头)。

有关如何构造提交ID的详细信息,请参阅https://gist.github.com/masak/2415865