Wie wird der Git-Hash berechnet?

Ich versuche zu verstehen, wie Git den Hash von Refs berechnet.

$ git ls-remote https://github.com/git/git  

....
29932f3915935d773dc8d52c292cadd81c81071d    refs/tags/v2.4.2
9eabf5b536662000f79978c4d1b6e4eff5c8d785    refs/tags/v2.4.2^{}
....

Klonen Sie das Repo lokal. Überprüf denrefs/tags/v2.4.2^{} ref von sha

$ git cat-file -p 9eabf5b536662000f79978c4d1b6e4eff5c8d785 

tree 655a20f99af32926cbf6d8fab092506ddd70e49c
parent df08eb357dd7f432c3dcbe0ef4b3212a38b4aeff
author Junio C Hamano <[email protected]> 1432673399 -0700
committer Junio C Hamano <[email protected]> 1432673399 -0700

Git 2.4.2

Signed-off-by: Junio C Hamano <[email protected]>

Kopiere den dekomprimierten Inhalt, damit wir ihn haschen können. (AFAIK Git verwendet die unkomprimierte Version, wenn es hascht.)

git cat-file -p 9eabf5b536662000f79978c4d1b6e4eff5c8d785 > fi

Lassen Sie uns SHA-1 den Inhalt mit gits eigenem Hash-Befehl

git hash-object fi
3cf741bbdbcdeed65e5371912742e854a035e665

Warum ist die Ausgabe nicht[9e]abf5b536662000f79978c4d1b6e4eff5c8d785? Ich verstehe die ersten beiden Zeichen 9e) ist die Länge in hex. Wie soll ich den Inhalt von @ hashfi damit ich den git ref bekommen kannabf5b536662000f79978c4d1b6e4eff5c8d785 ?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage