私は回答を@Leif Gruenwoldtさらに拡張し、以下によって提供される参考文献の内容を詳しく説明します@Leif Gruenwoldt
自分でやれ..
- ステップ1.リポジトリーに空のテキスト文書(名前は問題ではない)を作成する
- ステップ2.ドキュメントをステージングしてコミットする
- ステップ3.実行してblobのハッシュを特定する
git ls-tree HEAD
- ステップ4. blobのハッシュを見つける
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
- ステップ5.驚きから抜け出し、以下を読む
GITはコミットハッシュをどのように計算するか
Commit Hash (SHA1) = SHA1("blob " + <size_of_file> + "\0" + <contents_of_file>)
テキストblob⎵は定数プレフィックスであり、定数\0でもあり、NULL文字です。の<size_of_file>と<contents_of_file>、ファイルによって異なります。
参照:git commitオブジェクトのファイル形式は何ですか?
そして、それはすべての人々です!
ちょっと待って!、は<filename>ハッシュ計算に使用されるパラメータではないことに気付きましたか?2つのファイルの内容が作成日時と名前に関係なく同じである場合、2つのファイルは同じハッシュを持つ可能性があります。これが、Gitが他のバージョン管理システムよりも移動と名前変更を適切に処理する理由の1つです。
Do It Yourself(Ext)
- ステップ6.別の空のファイルを作成します
filename同じディレクトリに
- ステップ7.両方のファイルのハッシュを比較します。
注意:
リンクでは、treeオブジェクトがどのようにハッシュされるかについては言及されていません。私はそれはおそらく、すべてに基づいてハッシュを計算しかし私の観察から、アルゴリズムやパラメータの特定はないですblobsし、treesそれが含まれています(おそらく、そのハッシュ)