मैं विंडोज पर एक अलग पैच कैसे लागू करूं?


136

वहाँ बहुत सारे कार्यक्रम हैं जो एक अलग पैच बना सकते हैं, लेकिन मैं एक बार एक को लागू करने की कोशिश कर रहा हूं। मैं एक पैच वितरित करने की कोशिश कर रहा हूं, और मुझे एक उपयोगकर्ता से एक सवाल मिला कि इसे कैसे लागू किया जाए। इसलिए मैंने इसे अपने दम पर समझने की कोशिश की और पता चला कि मेरे पास कोई सुराग नहीं है, और अधिकांश उपकरण जो मुझे मिल सकते हैं वे कमांड-लाइन हैं। (मैं एक कमांड लाइन को संभाल सकता हूं, लेकिन बहुत सारे लोग एक अच्छे, दोस्ताना जीयूआई के बिना खो जाएंगे। इसलिए वे इस उद्देश्य के लिए नहीं हैं।)

मैंने TortoiseSVN का उपयोग करने की कोशिश की। मेरे पास वह पैच है जिसे मैं लागू करना चाहता हूं। मैं पैच पर राइट-क्लिक करता हूं, और TortoiseSVN सबमेनू के तहत एक विकल्प है जो कहता है कि "पैच लागू करें।" यह सब एक खाली खिड़की को खींचता है।

इसलिए मैंने ओपन मारने की कोशिश की। इसके दो विकल्प हैं: विलय और एकीकृत अंतर को लागू करना। (पैच एकीकृत रूप में अलग प्रारूप में है, सौभाग्य से।) लेकिन लागू विकल्प सिर्फ सादा काम नहीं करता है: यह पैच और एक फ़ोल्डर के लिए पूछता है। किसी तरह यह पैच लगाने के लिए फाइल मांगना भूल गया ! तो TortoiseSVN सिर्फ सादा काम नहीं करता है। क्या एक विंडोज़ जीयूआई-आधारित उपयोगिता है जो एक पैच और एक फ़ाइल ले जाएगी और इसे ठीक से लागू करेगी?

संपादित करें: अब तक के उत्तरों को देखते हुए, ऐसा लगता है कि कछुआ केवल तभी इसे सही करेगा यदि यह एक फ़ाइल है जो पहले से ही संस्करणित है। यहाँ ऐसा नहीं है। मुझे एक ऐसी फ़ाइल पर पैच लागू करने में सक्षम होना चाहिए जो एक SVN रिपॉजिटरी से बाहर नहीं आई थी। मैंने बस कछुए का उपयोग करने की कोशिश की, क्योंकि मुझे पता है कि एसवीएन भिन्नता का उपयोग करता है और यह जानना है कि दोनों उन्हें कैसे बनाते हैं और उन्हें लागू करते हैं।


WinMerge जवाब अच्छा लग रहा था, लेकिन केवल यह बताता है कि एक पैच कैसे बनाया जाए, एक को कैसे लागू किया जाए। TortoiseHG के पास पैच लगाने का एक शानदार तरीका है, लेकिन केवल उन फ़ाइलों के लिए जो एक hg रेपो में हैं, जहां तक ​​मुझे पता है। यदि बाहरी SVN TortoiseDiff ऐसा नहीं कर सकता है, तो मुझे आश्चर्य है कि कोई GUI उपकरण कर सकता है।
वारेन पी

3
वाह, आप सही जवाब हैं अभी भी नहीं है - कम से कम WinMerge में। WinMerge पर फ़ीचर रिक्वेस्ट sourceforge.net/tracker/…
KCD

जवाबों:


32

पैच लागू करें

TortoiseMerge के साथ:

  1. एक मौजूदा SVN रेपो डायरेक्टरी खोजें और खोलें
  2. "मर्ज" नामक एक नई निर्देशिका बनाएं, यदि यह पहले से मौजूद नहीं है
  3. उस फ़ाइल को कॉपी करें जिस पर आप .patch फ़ाइल को लागू करना चाहते हैं
  4. अगले चरण पर जाने से पहले svn रिपॉजिटरी में ADD और COMMIT करें
  5. मर्ज पर राइट क्लिक करें और चुनें पैच ...
  6. फ़ाइल को सूची से डबल क्लिक करें
  7. अंतर वाली पैच फ़ाइल को दाएँ फलक पर प्रदर्शित किया जाता है
  8. उस फलक पर क्लिक करें और फ़ाइल के साथ सहेजें या निर्यात करें-> इस रूप में सहेजें ...

