Saya hanya memperluas jawaban dengan @Leif Gruenwoldtdan merinci apa yang ada dalam referensi yang disediakan oleh@Leif Gruenwoldt
Lakukan sendiri..
- Langkah 1. Buat dokumen teks kosong (nama tidak masalah) di repositori Anda
- Langkah 2. Tahap dan Komit dokumen
- Langkah 3. Identifikasi hash blob dengan menjalankan
git ls-tree HEAD
- Langkah 4. Temukan hash blob menjadi
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
- Langkah 5. Keluarkan keterkejutan Anda dan baca di bawah
Bagaimana GIT menghitung hash komitnya
Commit Hash (SHA1) = SHA1("blob " + <size_of_file> + "\0" + <contents_of_file>)
Teks blob⎵adalah awalan konstan dan \0juga konstan dan merupakan NULLkarakter. The <size_of_file>dan<contents_of_file> bervariasi tergantung pada file.
Lihat: Apa format file dari objek git commit?
Dan itu semua!
Tapi tunggu!, apakah Anda memperhatikan bahwa <filename>bukan merupakan parameter yang digunakan untuk komputasi hash? Dua file berpotensi memiliki hash yang sama jika isinya sama pada tanggal dan waktu pembuatan dan namanya. Inilah salah satu alasan Git menangani pemindahan dan mengganti nama dengan lebih baik daripada sistem kontrol versi lain.
Lakukan Sendiri (Ext)
- Langkah 6. Buat file kosong lain dengan yang berbeda
filenamedi direktori yang sama
- Langkah 7. Bandingkan hash dari kedua file Anda.
catatan:
Tautan tidak menyebutkan bagaimana treeobjek di-hash. Saya tidak yakin dengan algoritme dan parameternya namun dari pengamatan saya mungkin menghitung hash berdasarkan semua blobsdan trees(hash mereka mungkin) yang dikandungnya