Tôi gặp sự cố lạ với tệp git và zip. Xây dựng kịch bản của tôi mất một loạt các trang html tài liệu và nén chúng vào một docs.zip tôi sau đó kiểm tra tập tin này vào git.Tại sao việc nén cùng một nội dung hai lần cung cấp hai tệp với SHA1 khác nhau?
Sự cố tôi gặp phải là mỗi khi tôi chạy lại tập lệnh xây dựng và nhận tệp zip mới, tệp zip mới có SHA1 khác với lần chạy trước đó. Kịch bản xây dựng của tôi đang gọi nhiệm vụ ant zip. Tuy nhiên, thủ công gọi là zip macOSX từ hệ vỏ Mac OS X mang lại cho tôi một sha1 khác nếu tôi nén cùng một thư mục hai lần.
Run 1:
zip foo.zip *
openssl sha1 foo.zip
rm foo.zip
Run 2:
zip foo.zip *
openssl sha1 foo.zip
Run 1 và run2 cho khác nhau SHA1 mặc dù nội dung không thay đổi giữa chạy. Trong cả hai trường hợp, zip in ra chính xác các tệp giống nhau được nén nó không chỉ ra rằng bất kỳ tệp hệ điều hành cụ thể nào như .DS_Store đang được đưa vào tệp nén.
Định lý sổ sách zip có xác định không? Nếu chạy trên cùng một nội dung nó sẽ tạo ra chính xác cùng một bit? nếu không, tai sao không?
Tôi có lựa chọn nào để nén các tệp theo cách xác định? Có hàng ngàn người trong số họ trong tập tin nén, tôi không mong đợi những tập tin đó thay đổi nhiều. Tôi biết rằng git sẽ zip lên bất kỳ tập tin bạn checkin nhưng động lực để zip chúng là chỉ giữ cho khối lượng của chúng ra khỏi con đường.
Hai thứ. Đầu tiên có vẻ như bản thân tệp zip có thể được bao gồm trong zip vì nó nằm trong cùng thư mục, có thể cung cấp kết quả không xác định. Thứ hai, mã zip có thể bao gồm ngày và giờ sẽ khác với ngày chạy. –
tệp zip không được bao gồm trong zip mới được tạo, tôi đã kiểm tra trước khi đăng câu hỏi của mình. – ams