2013-04-24 7 views
85

मैं विंडोज़ पर हूं।पैच लगाने पर संघर्ष सुलझाने का कोई तरीका है?

विभिन्न कारणों से हमारे पास विभिन्न svn शाखाओं के कई गिट उदाहरण हैं।

कई बार मैंने, भंडार एक में किसी समस्या को ठीक एक पैच उत्पन्न, और बी भंडार करने के लिए इस को छोड़कर अगर वहाँ संघर्ष कर रहे हैं ठीक काम करता है इसे लागू करना चाहते।

पुन: प्रयास करते समय मैं बस फ़ोल्डर पर राइट क्लिक करें और tortioseGit का उपयोग करें और समाधान विकल्प का चयन करें। यह मुझे मेरे संघर्षों के माध्यम से काम करने के लिए एक अच्छा गुई लाता है।

क्या इसे अस्वीकार पैच भागों के साथ पूरा करने का कोई तरीका है?

यहाँ बनाने/पैच

git format-patch master --stdout > c:\\patch\\file.patch 
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch 
+3

मैं आमतौर पर हाथ से करते हैं जब सब पैचिंग विकल्पों असफल ... – stdcall

+0

मर्ज विफल रहता है, इसकी वजह है प्रोग्राम _can't_ यह पता लगाने के लिए कि कैसे अस्पष्ट रूप से विलय करना है। आपको <<<<, ===, > >>> सेट के साथ एक फ़ाइल प्राप्त करनी चाहिए और आपको हाथ में जाना होगा और उन्हें हल करना होगा। – tacaswell

+0

हाँ यह हाथ से कर रहा है एक असली पिटा है जब आप कुछ 100 रीज शिकारी बात करते हैं। – Kenoyer130

उत्तर

151

उत्पन्न करने के लिए अपने पैच निम्न कार्य करें:

git format-patch --stdout first_commit^..last_commit > changes.patch 

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

git am -3 < changes.patch 

-3 एक तीन तरह से विलय अगर वहाँ संघर्ष कर रहे हैं कर सकते हैं। यदि आप एक जीयूआई के लिए जाने के लिए या सिर्फ मैन्युअल vim (मानक <<<<<<, ||||||, >>>>>> संघर्ष समाधान) का उपयोग करके फ़ाइलें मर्ज करना चाहते हैं इस बिंदु पर आप एक git mergetool कर सकते हैं।

+0

मुझे '...' नोटेशन के बारे में पता नहीं था; यह [gitrevisions (7)] (https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html) मैन पेज में प्रलेखित है। –

+0

निश्चित रूप से आप जो काम करना चाहते हैं उसे प्राप्त करने के कई तरीके हैं और कुछ भी नहीं ... यह कहा जा रहा है कि, जो मैं व्यक्त करने की कोशिश कर रहा था वह वह नहीं है जो मैंने वास्तव में कहा था ... अब यह वास्तव में तय करना है कि मैं क्या चाहता था .. (या तो मुझे लगता है ...) ... – g19fanatic

+2

'gign am' में '--ignore-whitespace --ignore-space-change' जोड़ने के लिए भी उपयोगी हो सकता है। मेरे पास छोटे विलय थे जो इसके बिना नहीं गए थे। – angularsen

2

TortoiseGit मर्ज विशेषता यह है कि पैच फ़ाइलें खोल सकते हैं है को लागू करने के लिए मेरे वर्तमान दृष्टिकोण है।

इसकी एक तस्वीर here है।

+0

वास्तव में मर्ज विकल्प हो सकता है कि मैं क्या करूँ खोज रहे हैं – Kenoyer130

+0

एनएम के पास पैच फ़ाइल आयात करने का कोई तरीका नहीं है ... – Kenoyer130

+0

वास्तव में? मैंने लंबे समय तक कछुआ का उपयोग नहीं किया है, लेकिन लिंक्ड पेज में टेक्स्ट है "टोर्टोइज मेर्ज सीधे गिट पैच फ़ाइल खोल सकता है, आप इसकी समीक्षा कर सकते हैं और काम करने वाली प्रतिलिपि पर पैच कर सकते हैं।", ऐसा लगता है कि ऐसा होना चाहिए! – ams

7

आप अक्सर पैच लागू करने, रिबेसिंग या विलय तो आप Git rerere (पुन: उपयोग दर्ज की संकल्प) फ़ंक्शन का उपयोग कर सकते हैं एक ही संघर्ष सेट में चला रहे हैं। यह आपको पूर्व-परिभाषित करने की अनुमति देता है कि आपने अतीत में उन्हें कैसे हल किया है, इस पर आधारित संघर्षों का समाधान कैसे किया जाना चाहिए। यह कैसे काम करता है इसके विवरण के लिए http://git-scm.com/blog/2010/03/08/rerere.html देखें।

0

मेरे दृष्टिकोण है:

  • एक "एकता" -Branch बनाएं जहां फाइलों समान
  • इस एकता-शाखा
  • मर्ज करने के लिए पैच लागू करें या इसे महारत हासिल करने के rebase (नहीं कर रहे हैं यदि रिबेस यहाँ उपयोगी है, क्योंकि मैं नहीं जानता कि जब आगे पैच लागू करने के क्या होगा)
संबंधित मुद्दे