2012-09-07 17 views
271

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

स्पष्ट रूप से मैं लाइन से लाइन जा सकता हूं और सबकुछ पुनः टाइप कर सकता हूं, लेकिन मैं सिस्टम को मानव त्रुटि के अधीन नहीं रखूंगा। ऐसा करने का सबसे आसान तरीका क्या है?

उत्तर

406

कॉपी अपने भंडार की जड़ तक diff फ़ाइल, और उसके बाद कार्य करें:

git apply yourcoworkers.diff 

अधिक apply आदेश के बारे में जानकारी its man page पर उपलब्ध है।

वैसे: फ़ाइल द्वारा पूरे कामों का आदान-प्रदान करने का एक बेहतर तरीका प्रेषक पर git format-patch के आदेशों का संयोजन है और फिर git am रिसीवर पर है, क्योंकि यह लेखक की जानकारी और प्रतिबद्ध संदेश भी स्थानांतरित करता है।

यदि पैच एप्लिकेशन विफल रहता है और यदि वास्तव में आपके रेपो में भिन्नता उत्पन्न होती है, तो आप apply विकल्प का उपयोग कर सकते हैं जो परिवर्तनों में विलय करने का प्रयास करता है।

यह भी इस प्रकार यूनिक्स पाइप के साथ काम करता है:

git diff d892531 815a3b5 | git apply 
+1

उत्तर के लिए धन्यवाद, लेकिन वह कह रही है एक त्रुटि के कारण होता है, पैच विफल रहा: filename.php: 202 त्रुटि: filename.php: पैच लागू नहीं होता। अच्छी खबर यह है कि यह फ़ाइल में पहला फ़ाइल नाम नहीं है, इसलिए कम से कम कुछ फाइल को संसाधित करने में सक्षम होता। कोई विचार? –

+1

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

+0

फ़ाइल इस diff फ़ाइल का उपयोग करने के लिए इस मामले में मौजूद से अलग था। मैं आगे बढ़ गया और इसे मैन्युअल रूप से किया, लेकिन सही कमांड के लिए +1, और मैं स्वीकार करूंगा कि यह सही जवाब होना चाहिए था। –