2011-01-19 16 views
12

के लिए बाइनरी diff और पैच उपयोगिता मुझे अक्सर कुछ सॉफ़्टवेयर रिलीज़ करने की आवश्यकता है, और सॉफ़्टवेयर VMWare डिस्क फ़ाइल, यानी .vmdk फ़ाइल के रूप में निहित है। मैं चाहता हूं कि डेल्टा जितना संभव हो उतना छोटा बनाने के लिए बाइनरी डिफ और पैच उपयोगिता का कुछ प्रकार हो।वर्चुअल मशीन छवि

उत्तर

8

मुझे कोशिश की और सही दृष्टिकोण के साथ शुरू करने दें, फिर कुछ और हालिया दृष्टिकोण बताएं।

दृष्टिकोण है कि मैं बाइनरी फ़ाइलें

साथ काम देखा है एक लंबे समय पहले, लोगों को विस्तार पुराने और अस्थायी "पाठ" फ़ाइलों में एक बाइनरी फ़ाइल के नए संस्करण (हर बाइट 3 बाइट्स के लिए विस्तार किया: 2 हेक्स अंक और एक नई लाइन)। फिर पैच फ़ाइल बनाने के लिए "diff" (जो निश्चित रूप से बाइनरी फ़ाइलों को संभाल नहीं सकता) के पुराने संस्करण के माध्यम से इन दो "टेक्स्ट" फ़ाइलों को चलाएं। फिर हमने संचार लाइनों पर "टेक्स्ट" पैच फ़ाइल प्रेषित की जो अभी तक 8-बिट-साफ़ नहीं थी। प्राप्त होने पर, एक ने पुराने बाइनरी फ़ाइल को एक अस्थायी पाठ संस्करण में विस्तारित किया, फिर उस पुरानी पाठ फ़ाइल को पैच किया, और फिर नई टेक्स्ट फ़ाइल को बाइनरी फ़ाइल में वापस संपीड़ित किया (हेक्स अंकों की प्रत्येक जोड़ी को एक बाइट में संपीड़ित कर दिया, और फेंक दिया न्यूलाइन और किसी भी कैरिज रिटर्न को दूर करें जो क्रिप्ट हो सकता है)।

हाल ही में, मैं rsync (या इसके ऊपर बनाया गया कुछ उपयोगिता जैसे यूनिसन) का उपयोग कर रहा हूं। यह मनमाने ढंग से बाइनरी फ़ाइलों को ठीक करता है। मैं आम तौर पर एक लाइव अपडेट करता हूं, यूनिसेन मेरे स्थानीय मशीन पर चल रहा है और फ़ाइल सर्वर पर rsync चल रहा है, एक-दूसरे से आगे और आगे बात कर रहा है।

कोई फर्क नहीं पड़ता कि पैच फ़ाइल कैसे उत्पन्न होती है, आप उस फ़ाइल को संपीड़ित करने के लिए किसी भी डेटा संपीड़न उपयोगिता का उपयोग कर सकते हैं।

दृष्टिकोण

StackOverflow: "how to crate a PATCH file for the binary difference output file" bsdiff का उपयोग कर पता चलता है कि, जहाँ तक मुझे पता है, द्विआधारी फाइलों के साथ काम करना चाहिए।

एक और StackOverflow question का तात्पर्य है कि "vimdiff" मनमाने ढंग से बाइट्स को पर्याप्त रूप से संभालने लगता है।

StackOverflow: "Useful Binary Diff Tool" कुछ अन्य बाइनरी अंतर उपकरण का उल्लेख करता है।

मुझे लगता है कि कुछ उपकरण rsync - "rdiff" और "rdiff-backup" और "डुप्लिकेट" पर आधारित हैं - आपको पैच फ़ाइल बनाने की अनुमति देता है। फिर वह व्यक्ति जो पैच फ़ाइल प्राप्त करता है, उसे अपनी पुरानी बाइनरी फ़ाइल को एक नई बाइनरी फ़ाइल में अपडेट करने के लिए उपयोग कर सकता है।

Wikipedia claims मानक "diff" और "पैच" उपयोगिताओं के हाल के संस्करण बाइनरी फ़ाइलों का समर्थन करते हैं। क्या आपने कोशिश की है?

निष्पादन योग्य फ़ाइल संपीड़न

आप संभव के रूप में छोटे जब निष्पादन योग्य फ़ाइलों को अद्यतन करने के लिए, आप "How Courgette works" की जाँच करना चाहते हैं डेल्टा फ़ाइल बनाने पर अत्याधुनिक अनुसंधान में रुचि रखते हैं में अत्याधुनिक अनुसंधान क्रोमियम प्रोजेक्ट्स पर स्टीफन एडम्स 200 द्वारा ।

अन्य चीजों के अलावा, कंप्यूटर जो पैच प्राप्त करता है, पुराने अनुप्रयोग को "डिससेम्बल" करता है, सभी पूर्ण पते और ऑफसेट को प्रतीकों में परिवर्तित करता है; फिर अलग किए गए कोड को पैच करता है; फिर आवेदन के नए संस्करण में पैच कोड "reassembles"।

+0

धन्यवाद आपकी तरह के स्पष्टीकरण, डेविड के लिए आपको बहुत बहुत धन्यवाद। मेरी समस्या के लिए, कई प्रयोगों के बाद xdelta मेरी पसंद बन गया। – tianyapiaozi

5

xdelta आज़माएं।

मैं बहुत बड़ी फ़ाइलों (एक एलवीएम लॉजिकल वॉल्यूम और इसके स्नैपशॉट्स के लिए कुछ बाइनरी डिफ टूल ढूंढ रहा था, क्योंकि LVM स्नैपशॉट के स्नैपशॉट का समर्थन नहीं करता है) और xdelta मेरे लिए काम करता है।

संबंधित मुद्दे