私はgitがrefのハッシュを計算する方法を理解しようとしています。gitハッシュはどのように計算されますか?
$ git ls-remote https://github.com/git/git
....
29932f3915935d773dc8d52c292cadd81c81071d refs/tags/v2.4.2
9eabf5b536662000f79978c4d1b6e4eff5c8d785 refs/tags/v2.4.2^{}
....
リポジトリをローカルでクローンします。我々はそれをハッシュすることができるよう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]>
コピーし、解凍内容によってrefs/tags/v2.4.2^{}
REFを確認してください。gitの年代を使用して
git cat-file -p 9eabf5b536662000f79978c4d1b6e4eff5c8d785 > fi
レッツ・SHA-1コンテンツ(私の知る限りのgitのは、それがハッシングだ圧縮されていないバージョンを使用しています)独自のハッシュコマンド
git hash-object fi
3cf741bbdbcdeed65e5371912742e854a035e665
なぜ出力が[9e]abf5b536662000f79978c4d1b6e4eff5c8d785
ではないのですか?私は最初の2文字(9e
)が16進数であることを理解しています。 fi
の内容をハッシュすると、私はgit ref abf5b536662000f79978c4d1b6e4eff5c8d785
を得ることができますか?
(1) 'git hash-object'は他のオブジェクトタイプではなくファイルを追加しています。明らかに、ハッシュされたコンテンツには何らかの形で型が追加されます。そして、私は9eが長さではないと考えています。sha1アルゴリズムが返すように、行全体がハッシュです。 – max630