Đây là về nội bộ của git
.Thuật toán nào git sử dụng để phát hiện các thay đổi trên cây làm việc của bạn?
Tôi đã đọc cuốn sách tuyệt vời 'Pro Git' và tìm hiểu một chút về cách git hoạt động trong nội bộ (tất cả về SHA1, blobs, tài liệu tham khảo, tress, cam kết, v.v.). Kiến trúc khá thông minh, nhân tiện. Vì vậy, để đưa vào ngữ cảnh, git tham chiếu nội dung của một tệp dưới dạng giá trị SHA1, do đó, nó có thể biết liệu nội dung cụ thể có thay đổi hay không chỉ so sánh giá trị băm. Nhưng câu hỏi của tôi là cụ thể về cách git kiểm tra nội dung trong cây đang thay đổi hay không.
Cách tiếp cận ngây thơ sẽ nghĩ rằng, mỗi lần bạn chạy lệnh là git status
hoặc lệnh tương tự, nó sẽ tìm kiếm tất cả các tệp trên thư mục làm việc, tính toán SHA1 và so sánh nó với một . Nhưng điều đó có vẻ rất không hiệu quả đối với các dự án lớn, như hạt nhân Linux.
ý tưởng khác có thể là để kiểm tra ngày sửa đổi cuối cùng trên tập tin, nhưng tôi nghĩ rằng git không lưu trữ thông tin (khi bạn sao chép một kho lưu trữ, tất cả các file có một thời gian mới)
tôi chắc chắn rằng đó là thực hiện nó một cách hiệu quả (git thực sự nhanh), có ai đạt được điều đó không?
PD: Chỉ cần thêm một số thú vị link về chỉ mục git, cụ thể là chỉ mục giữ thông tin về tệp thời gian, ngay cả khi đối tượng cây không.
Xem: http://stackoverflow.com/questions/1778862/how-does-git-detect-a-file-modification –
[Làm cách nào để git phát hiện thấy tệp đã bị sửa đổi?] (Http: // stackoverflow .com/q/1778862/995714) –