2013-04-12 10 views
5

क्या git pull करते समय कोई विकल्प है जो मर्ज विवाद की किसी भी संभावना की अनुमति नहीं देगा? मैंने merge strategies पर देखा है लेकिन कोई भी इस विवरण को पूरा नहीं कर रहा है। मैं git pull --quit_if_possible_mergeगिट पुल विकल्प

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

+0

आप एक संघर्ष क्यों होता है अगर आप केवल खींच रहे हैं और कभी नहीं अपने उत्पादन क्लोन में कुछ भी बदल रहा है? – gview

+1

ऐसा कोई झंडा नहीं है, लेकिन यह सुनिश्चित करना एक अच्छा विचार है कि इस समस्या से बचने के लिए आपकी मास्टर शाखा हमेशा फास्ट-फॉरवर्ड विलय कर सकती है। – mipadi

+0

ध्यान दें कि Git 2.0 एक उपयोगी 'push.ff' सेटिंग का परिचय देंगे: देखें [नीचे मेरा उत्तर] (http://stackoverflow.com/a/22354645/6309) – VonC

उत्तर

8

के बारे में क्या:

git pull --ff-only 

तो क्या अन्य उत्तर में कहा गया है सच है, यह वास्तव में वांछित प्रभाव होना चाहिए। नहीं?

--ff-only ध्वज "फास्ट-फॉरवर्ड" के लिए खड़ा है, इस प्रकार गिट एक ऐसी स्थिति को संदर्भित करता है जिसमें विलय करने वाली शाखाओं में से एक दूसरे (सख्त सुपरसेट) के सभी काम करता है। यह विशेष है क्योंकि इसका मतलब है कि कोई मर्ज टकराव संभव नहीं है। आगे की शाखा पर ऐसा प्रतिबद्धता बस अन्य शाखा में जोड़ दी जाती है और हर कोई खुश है।

+3

इस उत्तर बेहतर होगा कि यह क्या -ff समझाया केवल झंडा करता है। – KatieK

+0

"एफएफ" "फास्ट फॉरवर्ड" के लिए खड़ा है, इस प्रकार गिट एक ऐसी स्थिति को संदर्भित करता है जिसमें विलय करने वाली शाखाओं में से एक दूसरे के सभी काम (सख्त सुपरसैट) होती है। यह विशेष है क्योंकि इसका मतलब है कि कोई मर्ज टकराव संभव नहीं है। आगे की शाखा पर ऐसा प्रतिबद्धता बस अन्य शाखा में जोड़ दी जाती है और हर कोई खुश है। – emersonthis

+0

क्यों नहीं 'गिट पुल - केवल-केवल'? –

3

मुझे नहीं लगता कि ऐसा कोई झंडा है। अगर कुछ संघर्ष करता है तो यह संघर्ष करता है और इसे संभालने की आवश्यकता होती है। लेकिन एक मर्ज रणनीति है जो विलय विवादों की गारंटी नहीं देती है: उत्पादन साइट पर कुछ भी संशोधित या प्रतिबद्ध न करें।

यदि उत्पादन साइट पर कुछ भी नहीं किया गया है तो इसके साथ संघर्ष करने के लिए कुछ भी नहीं है। अपनी स्थानीय मशीन पर उत्पादन शाखा पर विलय करें और उत्पादन साइट से खींचने से पहले सभी विलय विवाद को हल करें।

3

जैसा कि पहले से ही दूसरों द्वारा बताया गया है: यदि आप स्थानीय भंडार में कुछ भी करते हैं तो आप केवल विलय विवाद प्राप्त कर सकते हैं। यदि आप नहीं करते हैं तो आपको कोई मर्ज विवाद नहीं मिलेगा।

आप कुछ भी नहीं की है, लेकिन आपको अंदर आप स्थानीय Git भंडार काम कर रहे थे, यानी आप फाइल या नए लोगों को बनाया बदल गया है, एक git pull अभी भी आप मुसीबत में, मिल जाएगा जब वह अपने संशोधित फ़ाइलों को अद्यतन करने की जरूरत है। - इसलिए, सीधे अपने स्थानीय भंडार के अंदर काम न करें और आप ठीक हैं।

अगला यदि आप अपने स्थानीय भंडार के अंदर काम करने पर जोर देते हैं और git pull को अपनी फ़ाइलों को अपडेट करने के बारे में सोचते हैं। आपको यह तय करना होगा कि आपकी संशोधित फाइलों के साथ क्या होगा। यदि आप बस सभी स्थानीय परिवर्तनों को त्यागना चाहते हैं और केवल फ़ाइलों को रिमोट रिपोजिटरी में प्राप्त करना चाहते हैं तो आप git fetch;git reset --hard @{u} कर सकते हैं।

1

जब Git में विलय आप मर्ज निम्न प्रकार के कर सकते हैं:

git merge -ff-only branch_to_merge_into_this_one 

अगर Git देखता है कि अपने मर्ज तेजी से आगे दृष्टिकोण का उपयोग कर पूरा किया जा सकता यह केवल अपने मर्ज को पूरा करेगा। अन्यथा गिट विलय को रोक देगा और आपको बताएगा कि विलय तेजी से आगे के रूप में संभव नहीं है।

तो फास्ट-फॉरवर्ड विलय क्या है जिससे यह आपको आश्वस्त कर सके कि एक विलय संघर्ष नहीं होगा। एक तेज़ आगे विलय प्रश्न में दो शाखाओं के प्रतिबद्ध इतिहास की समीक्षा करता है (ए और बी कहें जहां आप बी में विलय कर रहे हैं) और फिर यह देखने के लिए जांच करता है कि बी में ए के पूर्ण प्रतिबद्धता इतिहास शामिल हैं या नहीं, इसके अतिरिक्त, ए में शामिल नहीं है कोई भी ऐसा काम करता है जो बी का हिस्सा नहीं है। इसका मतलब है कि बी में विलय होने पर यह करने के लिए बचाया जाता है, फिर बी के सभी नए कामों को ए के सिर के शीर्ष पर ढेर करके और फिर बी के सिर पर ए के सिर को स्थानांतरित करके विलय कर दिया जाता है।इस फैशन में परिवर्तन सेट रैखिक रूप से लागू होते हैं और विरोधाभासी संपादन का कोई मौका नहीं है क्योंकि गिट के पास अपने प्रतिबद्ध इतिहास में पर्याप्त जानकारी होगी कि आप कौन से परिवर्तन करते हैं और नहीं चाहते हैं।

1

Git 2.0 (Q2 2014) push.ff साथ commit b814da8 में नई सेटिंग जोड़ने:

आपके मामले में:

git config push.ff only 

pull.ff:: 

डिफ़ॉल्ट रूप से, Git एक अतिरिक्त मर्ज का निर्माण नहीं करता है जब एक विलय के लिए प्रतिबद्ध प्रतिबद्ध करें कि वर्तमान प्रतिबद्धता का वंशज है। इसके बजाए, वर्तमान शाखा की नोक तेजी से अग्रेषित है।

  • false को सेट करते हैं, इस चर Git बताता है एक अतिरिक्त मर्ज तरह के एक मामले में प्रतिबद्ध (कमांड लाइन से --no-ff विकल्प दे के बराबर) बनाने के लिए।
  • only पर सेट होने पर, केवल ऐसे फास्ट-फॉरवर्ड विलय की अनुमति है (कमांड लाइन से --ff-only विकल्प देने के बराबर)।
संबंधित मुद्दे