यदि आप TortoiseMerge से ओपन करते हैं तो वैकल्पिक स्क्रीनसी। नीचे स्क्रीनसी में, निर्देशिका "मर्ज" निर्देशिका को संदर्भित करता है जो उपरोक्त चरण 2 में उल्लिखित है: Screeny

WinMerge जीयूआई का स्क्रीनशॉट: Screeny


@ArrenP: हाँ यह बताता है कि TortoiseMerge का उपयोग करके पैच कैसे
लगाया जाए

4
मेरी टिप्पणी ने संपादन से पहले समझ बनाई, और अब संपादन के बाद कोई मतलब नहीं है। क्या आप अभी तक भ्रमित हैं? ऊपर संपादित टाइमस्टैम्प (24 मार्च, 11) गलत प्रतीत होता है, क्योंकि ओपी ने अक्टूबर 2011 के बाद से अपना जवाब फिर से संपादित किया है। मुझे लगता है कि मेरी टिप्पणी पर टाइमस्टैम्प भी गलत है।
वॉरेन पी।

9
@SheriffMd क्या आपको "D: \ Folder कार्यशील प्रति नहीं है"
onmyway133

1
@SheriffMd मुझे संदेश "फ़ोल्डर ... एक कार्यशील प्रतिलिपि नहीं है" भी मिलता है - इसलिए, गैर-संस्करणित फ़ाइल पर पैच लागू करने के लिए कछुआ मर्ज का उपयोग कैसे संभव है?
पीटर टी।

1
@ onmyway133, मैंने चरणों को फिर से परिभाषित किया है। चरण 2 और चरण 4 देखें। आपको "काम नहीं करने वाली कॉपी" त्रुटि संदेश नहीं मिलेगा।
शेरिफ एमडी

21

मैंने उसके लिए शुद्ध पायथन उपकरण बनाया । इसमें अनुमानित क्रॉस-प्लेटफॉर्म व्यवहार है। हालाँकि यह नई फ़ाइलें नहीं बनाता है (यह लिखने के समय) और इसमें GUI का अभाव है, इसे ग्राफिक टूल बनाने के लिए लाइब्रेरी के रूप में उपयोग किया जा सकता है।

अद्यतन : यदि आपके पास पायथन स्थापित है, तो इसका उपयोग करना अधिक सुविधाजनक होना चाहिए।

pip install patch
python -m patch

1
मैं इसका भरपूर उपयोग करता हूं। धन्यवाद @techtonik पायथन 3 के साथ काम करने पर कोई खबर?
pelson

सुनिश्चित करें कि यह काम करता है के लिए व्यवस्थापक अधिकारों के साथ पाइप स्थापित पैच चलाएँ।
वर्टेक्वाहन

@Vertexwahn क्या यह लिनक्स पर है?
अनातोली टेकटोनिक

पायथन हर जगह चलता है - मैंने इसे विंडोज 10 के साथ परीक्षण किया
वेरटेक्वाहन

विंडोज 10 पर काम किया जब गिट पैच काम नहीं करेगा। धन्यवाद!
sqrl0

19

TortoiseMerge एक अलग उपयोगिता है जो TortoiseSVN के साथ बंडल में आती है।

इसे TortoiseDiff.zip संग्रह में अलग से भी डाउनलोड किया जा सकता है । यह आपको गैर-संस्करणित फ़ाइलों में एकीकृत रूप लागू करने की अनुमति देगा।


21
AFAIK यह गैर-संस्करणित फ़ाइल पर पैच लागू नहीं कर सकता है।
पीहेंटागी ३०'१३

मुझे गैर-संस्करण वाली फ़ाइल पर इसे लागू करने में कोई समस्या नहीं हुई।
पॉल शैनन

अन्य थोड़े चाहते हैं: एस।
उमेनोबे

1
संस्करण 1.8.7 संस्करण को नष्ट नहीं होने के बारे में एक त्रुटि देता है।
निक वेस्टगेट

15

मुझे पता है कि आपने कहा था कि आप एक जीयूआई पसंद करेंगे, लेकिन कमांडलाइन उपकरण काम को अच्छी तरह से करेंगे। Windows के लिए यूनिक्स उपकरणों के एक बंदरगाह के लिए GnuWin देखें । आपको पैच कमांड की आवश्यकता होगी, जाहिर है ;-)

आप लाइन समाप्ति के साथ एक समस्या में भाग सकते हैं, हालांकि। GnuWin पोर्ट यह मान लेगा कि पैचफ़ाइल में DOS स्टाइल लाइन समाप्ति (CR / LF) है। एक उचित स्मार्ट संपादक में पैचफ़ाइल को खोलने का प्रयास करें और यह आपके लिए इसे रूपांतरित कर देगा।


