2012-04-02 11 views
49

मैं जानता हूँ कि कई सूत्र पहले से ही इस पर देखते हैं, लेकिन कोई भी पूरी तरह से वास्तव में विस्तार से बताया गया है कि कैसे पैच फ़ाइल बनाने के लिए प्रारंभिक diff प्रदर्शन करने के लिए है, तो कैसे लागू करने के लिए कि प्रारंभिक निर्देशिका के लिए पैच इसे अद्यतन करने।इसे अद्यतन करने के लिए पूरी निर्देशिका के लिए पैच कैसे बनाएं?

मेरे मामले में, वहाँ फ़ाइलों की एक निर्देशिका है कि किसी को वेब से डाउनलोड कर सकते हैं। मुझे लगता है कि निर्देशिका ले लिया है और इसे करने के लिए परिवर्तन किए हैं, और एक पैच फ़ाइल इस तरह है कि दूसरों को वास्तव में क्या मुझे अपने संशोधित निर्देशिका में है पुन: पेश करने के लिए डाउनलोड निर्देशिका में आवेदन कर सकते हैं बनाना चाहते हैं।

सहायता? मेरे पैच को लागू करने के तरीके के संबंध में मुझे दूसरे व्यक्ति को बताने की क्या ज़रूरत है?

उत्तर

91

मैं सिर्फ इस एक ही समस्या थी - कैसे आधा ऐसा करने के बारे में सलाह के बहुत सारे।

पैच फ़ाइल बनाने के लिए:: ठीक है, यहाँ क्या मैं दोनों पैचिंग और काम करने के लिए unpatching पाने के लिए किया था

कहते हैं में/tmp दोनों निर्देशिका के
  1. रखें प्रतियां, तो हम पैच बना सकते हैं फ़ाइल, या बहादुर हैं, उन्हें कंधे से कंधा मिलाकर मिल - एक निर्देशिका में।

  2. दो निर्देशिका, पुराने और नए पर एक उपयुक्त diff चलाएँ: एक व्यक्ति मूल/निर्देशिका है

    diff -ruN orig/ new/ > file.patch 
    # -r == recursive, so do subdirectories 
    # -u == unified style, if your system lacks it or if recipient 
    #  may not have it, use "-c" 
    # -N == treat absent files as empty 
    

हैं, वे पैच चलाकर नया एक पुन: कर सकते हैं।

वर्ष फ़ोल्डर और पैच फ़ाइल से नया फ़ोल्डर से बनाने के लिए:

  1. ले जाएँ एक निर्देशिका है जहाँ मूल/फ़ोल्डर मौजूद

  2. इस फ़ोल्डर में clobbered कर देंगे पैच फ़ाइल, तो एक रखना इसका बैकअप कहीं, या एक प्रति का उपयोग करें।

    patch -s -p0 < file.patch 
    # -s == silent except errors 
    # -p0 == needed to find the proper folder 
    
  3. इस बिंदु पर, मूल/फ़ोल्डर नए/सामग्री मौजूद है, लेकिन अभी भी अपने पुराने नाम, इसलिए है:

    mv orig/ new/ # if the folder names are different 
    
+3

इच्छा है कि मैं आपका हाथ हिला सकता हूं। बहुत बहुत धन्यवाद! – poundifdef

+0

@ डेविड एच क्या यह सिग्विन के साथ विंडोज पर काम करता है? – onmyway133

+0

मैं एक मैक लड़का हूं इसलिए कोई विचार नहीं। आपको क्या करना है सिगविन पर पैच और diff के विकल्पों को जांचना है। यही कारण है कि मैंने विकल्पों के अर्थों के ऊपर उपर्युक्त टिप्पणियां जोड़ दीं - इसलिए यदि एक या दूसरा प्रोग्राम विभिन्न विकल्पों की पेशकश करता है तो आप यह समझ सकते हैं कि इसे काम करने के लिए क्या बदला जाए। संकल्पनात्मक रूप से सभी पैच/diff प्रोग्राम कार्यक्षमता का समर्थन करना चाहिए। –

2

चेक बाहर खुला स्रोत Scarab सी ++ पुस्तकालय: https://github.com/loyso/Scarab

यह वही करता है जो आपने वर्णित किया है। यह xdelta लाइब्रेरी का उपयोग कर प्रति-फ़ाइल diff बनाता है और यह संग्रह पैकेज के लिए डालता है। आप उस पैकेज को फिर से वितरित कर सकते हैं और अंतर लागू कर सकते हैं। Win32 के लिए बाइनरी हैं।

मैं स्कार्ब परियोजना का लेखक हूं।

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