2012-03-08 12 views
36

काम पर हमारी टीम उत्साह से एक रिबेस कार्यप्रवाह को अपनाया है, लेकिन हम एक छोटे से दूर ले, जो इस सवाल का बिंदु है मिल गया है हो सकता है: आप जज हो।Git वर्कफ़्लो: रिबेसिंग प्रकाशित/साझा शाखाओं

पुल --rebase का उपयोग करना अब मेरे लिए एक चाहती हैं। हालांकि, हमारे पास बड़ी फीचर शाखाएं भी हैं जो कई लोग काम करते हैं। समय-समय पर, हम मास्टर पर होने वाले बदलावों को लाना चाहते हैं। परंपरागत ज्ञान हमें विलय कर देगा क्योंकि यह एक साझा शाखा है। हालांकि, हमारे रिबेस-जुनून में, हमने उन शाखाओं को पुनर्जीवित करने का निर्णय लिया है। बेशक कि हर किसी के सहयोग की आवश्यकता है। वर्कफ़्लो इस तरह कुछ चला जाता है:

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

3):

2) rebaser, मास्टर पर सुविधा शाखा rebases दूरस्थ सुविधा शाखा (Git धक्का मूल को हटा देता है रिसेज़र सभी को लाता है, जो उनकी फीचर शाखा अपडेट करता है, फिर अपनी स्थानीय फीचर शाखा (गिट शाखा-डी फीचर) हटा देता है, फिर रिमोट फीचर शाखा को ट्रैक करने वाली एक नई स्थानीय फीचर शाखा बनाएं। तब सबको स्पष्ट हो जाता है।

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

उल्टा पर, हमारे भंडार इतिहास सुंदर है।

आपको क्या लगता है, Git गुरु? क्या हम आग से खेल रहे हैं, या एक उचित वर्कफ़्लो रॉकिंग कर रहे हैं?

अद्यतन:

यह दो साल के बाद से मैं मूल रूप से प्रश्न पूछा है, और मेरी हमारे कार्यप्रवाह तब से बदल गया है। हम अभी भी नियमित रूप से git pull --rebase करते हैं, इसलिए यह नहीं बदला है। यह सामान्य ज्ञान है, और यह सभी भयानक, भ्रमित मिनी-विलय को रोकता है। (हम ज्यादातर सिंक में रहते हैं, इसलिए git pull --rebase पर बहुत कम लागत है)।

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

हमारा समाधान कई घटक हैं:

  • मास्टर शाखा "प्राचीन" है। विषय शाखाओं में विलय हो, और एक बार वे करते हैं, विषय शाखा सेवानिवृत्त है। दूसरे शब्दों में, एक विषय शाखा विलय करने में यह संकेत मिलता है कि वह काम उत्पादन के लिए तैयार है, और अब मास्टर शाखा का हिस्सा है। हमारे संस्करण इतिहास को देखते हुए, यह बहुत स्पष्ट है कि क्या हो रहा है: विषय शाखाएं मास्टर में विलय हो रही हैं, और यही वह है।

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

  • विलय करते समय, हमेशाgit merge --no-ff का उपयोग करें। यह दो साल पहले हमारे "रैखिक प्रतिबद्धता इतिहास" जुनून से इतनी जबरदस्त उलटी गलती है कि यह टिप्पणी का हकदार है। अब जब हमने एक रैखिक प्रतिबद्धता इतिहास के बारे में आराम किया है, और देखा है कि विलय अच्छे और उपयोगी हैं, तो हमने पर वास्तविक शाखाओं मास्टर ऑफ ऑफ मास्टर पर बंद कर दिया है, न कि केवल अंततः काम करने वाली श्रृंखला की श्रृंखला मास्टर के साथ एक। git merge --no-ff सुनिश्चित करता है कि हमेशा एक विलय प्रतिबद्धता है, भले ही यह आवश्यक न हो।

  • हम एक अच्छी तरह से समझा सम्मेलन संदेशों और शाखाओं के लिए प्रतिबद्ध है और अधिक महत्वपूर्ण बात के लिए, यह पार संदर्भ हमारे मुद्दा-ट्रैकिंग प्रणाली है। हमारी समस्या ट्रैकिंग प्रणाली संख्यात्मक समस्या संख्याओं का उपयोग करती है, और किसी भी सुविधा (या दोष) के लिए, हमारे पास एक समस्या संख्या है (उदाहरण के लिए, 1234)। यदि आप उस मुद्दे पर काम कर रहे हैं, तो आप एक शाखा _1234 बनायेंगे और "_1234: doing blah blah" के साथ प्रत्येक प्रतिबद्ध संदेश शुरू करेंगे। यह थोड़ा जुनूनी प्रतीत हो सकता है, लेकिन यह वास्तव में हमारे लिए अच्छा काम करता है, और काफी कम/भ्रमित भ्रमित।

  • वर्कफ़्लो आसंजन को प्रोत्साहित करने के लिए एक गिट रैपर का उपयोग करें। यह वह चीज है जिसे हम वर्तमान में काम कर रहे हैं, लेकिन हमने महसूस किया है कि सरल और समझने योग्य गलतियों को रोकने के लिए पूरी तरह से जरूरी है, जैसे कि गलत चीज़ से शाखा बनाना (हमने हाल ही में एक पूर्ण आपदा की थी जब एक डेवलपर ने एक डिस्पोजेबल से विषय शाखा बनाई क्यूए शाखा: उस विषय शाखा को लाइव जाने के लिए अनुमोदित किया गया था, इसे विलय कर दिया गया था ... और परिवर्तकों का एक समूह जो को लाइव जाने के लिए अनुमोदित नहीं किया गया था)। जब भी आप कुछ असामान्य करते हैं तो हमारे गिट रैपर को पुष्टिकरण की आवश्यकता होगी (जैसे मास्टर के अलावा किसी भी शाखा को बंद करना, _NNNN नाम की एक शाखा बनाना, एक ऐसा प्रतिबद्ध बनाना जो _NNNN आदि से शुरू नहीं होता है)। कभी-कभी, हमें इन चीजों को करने की ज़रूरत होती है, इसलिए रैपर को रोकता है, लेकिन यह लोगों को गलती से ऐसा कुछ करने से रोकता है जो उन्हें नहीं करना चाहिए।

+4

मुझे लगता है कि यह बहुत अधिक है। यदि आपकी फीचर शाखा लंबी अवधि में है, तो आपको विलय करना चाहिए। अन्यथा आप अपनी सभी पिछली गतिविधियों के साथ अपनी फीचर शाखा के प्रमुख तक पहुंच गए हैं, जिन पर परीक्षण नहीं चल रहा था। आपका इतिहास भी वास्तव में जो हुआ उससे प्रतिनिधि नहीं है। –

+1

सुपर सवाल। मैं भी उसी नाव पर सवार हूं। – CleanBold

+3

यह लगभग 2 साल है जब से मैंने पूछा ... अद्यतन के लिए समय! मैं सवाल अपडेट करूंगा। –

उत्तर

23

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

+2

उत्तर स्पष्ट नहीं लगता है। – CleanBold

+0

क्या यह सही है कि इस मामले में, फीचर शाखा में मास्टर विलय करते समय जो भी संघर्ष हल हो जाते हैं, उसे फिर से हल करने के बाद हल किया जाना चाहिए? (इसके विपरीत, मैं देखता हूं कि यह एक बहुत ही सुविधाजनक वर्कफ़्लो है यदि आप विलय विवादों की अपेक्षा नहीं करते हैं) – rethab

+0

@rethab: यदि आप पुन: चालू करते हैं ('गिट सहायता rerere' देखें) तो यह स्वचालित रूप से उन्हें हल करने में सक्षम हो सकता है, इस पर निर्भर करता है कि क्या यह अतीत में हल किए गए संघर्ष के रूप में सही तरीके से पहचान सकता है या नहीं। –

संबंधित मुद्दे