अच्छे से कहा। इस टिप्पणी के बिना लाइन समाप्ति की समस्या का पता नहीं लगा पाएंगे।
ब्रायन

लाइन एंडिंग से निपटने का दूसरा तरीका कमांड लाइन में "--binary" विकल्प जोड़ना है।
BeReal82

4
यह मुझे सही रास्ते पर मिला था। हालाँकि, विंडोज 7 या नया चलाना आपको हर बार UAC पॉप-अप होने से बचाने के लिए पैच ..exe के प्रकटन को अपडेट करने की आवश्यकता है। इस पेज को किस तरह देखें: math.nist.gov/oommf/software-patchsets/patch_on_Windows7.html
Anttu

1
यूएसी फिक्स के साथ भी, पैच का GnuWin संस्करण फ़ाइल सुरक्षा सेटिंग्स को गड़बड़ कर देता है। गिट के साथ भेज दिया गया निर्माण या तो समस्या से ग्रस्त नहीं है।
आर्टफंकेल

8

TortoiseSVN में, पैच लगाने से काम होता है। आपको उसी निर्देशिका में पैच लागू करने की आवश्यकता है, जिससे इसे बनाया गया था । इसे ध्यान में रखना हमेशा महत्वपूर्ण होता है। तो यहाँ आप इसे TortoiseSVN में कैसे करते हैं:

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

सौभाग्य।


8
यह मदद नहीं करता है। गंतव्य फ़ाइलें एक SVN संग्रह से बाहर नहीं आईं। (मूल पोस्ट का संपादन देखें।)
मेसन व्हीलर

8

Git स्थापना से पैच। Exe उपयोगिता विंडोज 10 पर काम करती है।

Windows के लिए Git इंस्टॉल करें और फिर "C:\Program Files\Git\usr\bin\patch.exe"पैच लगाने के लिए कमांड का उपयोग करें ।

यदि Hunk #1 FAILED at 1 (different line endings).पैच लगाने के दौरान आउटपुट पर कोई त्रुटि संदेश मिला था, तो कमांड लाइन में -l( --ignore-whitespaceया उसके लिए एक शॉर्टकट ) या --binaryस्विच जोड़ने का प्रयास करें ।


यह सवाल ज्यादातर आकस्मिक उपयोगकर्ताओं के लिए एक GUI उपकरण के बारे में है जो सामान्य कमांड-लाइन टूल से परिचित नहीं हैं। यदि आप कम से कम कुछ पूर्ण नमूना आदेश उदाहरण के रूप में प्रदान करते हैं तो आपका उत्तर अधिक उपयोगी होगा।
अल्वारो गोंजालेज

विंडोज 10 में कंपोज़र के साथ काम करता है
ecdani

7

आप पैच सुविधा के इस Win32 देशी पोर्ट का उपयोग कर सकते हैं ।

यह अन्य उपयोगिताओं का एक बड़ा चयन के साथ आता है और सिगविन के विपरीत और इसी तरह इसे किसी भी DLL या समान की आवश्यकता नहीं है। बस अपनी पसंद के छोटे निष्पादन योग्य को चुनें और इसे जहां चाहें स्टोर करें।

सरल उपयोग:

patch.exe -i <patchfile>

अधिक सहायता प्राप्त करें:

patch.exe --help

4
मुझे विंडोज 7 पर इससे परेशानी हो रही है: यह एक नया सीएमडी विंडो खोलता है और जब मैं चलाने का प्रयास करता हूं तो प्रशासनिक विशेषाधिकारों के लिए संकेत देता है patch.exe
रॉय टिंकर

3
पैच निष्पादन योग्य भी विंडोज बंडल के लिए गिट में पाया जा सकता है।
स्नेक्सि

6
यदि आप पैच.exe चलाने वाले मुद्दों में चल रहे हैं, तो आप इसे किसी भी चीज़ में शामिल कर सकते हैं patch। विंडोज मानता है कि सभी शब्द patchसंदिग्ध हैं।
22

2

संपादित करें: अब तक के उत्तरों को देखते हुए, ऐसा लगता है कि कछुआ केवल तभी इसे सही करेगा यदि यह एक फ़ाइल है जो पहले से ही संस्करणित है। यहाँ ऐसा नहीं है। मुझे एक ऐसी फ़ाइल पर पैच लागू करने में सक्षम होना चाहिए जो एक SVN रिपॉजिटरी से बाहर नहीं आई थी। मैंने सिर्फ कछुआ का उपयोग करने की कोशिश की क्योंकि मुझे पता है कि एसवीएन भिन्नता का उपयोग करता है और यह जानना है कि दोनों कैसे बनाते हैं और उन्हें लागू करते हैं।

