मैगिट में एक स्थानीय शाखा को पुश करने के लिए मैं अपस्ट्रीम शाखा कैसे सेट करूं?


11

मुझे जो याद है, अगर मैं एक शाखा पर काम कर रहा हूं, उदाहरण के लिए my-feature-branch, मैं इसके magit-statusसाथ मेनू से ऐसा करने में सक्षम था P P, और फिर एक सूची से दूरस्थ शाखा का चयन करना जो origin/my-feature-branchशीर्ष पर थी । इसने खूबसूरती से काम किया।

हाल ही में, इस चर्चा के रूप में , मैं कुछ ऐसा ही कर सकता था P -u e( ध्वज को खोलना magit-push-popup, --set-upstreamध्वज स्थापित करना , और eअन्यत्र उपयोग करना), जो मुझे शुरू होने वाली शाखाओं की सूची से चुनने देगा origin/my-feature-branch। इसने मेरे लिए भी ठीक काम किया। हाल ही में और भी, यह अब काम नहीं करता है, और मैं एक अपस्ट्रीम शाखा को स्थापित करने का सबसे अच्छा तरीका समझ नहीं पाया हूं।

जब मैं P eपुश करने के लिए एक शाखा के लिए पहला विकल्प का उपयोग करता हूं origin/my-feature-branch, जो लगभग हमेशा होता है जो मैं चाहता हूं। हालाँकि, यह origin/my-feature-branchमेरी स्थानीय शाखा के लिए अपस्ट्रीम के रूप में सेट नहीं है । उपयोग P uकरने से मुझे अपस्ट्रीम शाखा चुनने की अनुमति मिलती है, लेकिन origin/my-feature-branchयह सूची में नहीं है, और मुझे origin/my-feature-branchटैब पूरा किए बिना टाइप करना होगा (मुझे पता है कि यह कठिन नहीं है, लेकिन यह उपयोगकर्ता की त्रुटि के लिए प्रवण है, और कमांड लाइन की तुलना में धीमा है)।

क्या यह अब अपस्ट्रीम शाखा स्थापित करने का एकमात्र तरीका है, या क्या मुझे कुछ याद आ रहा है? मैंने इस मुद्दे से संबंधित अन्य चर्चाओं और दस्तावेज़ीकरणों को देखा है, लेकिन मुझे जो भी स्रोत मिले हैं वे सभी पुराने हैं।


1
मुझे लगता है कि <remote>/<branch>गलती से हिस्सा तुरंत छोड़ दिया गया था ( यह टिप्पणी देखें )। इस बीच, आप magit-push-current-set-remote-if-missingशून्य पर सेट कर सकते हैं ।
काइल मेयर

मैंने अभी तय किया है। नीचे मेरा उत्तर मानता है कि ठीक है।
वृषभ

कुछ अन्य संबंधित मुद्दों को पाया और तय किया। संभवतः आपको 100% सही होने से पहले मेलपा को पकड़ने के लिए कुछ घंटों तक इंतजार करना होगा।
तारसियस

जवाबों:


11

एक ही समय में धक्का देने या धक्का दिए बिना, अपस्ट्रीम को सेट करने के कई तरीके हैं।

यदि magit-push-current-set-remote-if-missingगैर- nil(डिफ़ॉल्ट) है, तो आप कुछ इस तरह देखेंगे:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

पुश अप करने के लिए origin/featureऔर अपस्ट्रीम प्रेस के रूप में सेट करने के लिए uऔर फिर RETडिफ़ॉल्ट पूरा होने वाले उम्मीदवार को स्वीकार करने के लिए।

यदि magit-push-current-set-remote-if-missingहै nil, तो आप इसके बजाय यह देखेंगे:

Push feature to
 e elsewhere

यदि आपने pअभी प्रेस किया है , तो आपको बताया जाएगा कि अपस्ट्रीम कॉन्फ़िगर नहीं किया गया है (इसका मतलब है कि आप अपस्ट्रीम को धक्का नहीं दे सकते अगर कोई अपस्ट्रीम नहीं है)।

लेकिन अगर magit-push-current-set-remote-if-missingहै nil, तो स्विच की सूची की सुविधा होगी --set-upstream, इसलिए आप इसका उपयोग कर सकते हैं P - u pजैसा कि आप उपयोग कर रहे हैं (सिवाय इसके कि दूसरा पी कम है)। हालांकि एक जटिलता है: magit-push-current-set-remote-if-missingआप के मूल्य को बदलने के लिए Emacs को फिर --set-upstreamसे दिखाना या गायब होना है।

अंत में आप "सेट अपस्ट्रीम (और कुछ नहीं करना)" कमांड का उपयोग करके अपस्ट्रीम सेट कर सकते हैं b uorigin/masterRET:। ध्यान दें कि जब आप इस दृष्टिकोण का उपयोग करते हैं, तो आप केवल एक शाखा का चयन कर सकते हैं जो पहले से मौजूद है।


