क्या पुश बल शाखाओं को पकड़ना गलत है?


11

जब मैं एक सुविधा शाखा पर काम कर रहा होता हूं, तो मैं अपने काम की समीक्षा करने और मुख्य शाखा में एकीकृत होने से पहले एक इंटरैक्टिव रिबेस का उपयोग करके शाखा में कमिट को साफ करना चाहता हूं।

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

हालांकि, यह इस तथ्य की ओर जाता है कि मुझे अक्सर git push --forceरिबास के बाद रिमोट रिपॉजिटरी में करना पड़ता है , एक ऐसी कार्रवाई जो आम तौर पर होती है। या जैसा कि लिंक किए गए गितुब पृष्ठ कहते हैं:

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

क्या कोई (आमतौर पर स्वीकृत) नीति है जो इस संघर्ष को हल करती है?

यह आवश्यक नहीं है "गेट ऑफ गोल्डन रीबसिंग ऑफ गिट" इतना आवश्यक क्यों है?

एक नीति के लिए इच्छुक के बीच संघर्ष को हल करने के लिए मेरा प्रश्न यहाँ पूछता बैकअप दूरस्थ भंडार में अपने काम और अपने काम रिबेसिंग है, जबकि अन्य प्रश्न अस्वीकार करने के लिए एक संघर्ष है कि वहाँ है और पूछता है कि क्यों कुछ लोगों को लगता है संघर्ष सब पर मौजूद है की कोशिश करता है, और इस तरह पूछता है कि "यह आवश्यक है" बल विद्रोह को आगे बढ़ाने के लिए क्यों नहीं?



1
@ जीबीजैनब यदि आप WIP कमिट करते हैं, तो एक दिन के काम के लायक कई कमिट्स से बचने के लिए रिबास बहुत उपयोगी है। मैं अक्सर छोटे बदलावों के लिए कमिट करता हूं, इसलिए यदि आवश्यक हो तो मेरे पास "पूर्ववत एक राज्य मुझे याद है" विकल्प है - इनमें से अधिकांश रेपो के मुख्य इतिहास के लिए अप्रासंगिक / शोर हैं (यही वजह है कि रिबास इतना उपयोगी है)।
एंडरलैंड

1
@gbjbaanb यह मेरी राय का मामला है। कई टीमें अपने इतिहास को साफ रखने के लिए रिबासिंग रणनीति का इस्तेमाल करती हैं।
चील टेन ब्रिंच

1
@enderland हर कोई सुंदर इतिहास चाहता है, इसकी अभी भी गलत (और खतरनाक) बात है जैसा कि लिंक द्वारा दिखाया गया है। टॉर्वाल्ड्स को इसे कभी नहीं डालना चाहिए, उसे इसके बजाय प्रदर्शन पर "संपीड़ित" होने की अनुमति देनी चाहिए थी।
gbjbaanb

1
@gbjbaanb लेकिन ... उन्होंने ऐसा नहीं किया, और इसलिए हमें जो हमारे पास है उसके साथ काम करना होगा। मेरे लिए यह अधिक उपयोगी है कि मैं 30+ के बजाय मास्टर ब्रांच पर एक सिंगल कमिट करूं और प्रत्येक फीचर ब्रांच से इनक्रीमेंट कम हो। लेकिन सभी को एक अलग वर्कफ़्लो होगा, मुझे लगता है ...
एंडरलैंड

जवाबों:


5

अपने आप से पूछने के लिए महत्वपूर्ण प्रश्न:

  • क्या आप अपनी दूरस्थ शाखा को वापस मास्टर में विलय करने के बाद रखते हैं?

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

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

मुझे लगता है कि आप पूछ रहे हैं कि क्या मैं अप्रतिबंधित शाखा रखूंगा? नहीं, AFAIC। फिर भी, यह बलपूर्वक धक्का दे सकता है कि सैद्धांतिक रूप से अन्य उपयोगकर्ताओं से कमिट का नुकसान हो सकता है, जिन्होंने एक ही शाखा में धकेल दिया था

