मास्टर से मेरी कार्य शाखा में परिवर्तन करना?


16

वहाँ दो हम में से कुछ पर काम कर रहा है। हम इस शाखा संरचना का उपयोग कर रहे हैं

  • गुरुजी
  • देव-ए
  • देव-बी

हम दोनों अलग-अलग शाखाओं (देव-ए, बी) पर काम करते हैं और जब भी हम काम करते हैं - हम अपने परिवर्तनों को मास्टर में बढ़ावा देते हैं।

लेकिन इसका दोष यह है कि हम अन्य डेवलपर द्वारा किए गए परिवर्तनों को प्राप्त नहीं कर सकते हैं। मास्टर ट्री में सब कुछ मौजूद है - लेकिन हम अन्य डेवलपर द्वारा किए गए नवीनतम अपडेट प्राप्त नहीं कर सकते हैं।

क्या इसका समाधान करने का कोई तरीका है या हमें अपनी शाखा संरचना (प्रति सुविधा?) को बदलना चाहिए?

जवाबों:


16

मैंने दो मुख्य परिदृश्यों में उपयोग की जाने वाली डेवलपर शाखाएँ देखी हैं:

  1. ओपन-सोर्स समुदाय, जहां ये शाखाएं वास्तव में रिपॉजिटरी कांटे हैं, ताकि परियोजना के रखरखाव मास्टर रिपॉजिटरी तक पहुंच को बंद कर सकें और पुल अनुरोधों के माध्यम से एकीकरण की आवश्यकता हो। यह योगदानकर्ताओं के लिए जीवन को और अधिक कठिन बना देता है, लेकिन अनुरक्षकों के लिए बहुत आसान है, जो वास्तव में बिंदु है, और यह गिटहब पर एक बहुत ही सफल मॉडल है।

  2. टीमें और संगठन जिनके पास निरंतर एकीकरण नहीं है और उनकी तैनाती में अस्थिरता का ट्रैक रिकॉर्ड है, या उनके निर्माण में बदतर, अस्थिरता है। ये टीमें आम तौर पर मेनलाइन की स्थिरता की रक्षा के लिए डेवलपर शाखाओं का उपयोग करने का प्रयास करती हैं, और परिणाम है - आम तौर पर - रिलीज से पहले एक लंबी और बहुत दर्दनाक मर्ज की अवधि, इसके बाद एक लंबी और अधिक दर्दनाक स्थिरीकरण अवधि, जो कभी-कभी होती है। रिलीज के बाद तक ऐसा नहीं होता है ।

मैं नहीं चाहता कि यह इस बारे में शेख़ी हो कि आपको सीआई की आवश्यकता क्यों है, लेकिन यह आपके प्रश्न से स्पष्ट है कि आप जानते हैं कि आप अपने परिवर्तनों को अक्सर एकीकृत नहीं कर रहे हैं, इसलिए IMO का मुद्दे के आसपास नृत्य करने का कोई मतलब नहीं है।

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

मैं वर्तमान में 4 अलग-अलग टीमों में विभाजित लगभग 35 योगदानकर्ताओं के एक समूह का हिस्सा हूं, ज्यादातर लोग दिन में कम से कम 2-3 बार, कुछ लोग 10-15 बार चेक करते हैं; यह देखने के लिए असामान्य है कि टूटे हुए और अत्यंत दुर्लभ हैं उनके लिए कुछ मिनटों से अधिक समय तक टूटे रहना। Git हैंडल बहुत आसानी से विलय कर देता है ताकि दूरस्थ डेवलपर शाखाएं अनावश्यक ओवरहेड हो जाएं। बस खींचने, स्थानीय रूप से मर्ज करने और पुश करने से पहले प्रतिबद्ध परीक्षण चलाएं, यह सरल है।

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

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

आप चाहें तो इस सलाह को नजरअंदाज कर सकते हैं, और कई टीमें ऐसा करती हैं, लेकिन ऊपर दिए गए ब्रांचिंग मॉडल के कारणों में से एक इतना लोकप्रिय और सफल है कि यह निरंतर एकीकरण के साथ काम करने के लिए बनाया गया है , इसके खिलाफ नहीं।


मुझे लगता है कि निरंतर एकीकरण के महत्व पर पर्याप्त जोर नहीं दिया जा सकता है, दोनों को एक शाखा में सब कुछ एकीकृत करने के अर्थ में, और दैनिक / प्रति घंटा बिल्ड (जेनकिंस या समान का उपयोग करके) के अर्थ में।
सिल्के

15

यदि आप जाते हैं तो आपकी कार्य शाखा में:

git commit -am "Committing changes before merge"
git merge master

आप अन्य डेवलपर्स शाखा से भी विलय कर सकते हैं

git checkout dev-A
git merge dev-B

वह क्या करेगा जो आपकी विकास शाखा में मास्टर में परिवर्तन को मर्ज करेगा ।


हाँ - यह एक तरीका है। मैं उम्मीद कर रहा था git इस के लिए एक सुंदर कार्यप्रवाह होगा।
उत्कर्ष सिन्हा

2
अच्छी तरह से जीआईटी आमतौर पर सबसे अच्छा काम करता है अगर प्रत्येक डेवलपर के पास अपना स्थानीय कार्य भंडार और एक साझा केंद्रीय भंडार होता है जो डेवलपर्स को धक्का और से खींचता है। इस तरह से आप प्रत्येक शाखाओं में एक ही काम कर सकते हैं और केंद्रीय रिपॉजिटरी पर दबाव डालकर बदलाव लाकर अपडेट प्राप्त कर सकते हैं। शायद यही वह लालित्य है जिसकी आपको तलाश है। जब तक कोई संघर्ष न हो, git आपके लिए स्वचालित रूप से मर्जिंग संभाल लेगा। git flow वर्कफ़्लो के लिए एक अच्छा जोड़ है।
scaryrawr

Perfecto। कुछ स्थानों git merge masterपर इस सटीक प्रश्न के कुछ बहुत लंबे उत्तर हैं, लेकिन जाँच की गई सुविधा शाखा पर वह है जो मैं देख रहा था। धन्यवाद
Drenai

3

अगर देव-ए और देव-बी अलग-अलग परियोजना के लिए अलग-अलग शाखाएँ हैं तो @scaryrawr ने जो उत्तर दिया वह सबसे अच्छा होगा।

लेकिन अगर देव-ए और देव-बी वास्तव में एक ही कोड (समान परियोजना) हैं तो एक विकल्प यह होगा कि दोनों शाखाओं में से एक पर काम करें। उदाहरण के लिए आप 'देववर्क' नामक एक मास्टर ऑफ ब्रांच बनाते हैं। आप दोनों को चेकआउट करें, इस पर काम करें, बदलाव करें और बदलाव करें। पुश किए गए परिवर्तन मास्टर पर नहीं होंगे, लेकिन devWork में, फिर शाखा के अन्य उपयोगकर्ताओं को पुश परिवर्तन प्राप्त करने के लिए स्थानीय रूप से PULL करने की आवश्यकता है।

इसके बाद आप मानक तरीकों का पालन कर सकते हैं ताकि काम वापस करने के लिए मास्टर आदि पर काम किया जा सके।

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