Tôi chỉ mở rộng câu trả lời bằng cách @Leif Gruenwoldt
nêu chi tiết những gì có trong tài liệu tham khảo được cung cấp bởi@Leif Gruenwoldt
Tự làm ..
- Bước 1. Tạo một tài liệu văn bản trống (tên không quan trọng) trong kho lưu trữ của bạn
- Bước 2. Giai đoạn và cam kết tài liệu
- Bước 3. Xác định băm của đốm màu bằng cách thực thi
git ls-tree HEAD
- Bước 4. Tìm băm của đốm màu
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
- Bước 5. Ngạc nhiên của bạn và đọc bên dưới
GIT tính toán các băm cam kết của nó như thế nào
Commit Hash (SHA1) = SHA1("blob " + <size_of_file> + "\0" + <contents_of_file>)
Văn bản blob⎵
là một tiền tố không đổi và \0
cũng không đổi và là NULL
ký tự. Các <size_of_file>
và <contents_of_file>
thay đổi tùy theo tập tin.
Hãy xem: Định dạng tệp của một đối tượng git commit là gì?
Và đó là tất cả mọi người!
Nhưng đợi đã! , bạn có nhận thấy rằng <filename>
tham số không phải là một tham số được sử dụng cho tính toán băm? Hai tệp có thể có cùng một hàm băm nếu nội dung của chúng giống nhau, không quan tâm đến ngày giờ chúng được tạo và tên của chúng. Đây là một trong những lý do Git xử lý việc di chuyển và đổi tên tốt hơn các hệ thống điều khiển phiên bản khác.
Tự làm (Ext)
- Bước 6. Tạo một tệp trống khác với một tệp khác
filename
trong cùng một thư mục
- Bước 7. So sánh hàm băm của cả hai tệp của bạn.
Ghi chú:
Liên kết không đề cập đến cách tree
đối tượng được băm. Tôi không chắc chắn về thuật toán và các tham số tuy nhiên từ quan sát của tôi, nó có thể tính toán một hàm băm dựa trên tất cả blobs
và trees
( có thể là các hàm băm của chúng) mà nó chứa