ऐसा लगता है कि आपके पास एक साथ कई लोग उस शाखा को धक्का दे रहे हैं। इसका मतलब है कि आप शाखा के इतिहास के बारे में परवाह करते हैं

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


"क्या आप मास्टर में वापस विलय के बाद अपनी दूरस्थ शाखा रखते हैं?" मुझे लगता है कि आप पूछ रहे हैं कि क्या मैं अप्रतिबंधित शाखा रखूंगा? नहीं, AFAIC। फिर भी, यह बलपूर्वक धक्का दे सकता है कि सैद्धांतिक रूप से अन्य उपयोगकर्ताओं से कमिट का नुकसान हो सकता है, जिन्होंने एक ही शाखा में धकेल दिया था।
चिले दस ब्रिंच

@ChieltenBrinke मैंने इसके बारे में थोड़ा संपादित किया। FYI करें
एंडरलैंड

मुझे लगता है कि धक्का देने से रोकने के उपाय के रूप में फोर्किंग जब वास्तव में एक बहुत अच्छा सुझाव है। लेकिन AFAIK यह वास्तव में एक git कॉन्सेप्ट नहीं है, और आपको इसे आसानी से करने के लिए एक सर्विस रैपर की आवश्यकता है (जैसे कि gubub)। क्या मैं उस बारे में सही हूं? या शायद मैं एक अलग शाखा बनाने के लिए "फोर्किंग" शब्द के आपके उपयोग की गलती करता हूं?
चायल दस ब्रिंक

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

यह मानते हुए कि एक रेपो को छोड़ना विकल्प से बाहर है क्योंकि कोई गितुब का उपयोग नहीं करता है, हम "निजी" develop-featureशाखा के साथ काम करेंगे । बेशक, निजीकरण पूरी तरह से कन्वेंशन द्वारा होता है और किसी भी चीज द्वारा लागू नहीं किया जाता है, लेकिन इसे एक नीति का हिस्सा बनाया जा सकता है, खासकर अगर कुछ शाखा के नामकरण सम्मेलनों को इसके लिए पेश किया जाता है। (शायद मैं अभी बहुत चिंतित हो रहा हूँ, शायद नहीं :) --force-with-leaseमेरे अन्य पोस्ट में बताए अनुसार संयोजन को चोट नहीं पहुँचाई जा सकती है, हालाँकि इस पर भरोसा नहीं किया जाना चाहिए।
चायल दस ब्रिंक

3

मैं यहां कुछ संभावनाओं को सूचीबद्ध कर रहा हूं जो मेरे दिमाग को पार करती हैं।

हमेशा एक नई शाखा पर छूट

जब एक गन्दा शाखा होती है some-feature, तो उसे एक नई शाखा में रिबेट करें। उदाहरण के लिए

$ git checkout -b some-feature-rebase
$ git rebase -i master # etc..

फिर some-feature-rebaseसमीक्षा और एकीकृत किया है।

समस्या: यहां एक बड़ा नकारात्मक पहलू यह है कि, कड़ाई से बोलते हुए, आपको प्रत्येक रिबास के लिए एक नई शाखा की आवश्यकता होती है। (उदाहरण के लिए, कोड समीक्षा के बाद यदि आप बदलाव करते हैं तो आपके पास कई छूटें हो सकती हैं)

उपयोग git push --force-with-lease

मैंने सिर्फ उस git push --force-with-leaseविकल्प केgit push --force बारे में सीखा , जो

जब तक हम उम्मीद करते हैं कि यह एक शाखा को अद्यतन करने से इनकार नहीं करता है; अर्थात किसी ने शाखा को अपस्ट्रीम में अपडेट नहीं किया है।

समस्या : यह उस स्थिति पर सीधे सुधार करने के लिए लगता है जहां हम बस का उपयोग करते हैं --force, लेकिन अभी भी कुछ चेतावनी हैं, सबसे विशेष रूप से जब मैं एक के git fetchबजाय एक करता हूं git pull, जो हमारी स्थानीय अपस्ट्रीम शाखाओं को अपडेट करता है, --force-with-leaseयह सोचकर कि रिमोट पर कोई भी बदलाव नहीं किया गया है। डाली।

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