गिट प्रारूप-पैच के साथ उत्पन्न पैच कैसे लागू करें?


221

मेरे पास 2 git स्थानीय रिपॉजिटरी हैं जो एक ही रिमोट रिपॉजिटरी की ओर इशारा करते हैं।

एक गिट रिपॉजिटरी में, अगर मैं करता हूं, तो मैं git format-patch 1उस पैच को दूसरे रिपॉजिटरी में कैसे लागू कर सकता हूं?

जवाबों:


330

नोट: आप पहले देख सकते हैं कि आपका पैच क्या करेगा:

पहले आँकड़े:

git apply --stat a_file.patch

फिर त्रुटियों का पता लगाने के लिए एक सूखा रन:

git apply --check a_file.patch

अंत में, आप git amअपने पैच को एक प्रतिबद्ध के रूप में लागू करने के लिए उपयोग कर सकते हैं : यह आपको एक लागू पैच पर हस्ताक्षर करने की अनुमति देता है।
यह बाद के संदर्भ के लिए उपयोगी हो सकता है।

git am --signoff < a_file.patch 

इस लेख में एक उदाहरण देखें :

आपके गिट लॉग में, आप पाएंगे कि प्रतिबद्ध संदेशों में एक "हस्ताक्षरित-बंद" टैग शामिल है। इस टैग को गिथब और अन्य लोगों द्वारा इस बारे में उपयोगी जानकारी प्रदान करने के लिए पढ़ा जाएगा कि कोड में प्रतिबद्धता कैसे समाप्त हुई।

उदाहरण


9
स्वयं पर ध्यान दें: 200 वां महान उत्तर सोने का बिल्ला।
वॉनसी

4
git am < somepatch.patchपैदावार "घातक: खाली पहचान नाम (<> के लिए) की अनुमति नहीं है"। क्या कोई मुझे समझा सकता है क्यों?
gromit190

@ gromit190 जिसका अर्थ है कि Authorपैच में खराब हेडर, और / या आपने नहीं किया git config user.{name,email}
ulidtko

ठीक है; git apply --checkकहते हैं patch does not apply, और git apply -3कहते हैं कि repository lacks the necessary blob to fall back on 3-way merge.गिट में, पुन: शुरू करना एक ऐसी हवा है; लेकिन लोग अपडेटेड कोड के शीर्ष पर अपने पैच को कैसे रिबेट करते हैं ?
ulidtko

1
साथ हो सकता है कि @ulidtko stackoverflow.com/a/15375869/6309 ?
वॉन

163
git apply name-of-file.patch

25
यह मूल विस्तृत प्रश्न का उत्तर नहीं दे सकता है, लेकिन इसने शीर्षक में प्रश्न का उत्तर दिया है कि मैं इस पृष्ठ पर क्यों हूं। धन्यवाद!
रॉक ली

12
मैं समझता हूं कि यह एक पुराना सवाल और जवाब है ... लेकिन मुझे लगा कि यह कुछ लोगों के लिए मददगार हो सकता है कि वे git apply और git am के बीच के अंतर को समझ सकें ।
mgarey

1
git लागू करें "[... फ़ाइल का पूर्ण पथ ...] / name-of-file.patch"
एंटोन

41

या, यदि आप इसे पुराने स्कूल में मार रहे हैं:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
बस इतना है कि आप जानते हैं: यह एक कमिट नहीं बनाएगा, इसलिए यह प्रतिबद्ध संदेश और लेखक की जानकारी खो देगा।
सीज़र

22

सबसे पहले आप के बारे में ध्यान देना चाहिए अंतर के बीच git amऔरgit apply

जब आप उपयोग कर रहे हैं git amतो आप आमतौर पर कई पैच लागू करना चाहते हैं। इस प्रकार उपयोग करना चाहिए:

git am *.patch

या केवल:

git am

Git पैच को स्वचालित रूप से ढूंढेगा और उन्हें क्रम में लागू करेगा ;-)

UPD
यहां आप पा सकते हैं कि इस तरह के पैच कैसे बनाए जा सकते हैं


1
अंतर की इस व्याख्या ने मुझे उपयोग करने में मदद की git apply.. और --reverse:-)
Jordan


14

यदि आप JetBrains IDE (जैसे IntelliJ IDEA, Android Studio, PyCharm) का उपयोग कर रहे हैं, तो आप पैच फ़ाइल को खींच सकते हैं और इसे IDE के अंदर छोड़ सकते हैं, और पैच की सामग्री दिखाते हुए एक संवाद दिखाई देगा। अब आपको बस "पैच लागू करें" पर क्लिक करना है, और एक कमिट बनाया जाएगा।


1
इसके लिए धन्यवाद। यह वास्तव में सभी के लिए उपयोगी है। एक स्वीकृत उत्तर है। लेकिन यह भी उपयोगी है।
लसिथ बनारगामा

1
@ambarox लेकिन इस जवाब को एक बार अस्वीकार कर दिया गया था, मुझे पता नहीं क्यों
ice1000

1
किसी को लगता है कि केवल पैच लगाने का तरीका कमांड लाइन के माध्यम से हो सकता है। : D मैंने तुम्हें एक उत्थान दिया। चीयर्स दोस्त।
लसिथ बनारगामा

1
@LasithaBenaragama - तरह का। SO का मतलब केवल ओपी की मदद करना नहीं है, बल्कि हर कोई जो इसका पालन करता है। यह उत्तर (जबकि उपयोगी) एक सामान्य समाधान प्रदान नहीं करता है। यह एक उत्कृष्ट छोटे ब्लॉग पोस्ट को बनाएगा, लेकिन "SO अच्छा" उत्तर नहीं। नीचे की व्याख्या करेंगे!
OldTinfoil

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