आप Cygwin स्थापित कर सकते हैं , फिर पैच लगाने के लिए कमांड-लाइन पैच टूल का उपयोग कर सकते हैं। यह यूनिक्स मैन पेज भी देखें , जो पैच पर लागू होता है ।


4
हाँ, मैं कर सकता था। मुझे वास्तव में साइगविन मिला है। मैं शायद आपके समाधान का काम भी कर सकता हूं। मैं अपने उपयोगकर्ताओं को उस के माध्यम से नहीं रखने वाला हूँ, हालाँकि। आपको पता है कि इन दिनों कितने विंडोज उपयोगकर्ता यह भी नहीं जानते हैं कि कमांड लाइन क्या है? : पी
मेसन व्हीलर

2

ऐसा प्रतीत होता है कि TortoiseSVN (TortoiseMerge) कोIndex: foobar.py diff / पैच फ़ाइल में लाइन की आवश्यकता होती है । यह वही है जो मुझे TortoiseSVN के राइट-क्लिक लागू पैच कमांड के साथ एक गैर-कछुआ एसवीएन पैच फ़ाइल काम करने के लिए करने की आवश्यकता है ।

इससे पहले:

--- foobar.py.org   Sat May 08 16:00:56 2010
+++ foobar.py   Sat May 08 15:47:48 2010

उपरांत:

Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py   (working copy)

या यदि आप जानते हैं कि आपके योगदानकर्ता द्वारा किए गए विशिष्ट संशोधन से पता चलता है:

Index: foobar.py
===================================================================
--- foobar.py   (revision 1157)
+++ foobar.py   (working copy)

2

मैं http://www.ysys2.org/ से MSYS2 का उपयोग करता हूं

ऐसा लगता है कि कई उपयोगिताओं प्रदान करता है patch, which, git, tree, और कई और अधिक।

MSYS2 स्थापित करने के बाद बस पैकेज प्रबंधक चलाने के लिए स्थापित करें patch:

pacman -S patch

यह कमांड-लाइन टूल स्थापित करने का एक जटिल तरीका है। मुझे संदेह है कि आप केवल प्रश्न शीर्षक पढ़ते हैं न कि स्वयं प्रश्न। :)
--ल्वारो गोंजालेज

1

पैच यह बताता है कि किस फाइल पर आवेदन करना है। हेडर कुछ इस तरह होना चाहिए (नोटपैड या अपने फ़ेव टेक्स्ट एडिटर में देखें):

--- Folder/old_file
+++ Folder/new_file

एक तोड़फोड़ पैच के मामले में, आपके पास संशोधन संख्या भी होगी (चूंकि फ़ाइल नाम समान हैं)।

GNU पैच आपको उन नामों को ओवरराइड करने देगा , लेकिन मुझे ऐसा करने के लिए किसी GUI टूल के बारे में पता नहीं है। मैं विभिन्न भिन्न कार्यक्रमों के साथ जाँच करूँगा - हालाँकि, ऐसा नहीं लगता कि WinMerge पैच लगाने का समर्थन करता है।


नहीं, मेरे पैच के शीर्ष पर ऐसा कुछ नहीं है। क्या आप कह रहे हैं कि फ़ाइल नाम और पथ को अलग-अलग में शामिल करना है? किसने सोचा था कि ऊपर? यदि आप किसी ऐसे व्यक्ति को एक अंतर वितरित करना चाहते हैं जो अन्य फ़ोल्डर्स में स्थापित चीजें हो सकता है?
मेसन व्हीलर

पैच का शीर्ष इस तरह से शुरू होता है: --- / +++ / @@ -6,12 +6,12 @@ कोई फ़ाइल नाम या कुछ भी नहीं। एक अंतर्निहित मार्ग कैसे काम करने वाला है? क्या होगा अगर मैंने XP पर पैच बनाया और किसी ने विस्टा (या इसके विपरीत) पर इसका उपयोग करने की कोशिश की और दस्तावेज़ फ़ोल्डर का रास्ता अलग है?
मेसन व्हीलर

1
फ़ाइल नाम, रिपॉजिटरी की मूल निर्देशिका के सापेक्ष हैं, इसलिए XP / Vista फ़ोल्डर संरचना अंतर कोई फर्क नहीं पड़ता। और पैच में फाइलनेम होने का कारण यह है कि अधिकांश पैच कई फाइलों को प्रभावित करते हैं।
डेविड जेड