लेकिन पुश-रिमोट को कॉन्फ़िगर करना और उस पर पुश करना बेहतर होगा। पुश-रिमोट के बारे में अधिक जानने के लिए और यह अपस्ट्रीम से कैसे भिन्न होता है, जानकारी पुस्तिका में ब्रांचिंग नोड देखें (वेब संस्करण अभी तक अपडेट नहीं किया गया है)।

मूल रूप से अपस्ट्रीम शाखा वह शाखा है जिसमें आपकी सुविधा शाखा को अंत में विलय कर दिया जाएगा (विलय या पुनरावृत्ति करके, धक्का देकर नहीं), सबसे अधिक संभावना है origin/master। और पुश-रिमोट वह होता है जहां आप अपनी फीचर शाखाओं को पुश करते हुए उन पर काम कर रहे होते हैं, ताकि कोई और उन्हें मर्ज कर सके। यदि स्थानीय शाखा का नाम दिया गया है featureऔर पुश-रिमोट है my-fork, तो उस शाखा का उपयोग करके P pधक्का देना होगा my-fork/feature। ("पुश-टू-ब्रांच" को कॉन्फ़िगर नहीं किया जा सकता, पुश-रिमोट पर शाखा का नाम हमेशा स्थानीय नाम के समान होता है।)

इसलिए जब आपका प्रश्न कुछ ऐसा था "मैं एक ही समय में अपस्ट्रीम को कॉन्फ़िगर करते समय" अपस्ट्रीम को कैसे पुश करता हूं ", मेरी सिफारिश है कि अपस्ट्रीम को बिल्कुल भी पुश न करें, बल्कि पुश-रिमोट से धक्का दें।

बशर्ते आपने मूल्य को नहीं बदला है magit-push-current-set-remote-if-missingआप पुश-रिमोट का उपयोग करके कॉन्फ़िगर कर सकते हैं P psome-remoteRET। लेकिन, जब से आप सभी सुविधा शाखाओं को एक ही रिमोट से पुश करने की संभावना रखते हैं, सभी शाखाओं के लिए एक बार पुश-रिमोट सेट करना बेहतर होता है और इसके साथ किया जाना चाहिए: bऔर तब M-pतक जब तक कि सही रिमोट का चयन न हो जाए।


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

दुर्भाग्य से प्रारंभिक बिंदु आमतौर पर एक स्थानीय शाखा है और उस स्थिति में डिफ़ॉल्ट रूप से गिट इसे अपस्ट्रीम के रूप में उपयोग नहीं करता है। लेकिन इसे एक बार चलाकर आसानी से तय किया जा सकता है:

git config --global branch.autoSetupMerge always

डिफ़ॉल्ट मान है true, जिसका अर्थ है "शुरू-बिंदु को अपस्ट्रीम के रूप में सेट करें, बशर्ते यह एक दूरस्थ शाखा है"।


वैसे, पुश-रिमोट पर भी यही लागू होता है। वह भी आमतौर पर "नए" रिपॉजिटरी में अर्ध-स्वचालित रूप से सेट किया जाना चाहिए। यदि आप एक भंडार का क्लोन बनाते हैं, तो आपसे पूछा जाएगा कि क्या आप originपुश-रिमोट के रूप में उपयोग करना चाहते हैं । आपको "हां" का जवाब देना चाहिए, जब तक कि आप एक और रिमोट नहीं जोड़ने जा रहे हों, कहते हैं my-fork, जिसे पुश-रिमोट के रूप में इस्तेमाल किया जाना चाहिए। जब आप एक नया रिमोट का उपयोग करते हैं M aऔर remote.pushDefaultअभी तक सेट नहीं किया जाता है, तो आपसे पूछा जाएगा कि क्या आप पुश-रिमोट के रूप में नए जोड़े गए रिमोट का उपयोग करना चाहते हैं।

यह magit-clone-set-remote.pushDefaultऔर का उपयोग करके कॉन्फ़िगर किया जा सकता है magit-remote-add-set-remote.pushDefault

एक और उन्नत विकल्प है magit-branch-prefer-remote-upstream, जो चूक करता है nil। आप इसे सेट करते हैं करने के लिए t, और फिर एक नई शाखा के लिए शुरू करने बिंदु के रूप में एक स्थानीय शाखा चयन करें, फिर शुरू करने सूत्री की नदी के ऊपर हो सकता है (कुछ नियमों के अनुसार, डॉक-स्ट्रिंग देखें) नदी के ऊपर के रूप में इस्तेमाल किया जा, बजाय शुरुआती बिंदु।

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