Wie ist das git-hash berechnet?

Ich versuche zu verstehen, wie git berechnet den hash des refs.

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

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

Clone das repo lokal. Überprüfen Sie die refs/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]>

Kopieren Sie den dekomprimierten Inhalt, so dass wir Hashen.(AFAIK git verwendet die unkomprimierte version, wenn es hashing)

git cat-file -p 9eabf5b536662000f79978c4d1b6e4eff5c8d785 > fi

Let ' s SHA-1 für den Inhalt verwendet git die eigene hash-Befehl

git hash-object fi
3cf741bbdbcdeed65e5371912742e854a035e665

Warum die Ausgabe nicht [9e]abf5b536662000f79978c4d1b6e4eff5c8d785? Ich verstehe die ersten beiden Zeichen (9e) ist die Länge in hex. Wie soll ich den hash der Inhalte der fi so, dass ich die git-ref abf5b536662000f79978c4d1b6e4eff5c8d785 ?

  • (1) git hash-object ist das hinzufügen von Dateien, die nicht für andere Objekttypen. Offensichtlich geben angehängt wird, um Hash-content-irgendwie. Und ich Wette, 9e ist nicht die Länge der gesamten Zeile wird ein sha1-hash als Algorithmus gibt es.
Schreibe einen Kommentar