Gitは、SHA1ダイジェストの最初のバイトである.git/objects/ab/cdefgh...
場所に個々のオブジェクトを格納します。ab
ただし、パックファイルは同じ命名ポリシーに準拠しておらず、命名方法に関するドキュメントが見つかりません。洞察はありますか?
パックファイルはに保存され、 gitrepositoryレイアウトobjects/pack
で文書化されています。このディレクトリ内には、インデックスファイルとパックファイル自体のペアとして保存されます。たとえば、次のように呼び出されます。
pack-a862cfa8b080773290073999c800a2e655ef9b5d.idx
pack-a862cfa8b080773290073999c800a2e655ef9b5d.pack
これらのファイル名のSHA1sumがどのように計算されるかは、git-pack-objectsのドキュメントで説明されています(私の強調)。
<base-name>を使用してファイルのペア(.packと.idx)に書き込み、作成されたファイルの名前を決定します。このオプションを使用すると、2つのファイルは<base-name>-<SHA1>。<pack、idx>ファイルに書き込まれます。<SHA1>は、パックの内容に基づいて結果のファイル名を作成するためにソートされたオブジェクト名のハッシュであり、コマンドの標準出力に書き込まれます。
オブジェクト名は、パックファイル内のオブジェクトのSHA1sumです。
答えは、「パックファイル全体のSHA-1ハッシュから最後の20バイトを引いたもの」、または「最後の20バイトの16進ダイジェスト」(どちらも同等)のいずれかです。
ファイルの最後の20バイトは「トレーラーチェックサム」であり、それ自体がファイル全体(最後の20バイトを差し引いたもの)のSHA-1ハッシュです。
これは2013年に変更されました(以前は、ファイル内のすべてのハッシュのSHA-1合計でした)。ドキュメントには、単に「パックの内容に基づくハッシュである」と記載されていることに注意してください。著者は、SHA-1の計算方法を明示的に保証していません(コミットログから:「これにより、読者が古い計算または新しい計算に依存することを思いとどまらせることができます。」)。