मैंने गिट और ज़िप फ़ाइलों के साथ एक अजीब समस्या में भाग लिया है। मेरी बिल्ड स्क्रिप्ट दस्तावेज एचटीएमएल पेजों का एक गुच्छा लेती है और उन्हें docs.zip में ज़िपित करती है, फिर मैं इस फ़ाइल को गिट में जांचता हूं।एक ही सामग्री को दो बार ज़िप करने से अलग-अलग SHA1 के साथ दो फाइलें क्यों मिलती हैं?
मेरी समस्या यह है कि हर बार जब मैं बिल्ड स्क्रिप्ट को फिर से चलाता हूं और एक नई ज़िप फ़ाइल प्राप्त करता हूं तो नई ज़िप फ़ाइल में पिछले रन की तुलना में एक अलग SHA1 होता है। मेरी बिल्ड स्क्रिप्ट चींटी ज़िप कार्य को बुला रही है। हालांकि मैक ओएस एक्स खोल से मैकोज़क्स ज़िप को मैन्युअल रूप से कॉल करने से मुझे एक अलग sha1 मिलता है यदि मैं दो बार एक ही निर्देशिका को ज़िप करता हूं।
भागो 1:
zip foo.zip *
openssl sha1 foo.zip
rm foo.zip
रन 2:
zip foo.zip *
openssl sha1 foo.zip
रन 1 और run2 अलग SHA1 देना भले ही सामग्री रन के बीच नहीं बदला। दोनों मामलों में ज़िप प्रिंट किए गए वही फ़ाइलों को ठीक से प्रिंट करता है, यह इंगित नहीं करता है कि किसी भी ओएस विशिष्ट फाइलों जैसे .DS_Store को ज़िप फ़ाइल में शामिल किया जा रहा है।
ज़िप एल्गोरिदम निर्धारक है? यदि एक ही सामग्री पर चलते हैं तो क्या यह बिल्कुल वही बिट्स का उत्पादन करेगा? अगर नहीं तो क्यों नहीं?
फ़ाइलों को एक निश्चित तरीके से ज़िप करने के लिए मेरे विकल्प क्या हैं? ज़िप्ड अप फ़ाइल में उनमें से हजारों हैं, मुझे उम्मीद नहीं है कि उन फ़ाइलों को ज्यादा बदलना है। मुझे पता है कि गिट आपके द्वारा चेक की जाने वाली किसी भी फाइल को ज़िपित करेगा लेकिन उन्हें ज़िप करने की प्रेरणा सिर्फ उन लोगों के द्रव्यमान को दूर रखना है।
दो चीजें। सबसे पहले ऐसा लगता है कि ज़िप फ़ाइल को ज़िप में शामिल किया जा सकता है क्योंकि यह एक ही निर्देशिका में है, जो गैर-निर्धारिती परिणाम दे सकता है। दूसरा ज़िप में तिथियां और समय शामिल हो सकते हैं जो रन से चलाने के लिए अलग होंगे। –
ज़िप फ़ाइल को नए जेनरेट किए गए ज़िप में शामिल नहीं किया जा रहा है, मैंने जांच की है कि मैंने अपने प्रश्न पोस्ट करने से पहले। – ams