Sto cercando di capire come git calcola l'hash dei ref.Come viene calcolato l'hash git?
$ git ls-remote https://github.com/git/git
....
29932f3915935d773dc8d52c292cadd81c81071d refs/tags/v2.4.2
9eabf5b536662000f79978c4d1b6e4eff5c8d785 refs/tags/v2.4.2^{}
....
Clona il repository in locale. Controllare il refs/tags/v2.4.2^{}
ref 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]>
Copiare il contenuto non compresso in modo che possiamo hash. (AFAIK git utilizza la versione non compressa quando è hashing) SHA-1
git cat-file -p 9eabf5b536662000f79978c4d1b6e4eff5c8d785 > fi
di lasciare che il contenuto utilizzando git di proprio comando hash
git hash-object fi
3cf741bbdbcdeed65e5371912742e854a035e665
Perché l'uscita non è [9e]abf5b536662000f79978c4d1b6e4eff5c8d785
? Capisco i primi due caratteri (9e
) è la lunghezza in esadecimale. Come dovrei hash il contenuto di fi
in modo che io possa ottenere il ref git abf5b536662000f79978c4d1b6e4eff5c8d785
?
(1) 'git hash-object' sta aggiungendo file, non altri tipi di oggetti. Ovviamente il tipo viene aggiunto al contenuto dell'hash in qualche modo. E scommetto che 9e non è la lunghezza, l'intera linea è un hash come l'algoritmo sha1 lo restituisce. – max630