2012-06-27 18 views

Trả lời

31

Mercurial (hg) cũng sử dụng hàm băm SHA1. Nó cũng chỉ cố gắng để có được số sửa đổi trong lịch sử cam kết. Tuy nhiên, các bản sửa đổi này chỉ hợp lệ trong một kho lưu trữ. Nếu bạn xem một repo khác, các bản sửa đổi này không được đảm bảo để khớp.

Về lý do tại sao băm sử dụng git và mercurial: cả hai đều có lịch sử cam kết phi tuyến tính. vì cả hai đều được phân phối, mọi người có thể làm việc trên cùng một cơ sở mã trong kho lưu trữ cục bộ của họ mà không cần phải đồng bộ hóa với một cơ quan trung ương (theo yêu cầu của SVN và CVS). Bây giờ nếu mọi người cam kết nội dung của họ tại địa phương và hợp nhất chúng sau này, bạn sẽ có một thời gian khó khăn để tìm ra một lược đồ nhất quán để tạo thành các bản sửa đổi số nguyên tăng tuyến tính. Và ngay cả khi bạn có thể, bạn vẫn sẽ nhận được kết quả khác nhau giữa các bản repos khác nhau.

Cuối cùng, tất cả là vì bản chất phân tán. Đó là một cách đơn giản để tìm ra các số nhận dạng duy nhất để cam kết. Và như một sản phẩm phụ, bạn cũng có thể mã hóa toàn bộ lịch sử hướng tới một cam kết đơn lẻ thành băm. Có nghĩa là, ngay cả khi bạn có cùng một khác biệt trong một cam kết, bạn có thể sẽ nhận được băm SHA1 khác nhau.

6

Được sử dụng làm phương pháp xác thực cam kết và xác minh. Số SHA1 là tổng kiểm tra tất cả các thay đổi được thực hiện trong cam kết cộng với tên của tác giả cộng với SHA1 của phụ huynh cam kết. (và IIRC nó cũng bao gồm thông điệp cam kết, không chắc chắn).

Khi bạn kéo/tìm nạp từ xa, git sẽ kiểm tra tổng kiểm tra đối với các tệp bạn nhận được để đảm bảo rằng bạn không nhận được phiên bản mã bị hỏng hoặc bị sửa đổi.

+6

Để chính xác, tổng kiểm tra không phải là của * thay đổi * được thực hiện trong cam kết, đó là toàn bộ cây và có, nó bao gồm thông báo cam kết. Mỗi cây được gọi bằng tên SHA1, giống như mọi tập tin trong cây đó. –

1

Git và HG đều sử dụng SHA1 để xác định các cam kết. SVN vận hành một mô hình thay đổi tuần tự và có thể hỗ trợ một số phiên bản gia tăng, trong khi Git và HG phức tạp hơn nhiều và hỗ trợ mô hình đồ thị theo chu kỳ phát triển, nó dễ dàng hơn trong việc phân nhánh và hợp nhất thường xuyên.

Số gia tăng HG khác với số gia tăng SVN và là not suitable để tham chiếu đến một phiên bản cụ thể trên các bản sao khác nhau của kho, vì vậy không thể sử dụng giống như số sửa đổi SVN.

Các vấn đề liên quan