समझा। ठीक है, यह अधिक समझ में आता है। कि समाशोधन के लिए धन्यवाद, डेविड!
मेसन व्हीलर

1

ग्रहण इसे करने में सक्षम होना चाहिए, TeamSynchronize परिप्रेक्ष्य में जाएं और फिर Project-> पैच लागू करें


1

जावा प्रोजेक्ट्स के लिए, मैंने पैच फाइल लगाने के लिए नेटबीन्स का उपयोग किया है । यदि आप जिस जावा कोड को पैच कर रहे हैं, वह पहले से ही नेटबींस प्रोजेक्ट नहीं है, तो इसके लिए एक प्रोजेक्ट बनाएं। एक नई परियोजना बनाने के लिए:

  • मेनू फ़ाइल चुनें -> नई परियोजना
  • परिणामी संवाद में, इसे जावा एप्लिकेशन प्रोजेक्ट बनाएं । इसे संवाद में नाम दें, और क्लिक करें Finish
  • अपनी परियोजना के नाम पर राइट-क्लिक करें, और संदर्भ मेनू से गुण चुनें
  • परिणामी संवाद में, स्रोत का चयन करें , और स्रोत फ़ोल्डर जोड़ें । अपने जावा स्रोत में ब्राउज़ करें।

अब आपके पास एक परियोजना है, पैच लागू करें:

  • इसे चुनने के लिए अपने प्रोजेक्ट को हाइलाइट करें
  • मुख्य मेनू से, मेनू टूल चुनें -> डिफैक्ट पैच लागू करें
  • परिणामी संवाद में, अपनी पैच फ़ाइल में ब्राउज़ करें, इसे चुनें, और पैच बटन दबाएं।

बस। आपके पैच को लागू किया जाना चाहिए, और आपको परिवर्तनों को दिखाते हुए एक अलग विंडो दिखनी चाहिए।


1

मैं पहले से ही भिन्न और विलय के लिए BeyondCompare (वाणिज्यिक) का उपयोग कर रहा हूं, और इस उपकरण में पैच बनाने, देखने और लागू करने की क्षमता भी है


1

यदि आप मर्क्यूरियल का उपयोग कर रहे हैं , तो यह "आयात" के माध्यम से किया जाता है। तो कमांड लाइन पर, hg importकमांड, या (आप --no-commitविकल्प उपयोगी पा सकते हैं ), या "रिपोजिटरी" => "आयात ..." एचजी कार्यक्षेत्र में।

ध्यान दें कि ये डिफ़ॉल्ट रूप से परिवर्तन करेंगे; hg import --no-commitयदि आप कमांड-लाइन का उपयोग कर रहे हैं, या यदि आपने Hg कार्यक्षेत्र का उपयोग किया है, तो आप इस विकल्प से बच सकते हैं , आप hg rollbackमर्ज के बाद इसे जारी करने के लिए उपयोगी हो सकते हैं ।


ठीक वही जो मेरे द्वारा खोजा जा रहा था! मैं सोच रहा था कि कमिट से कैसे बचा जाए।
केशव

0

TortoiseSVN का उपयोग करके पैच लागू करते समय, मैं आमतौर पर चेक आउट किए गए भंडार के रूट में पथ को सहेजता हूं। फिर आपको पैच पर राइट क्लिक करने में सक्षम होना चाहिए, TortoiseSVN मेनू पर जाएं और ApplyPatch पर क्लिक करें। ApplyPatch को स्वचालित रूप से यह पता लगाना चाहिए कि निर्देशिका पदानुक्रम में किस स्तर पर पैच बनाया गया था।

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


0

क्या आपके पास दो मॉनिटर हैं? मैं TortoiseMerge के साथ एक ही मुद्दा रहा था और मुझे एहसास हुआ कि जब मैं फ़ाइल विंडो सूची के साथ छोटी खिड़की के एक मॉनिटर को अक्षम करता था। आशा है कि यह आपकी मदद करता है।


0

यदि आपको "Not a working copy" त्रुटि संदेश मिल रहा है, तो TortoiseMerge डायलॉग बॉक्स से एक डायरेक्टरी चुनने की कोशिश करें जो SVN की वर्किंग डायरेक्टरी है।


0

एक बिजीबॉक्स विंडोज के लिए बंदरगाह दोनों एक अंतर और पैच आदेश है, लेकिन वे केवल एकीकृत प्रारूप का समर्थन।


0

महज प्रयोग करें:

patch -p0 < path-file.patch

याद रखें इस कमांड को केवल उस फोल्डर लोकेशन से निष्पादित करें जहाँ आपने पैच बनाया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.