git - एक ही सामग्री को दो बार ज़िपिंग क्यों अलग SHA1 के साथ दो फाइल देता है?




ant zip gzip (3)

मैं git और zip फ़ाइलों के साथ एक अजीब समस्या में भाग लिया है मेरी निर्माण स्क्रिप्ट दस्तावेज़ीकरण HTML पृष्ठों का एक गुच्छा लेती है और उन्हें डॉक्स में ज़िप कर देती है.जिप मैं इस फाइल को गिट में देखता हूं।

मुझे जो समस्या हो रही है वह हर बार जब मैं निर्माण स्क्रिप्ट फिर से चलाता हूं और एक नई ज़िप फ़ाइल प्राप्त करता हूं, तो नई ज़िप फ़ाइल में पिछले रन की तुलना में अलग SHA1 होता है। मेरी बिल्ड स्क्रिप्ट चींटी ज़िप कार्य को बुला रही है हालांकि मैन्युअल मैक ओएस एक्स के मैकोज़ ज़िप को बुलाते हुए मुझे एक अलग शाए देता है अगर मैं एक ही डायरेक्टरी को दो बार पिन करता हूं।

1 भागो:

zip foo.zip *
openssl sha1 foo.zip 
rm foo.zip 

2 भागो:

zip foo.zip *
openssl sha1 foo.zip

रन 1 और रन 2 अलग SHA1 देते हैं, हालांकि सामग्री रनों के बीच नहीं बदली। दोनों ही मामलों में ज़िप में छिपी फाइलें पूरी तरह से ज़िप्पी हो जाती हैं, यह इंगित नहीं करता है कि। OS_Store जैसी कोई भी विशिष्ट फाइलें ज़िप फ़ाइल में शामिल की जा रही हैं।

ज़िप एल्गोरिदम नियतात्मक है? यदि एक ही सामग्री पर चलें तो क्या वह उसी बिट का उत्पादन करेगा? यदि नहीं तो क्यों नहीं?

एक नियतात्मक तरीके से फाइलों को ज़िप करने के लिए मेरी क्या पसंद हैं? ज़िप-अप फ़ाइल में उनमें से हजारों हैं, मुझे उन फ़ाइलों को बहुत ज्यादा बदलने की उम्मीद नहीं है। मुझे पता है कि जीआईटी आपके द्वारा जाँच की जा रही किसी भी फाइल को ज़िप करेगा, लेकिन उन्हें ज़िप करने की प्रेरणा केवल उनसे बड़े पैमाने पर रखनी होगी।


Answers

विकिपीडिया के अनुसार http://en.wikipedia.org/wiki/Zip_(file_format) लगता है कि ज़िप फाइलों में अंतिम संशोधन समय फ़ाइल और आखिरी संशोधन की तारीख फ़ाइल है ताकि जीआईटी में चेक की गई कोई भी ज़िप फाइल गिट में परिवर्तित हो जाएंगी ज़िप से उसी सामग्री से फिर से बनाया गया है और ऐसा लगता है कि उन शीर्षलेखों को सेट न करने के लिए कोई बताने वाला कोई ध्वज नहीं है

मैं बस tar का उपयोग कर रहा हूँ, ऐसा लगता है कि एक ही इनपुट के लिए एक ही बाइट का उत्पादन कई बार चलाया जाता है


gzip है- n विकल्प, आप ऐसा कर सकते हैं:

%> tar cv foo/ | gzip -n > foo.tgz; sha256sum foo.tgz

और आप लगातार एक ही हैश प्राप्त करेंगे






git ant zip gzip sha