मैं git और संस्करण नियंत्रण दोनों के लिए नया हूं, इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि पैच क्या है और यह उन सभी गतिविधियों से अलग है जो मैं git में करता हूं?
मैं एक पैच कब लगाऊं? क्या यह हर बार जब मैं करता हूं?
मैं git और संस्करण नियंत्रण दोनों के लिए नया हूं, इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि पैच क्या है और यह उन सभी गतिविधियों से अलग है जो मैं git में करता हूं?
मैं एक पैच कब लगाऊं? क्या यह हर बार जब मैं करता हूं?
जवाबों:
आप इस ब्लॉग पोस्ट में देख सकते हैं कि आप एक पैच कैसे बना सकते हैं (उन परिवर्तनों का संग्रह जो आप किसी अन्य रेपो से संवाद और लागू करना चाहते हैं)
(2008 ब्लॉग पोस्ट से तस्वीर " Git साथ Bioruby: कैसे होगा कि काम ", द्वारा प्रकाशित जनवरी AERTS )
एक अन्य ठोस उदाहरण के रूप में गिट के साथ रेल का योगदान भी देखें ।
आजकल, GitHub पुल अनुरोध GitHub repos पर पैच को लागू करना वास्तव में आसान बनाता है , जो तब उपयोगी होता है जब आप प्रत्यक्ष योगदानकर्ता नहीं होते हैं (यानी आपको सीधे रेपो पर पुश करने का कोई अधिकार नहीं है)।
दरअसल, हाल ही में GitHub ने नए पैच की सूचना में सुधार करने के लिए " बेहतर पुल अनुरोध ईमेल " पेश किया।
पैच एक यूनिक्स कार्यक्रम है जो एक अलग फ़ाइल में निहित निर्देशों के अनुसार पाठ फ़ाइलों को अद्यतन करता है, जिसे पैच फ़ाइल कहा जाता है।
तो, दूसरे शब्दों में इसका मतलब हो सकता है कि निर्देश के साथ फाइल या एक प्रोग्राम जो उस फाइल को प्रोसेस करता है और इसे किसी चीज पर लागू करता है।
अब, पैच फाइल क्या है? मान लें कि आपके पास 2 पंक्तियों के साथ एक पाठ फ़ाइल है:
This is line A.
This is line B, or otherwise #2.
तब आप पहली पंक्ति बदलते हैं, और अब आपकी फ़ाइल इस तरह दिखती है:
This is SPARTA.
This is line B, or otherwise #2.
आप फ़ाइल की सामग्री में परिवर्तन का वर्णन कैसे करेंगे? आप कह सकते हैं कि पहली पंक्ति "यह लाइन ए है।" "यह SPARTA" है, या यहां तक कि पहली पंक्ति के अंतिम शब्द "A" को दूसरे शब्द "SPARTA" से बदल दिया गया। और वह वास्तव में क्या है अंतर हमें बताता है। मान लें कि मेरे पास इस फ़ाइल के दो संस्करण हैं, एक को file1.txt और दूसरे को file2.txt कहा जाता है, फिर मैं अंतर चलाता हूं और इसे प्राप्त करता हूं:
$ diff -u file1.txt file2.txt
--- file1.txt 2011-11-26 11:07:03.131010360 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
परिवर्तनों का विवरण होने पर, आप इसे प्रारंभिक सामग्री पर लागू कर सकते हैं और संशोधित सामग्री प्राप्त कर सकते हैं। और उन बदलावों को एकीकृत प्रारूप में रखा गया है जो "पैच" जैसे प्रोग्राम समझ सकते हैं, उन्हें पैच फ़ाइल कहा जाता है। यह ऐसा है जैसे वे किसी से मछली प्राप्त करने के बजाय आपको सिखाते हैं कि आप मछली कैसे बनाते हैं, ताकि आप स्वयं उस मछली को पानी से बाहर निकाल सकें। अब, यह फ़ाइल2.txt के लिए हमारे पैच लागू करते हैं ताकि यह बिल्कुल file2.txt की तरह दिखाई दे:
$ cat file1.txt
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch
--- file1.txt 2011-11-26 11:09:38.651010370 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
$ patch < changes.patch
patching file file1.txt
$ cat file1.txt
This is SPARTA.
This is line B, or otherwise #2.
$
आप सोच सकते हैं कि इस फ़ाइल के केवल दो संस्करण होना आसान है। खैर, इस सरल मामले में यह सच है। लेकिन जब आपके पास बहुत सारी फाइलें होती हैं, और वे फाइलें बहुत बड़ी होती हैं, तो पूरी चीज़ की दो प्रतियों के बजाय कुछ लाइनों में बदलाव करना बहुत अधिक कुशल होता है।
जब git के संदर्भ में बात की जाती है, तो पैच फ़ाइल का अर्थ अभी भी एक ही होता है, लेकिन diff + पैच का उपयोग करना एक बुरा सपना होगा। उदाहरण के लिए, आपको उनकी तुलना करने के लिए हमेशा फ़ाइल के दो संस्करण (या संपूर्ण रिपॉजिटरी) की जाँच करनी होगी। क्या यह अच्छा नहीं लगता है? तो git आपके लिए सभी कड़ी मेहनत का ख्याल रखता है - यह आपकी स्थानीय फ़ाइल की तुलना उस स्थान के साथ करता है, जिसमें आप जिस रिपॉजिटरी में काम कर रहे हैं, वहाँ है, और इसे "अंतर" के रूप में आपको दिखा सकता है, या "diff" को एक के रूप में लागू कर सकता है पैच aka आपके परिवर्तन करता है, या आपको कुछ पैच फ़ाइल भी लागू करने देता है जो आपके पास पहले से हैं। विवरण में गहराई से जाने के बिना, इस अर्थ में गिट बिल्कुल अन्य संस्करण नियंत्रण प्रणाली जैसे कि एसवीएन, या यहां तक कि सीवीएस या पेरफोर्स के समान है।
आशा करता हूँ की ये काम करेगा!
patch
कार्यक्रम का उपयोग करता है । मुझे लगा कि जीआईटी का अपना कार्यान्वयन है।
पैच एक छोटी फ़ाइल है जो रिपॉजिटरी में किए गए परिवर्तनों को इंगित करता है। यह आमतौर पर तब उपयोग किया जाता है जब आपकी टीम के बाहर के किसी व्यक्ति के पास केवल-पढ़ने के लिए पहुंच होती है, लेकिन एक अच्छा कोड परिवर्तन उपलब्ध होता है। वह फिर एक पैच बनाता है और आपको भेजता है। आप इसे लागू करते हैं और इसे गिट रिपॉजिटरी में धकेल देते हैं। फिर अपडेट किए गए संस्करण से सभी को लाभ होता है, और पैच के लेखक को पढ़ने / लिखने की पहुंच की आवश्यकता नहीं होती है।
यह वास्तव में मुख्य रूप से एक सुरक्षा चीज है (कम से कम, यही लोग इसका उपयोग करते हैं)।
git diff
डिफ़ॉल्ट रूप से पैच के रूप में परिवर्तन दिखाता है, git apply
आपको पैच इत्यादि लागू करने देता है)।
एक पैच फ़ाइल किसी भी क्रम में, किसी भी शाखा में लागू किए जा सकने वाले परिवर्तनों के एकल सेट का प्रतिनिधित्व करती है। पैच का उपयोग करके, आपको एक या अधिक फ़ाइलों के बीच अंतर मिलेगा। और बाद में, आप नई फ़ाइलों पर परिवर्तन प्राप्त करने के लिए अंतर (पैच) लागू कर सकते हैं। गिट में एक पैच के लिए कई उपयोग हैं। यदि आपने अपनी कार्यशील निर्देशिका में परिवर्तन नहीं किए हैं, और आपको उस परिवर्तन को कहीं और लागू करने की आवश्यकता है, तो बस एक पैच बनाएं और पैच लागू करें।
git diff > mypatch.patch
यदि आपके पास अपनी रिपॉजिटरी (अनट्रैक) में नई फाइलें हैं, तो आपको एक पैच बनाने से पहले फाइल को स्टेज करना चाहिए (कमिट नहीं करें), और निम्न कमांड का उपयोग करें
git diff --cached > mypatch.patch
आप बाद में पैच लागू कर सकते हैं:
git apply mypatch.patch
यदि आप गिट रिपॉजिटरी में कुछ बदलाव करना चाहते हैं, तो आपके पास लिखित अनुमति नहीं है, बस बदलाव करें और दोनों के बीच एक पैच बनाएं, और पैच को किसी को भेजें जिसे पैच लगाने की अनुमति है, इसके द्वारा आपके परिवर्तन उस गिट रिपॉजिटरी में जोड़े जाने चाहिए।
git format-patch <base_commit_or_branch_name>
= अब से सभी कमिटों को रैप करें <bas_commit_or_branch_name> अच्छी और साफ-सुथरी फाइलों में, साथ ही साथ कमिट मैसेजेस के लिए, आसानी से भेजने (पूर्व: ईमेल के माध्यम से) किसी और को उन्हें पैच करना चाहते हैं। उनका कोड आधार। तब प्राप्तकर्ता आपकी फाइल के साथ अपने सिस्टम को पैच करता है:cat *.patch | git am
पैच एक या एक से अधिक फ़ाइलों के बीच अंतर का एक सेट है, यह दिखाने के लिए कि उनके बीच क्या अलग है। आप आमतौर पर किसी को दिखाने के लिए केवल एक पैच उत्पन्न करेंगे जो आपने बदल दिया है। जब आप ऐसा कर सकते हैं तो इसका एक उदाहरण है जब आप किसी ओपन सोर्स एप्लिकेशन में बग ढूंढते हैं और ठीक करते हैं और फिर उनके बग ट्रैकर पर फिक्स पोस्ट करते हैं।