* .Orig और * .rej फ़ाइलों को उत्पन्न किए बिना "पैच" चलाना


20

क्या यह संभव है कि patchजनरेट .origऔर .rejफाइल्स न बताएं ? मुझे यह बहुत कष्टप्रद लगता है कि पैच इन बनाता है।

जवाबों:


14

यदि आप इसके patchअलावा कोई विकल्प नहीं दे रहे हैं -pN, तो यह केवल उन फ़ाइलों को बनाता है जब एक पैच साफ-साफ लागू करने में विफल रहता है।

तो, एक विकल्प खराब पैच बनाने (या स्वीकार करने) को रोकना है। :)

वास्तविक दुनिया में वापस, यह एक विशेषता है। जब patch(1)पैच फ़ाइल को मूल फ़ाइल में लागू करने में विफल रहता है, तो यह अस्थायी मूल फ़ाइल कॉपी को बाहर की तरह सहेजता है *.orig, अस्वीकार किए गए खंड को डंप करता है *.rej, और पैच खंडों को लागू करने का प्रयास जारी रखता है। विचार यह है कि आप *.rejफ़ाइल को खोल सकते हैं और पैच फ़ाइल पर बिट्स और टुकड़ों की प्रतिलिपि बनाकर पैच प्रक्रिया को मैन्युअल रूप से पूरा कर सकते हैं । *.origफ़ाइल भी उपयोगी है जब पैच प्रक्रिया गलती से कुछ जहाजों हो सकता है और आप मूल संस्करण का उल्लेख करने के लिए इसे ठीक करने के लिए की जरूरत है।

मैं हमेशा *.rejऔर *.origफ़ाइलों से पाठ के साथ एक खराब पैच को ठीक नहीं करता, लेकिन मुझे उनकी आवश्यकता होने पर उन्हें करना अच्छा लगता है।

एक बार जब मैंने खराब पैच को ठीक कर लिया, तो मैं प्रोजेक्ट रूट पर निम्नलिखित स्क्रिप्ट को जल्दी से साफ करने के लिए चलाता हूं:

#!/bin/bash
find . '(' \
    -name \*-baseline -o \
    -name \*-merge -o \
    -name \*-original -o \
    -name \*.orig -o \
    -name \*.rej \
')' -delete

मैं इसे फोन करता हूं cleanup-after-bad-patchक्योंकि लंबे समय से नाम इस दुर्घटना को चलाने के खिलाफ आंशिक रूप से बीमा करता है, क्योंकि यह उन फ़ाइलों को हटा सकता है जिनकी आपको अभी भी आवश्यकता है। ईमानदार होने के लिए, हालांकि, मैं आमतौर पर इसे टाइप करके चलाता हूं cleanTabEnter, जो कि PATHमेरे विकास मशीनों पर इस स्क्रिप्ट को खोजने के लिए पर्याप्त है ।

जब यह जाँच करता है तो अतिरिक्त पैटर्न मेरे पसंद के संस्करण नियंत्रण प्रणाली द्वारा फाइल आउटपुट के लिए होता है जब यह एक मर्ज ऑपरेशन के दौरान समान समस्या का सामना करता है। आप इसे अपने VCS / SCM टूल के लिए समायोजित करना चाह सकते हैं ।


7

पैच को बताने के लिए बैकअप का उत्पादन न करें -bऔर किसी भी --backup-...विकल्प को छोड़ दें ।

यह निर्देश के लिए .rejफाइल नहीं बनाने के लिए निर्देश के लिए -r -विकल्प जोड़ें ।


4
यह मेरे लिए काम नहीं करता है - यह सिर्फ "-" नामक एक फ़ाइल में अस्वीकार करता है, जो चारों ओर होने के लिए एक बहुत ही कष्टप्रद फ़ाइल नाम है। मैं एक मैक पर 2.5.8 संस्करण का उपयोग कर रहा हूँ।
rjmunro

GNU patch 2.6मैक पर ठीक काम कर शायद कोशिश-r /dev/null
स्टुअर्ट कार्डल

3

--no-backup-if-mismatchविकल्प ".orig" फ़ाइलें नहीं आने देगा।

आप --mergeविकल्प को आज़माना भी चाह सकते हैं , जो एक इन-फ़ाइल संघर्ष बनाता है।

सभी मामलों में आपके पास किसी तरह से जल्दी से एक अच्छी स्थिति में वापस आने का रास्ता होना चाहिए यदि मर्ज भारी हो जाता है।


1

मैं पैच v2.5.4 के साथ फंस गया हूं, जहां -r -इसका कारण नाम की फाइलों को अस्वीकार करना है -

मैंने पाया कि --reject-file=खाली मान के कारण एक्ज़िट कोड के साथ पैच फेल हो जाता है। 2 यदि यह रिजेक्ट फाइल लिखने की कोशिश करता है। यदि कोई अस्वीकृति नहीं है तो यह अपेक्षित रूप से काम करता है। हालांकि पैच के पुराने संस्करण के लिए पूर्ण समाधान नहीं है, कुछ परिस्थितियों में यह स्वीकार्य या वांछित हो सकता है।


0

सबसे अच्छा मैं (रग के तहत गंदगी स्वीप करने का एक तरीका) के साथ आ सकता है -r <tmpfile>, अर्थात:

# patch -r /tmp/deleteme.rej -i patchfile filetobepatched

चूंकि v2.5.8, -r -वास्तव में -फ़ाइल बनाता है ।


-3

पैच -p1 -B / dev / null -r - <file.patch


-1: यह बहुत बुरी सलाह है। सबसे पहले, -Bध्वज *.origआउटपुट को नहीं भेजता है /dev/null, क्योंकि यह आपकी कमांड से प्रकट होता है। यह सिर्फ ऐसा होता है कि सामान्य उपयोगकर्ता फाइलों को नहीं लिख सकते हैं जैसे कि चीजें /dev/nullfoo.cpp। यदि आप इसे जड़ के रूप में करते हैं, तो आपको /devइसके बदले कबाड़ मिल जाएगा । दूसरा, फ़ाइल को -r -दबाता नहीं है *.rej। यह केवल ऐसा करता प्रतीत होता है क्योंकि फर्जी -Bध्वज के कारण त्रुटि आपको यह दिखाने से रोकती है कि यह वास्तव में इसके बिना क्या करेगा -B, जो -वर्तमान निर्देशिका में नामक एक फ़ाइल बनाता है ।
वॉरेन यंग

1
@WarrenYoung के अनुसार man patch: "-r ने डिफ़ॉल्ट .rej फ़ाइल के बजाय अस्वीकृत में अस्वीकार कर दिया है। जब अस्वीकृति है - अस्वीकार को छोड़ें।"
लिम्बो पेंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.