गिट-फ्लो बनाम गिटब-प्रवाह के पेशेवरों और विपक्ष क्या हैं? [बन्द है]


125

हमने हाल ही में GitLab का उपयोग शुरू किया है।

वर्तमान में "केंद्रीकृत" वर्कफ़्लो का उपयोग कर रहा है।

हम गितुब-प्रवाह की ओर बढ़ने पर विचार कर रहे हैं लेकिन मैं यह सुनिश्चित करना चाहता हूं।

गिट-फ्लो बनाम गिटब-प्रवाह के पेशेवरों और विपक्ष क्या हैं ?

जवाबों:


133

जैसा कि निकोलस ज़कस द्वारा " कंपनी के अंदर गीथहब वर्कफ़्लोज़ " पर अपने लेख में गिटमिनूट्स एपिसोड 17 में चर्चा की गई है :

गिट-फ्लो Git में परिवर्तन के प्रबंधन के लिए एक प्रक्रिया है जो विंसेंट ड्रिसेन द्वारा बनाई गई थी और इस प्रवाह के प्रबंधन के लिए कुछ Git एक्सटेंशन के साथ ।
Git प्रवाह के पीछे सामान्य विचार कई अलग शाखाओं कि हमेशा मौजूद हैं, एक अलग उद्देश्य के लिए प्रत्येक के लिए है: master, develop, feature, release, और hotfix
फ़ीचर या बग डेवलपमेंट की प्रक्रिया एक ब्रांच से दूसरी ब्रांच में प्रवाहित होने से पहले ही रिलीज़ हो जाती है।

उत्तरदाताओं में से कुछ ने संकेत दिया कि वे git-flowसामान्य रूप से उपयोग करते हैं ।
कुछ के साथ शुरू हुआ git-flowऔर उससे दूर चला गया।

दूर जाने का प्राथमिक कारण यह है कि git-flowप्रक्रिया निरंतर (या निकट-निरंतर) परिनियोजन मॉडल से निपटना कठिन है।
सामान्य भावना यह है कि git-flowअधिक पारंपरिक रिलीज मॉडल में उत्पादों के लिए अच्छी तरह से काम करता है, जहां हर कुछ हफ्तों में एक बार रिलीज होती है, लेकिन जब आप एक या अधिक दिन में एक बार रिलीज कर रहे होते हैं तो यह प्रक्रिया काफी हद तक टूट जाती है

संक्षेप में:

संभव के रूप में सरल के रूप में एक मॉडल के साथ शुरू करें (जैसे GitHub प्रवाह होता है), और यदि आपको आवश्यकता हो तो एक अधिक जटिल मॉडल की ओर बढ़ें।


आप GitHub- फ्लो पर आधारित एक साधारण वर्कफ़्लो का एक दिलचस्प चित्रण देख सकते हैं : " एक साधारण गिट ब्रांचिंग मॉडल ", जिसमें मुख्य तत्व हैं:

  1. master हमेशा तैनात रहना चाहिए।
  2. सुविधा शाखाओं के माध्यम से किए गए सभी परिवर्तन (पुल-अनुरोध + मर्ज)
  3. संघर्षों से बचने / हल करने के लिए छूट; में विलयmaster

https://a248.e.akamai.net/camo.github.com/9783623eba280ba5ace8b9e63842be52af2f0546/687474703a2f2f7374617469632e62656e65742e61692f736b697463682f666c6f772d32303133303932362d3139333431392e706e67


एक वास्तविक और पूरी और मजबूत कार्यप्रवाह के लिए, को देखने के gitworkflow (एक शब्द)


88

कोई सिल्वर बुलेट वर्कफ़्लो नहीं है जहाँ सभी को पालन करना चाहिए, क्योंकि सभी मॉडल उप-इष्टतम हैं। यह कहते हुए कि, आप नीचे दिए गए बिंदुओं के आधार पर अपने सॉफ़्टवेयर के लिए उपयुक्त मॉडल का चयन कर सकते हैं;

उत्पादन में कई संस्करण - Git-flow का उपयोग करें

यदि आपका कोड उत्पादन में कई संस्करण हैं (जैसे कि ऑपरेटिंग सिस्टम, ऑफिस पैकेज, कस्टम एप्लिकेशन आदि जैसे विशिष्ट सॉफ़्टवेयर उत्पाद) तो आप git-flow का उपयोग कर सकते हैं। मुख्य कारण यह है कि आपको अगले संस्करण को विकसित करते समय उत्पादन में पिछले संस्करणों का लगातार समर्थन करने की आवश्यकता है।

उत्पादन सरल सॉफ्टवेयर में एकल संस्करण - जीथब-प्रवाह का उपयोग करें

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

उत्पादन में एकल संस्करण लेकिन बहुत जटिल सॉफ्टवेयर - Gitlab- प्रवाह का उपयोग करें

फेसबुक और जीमेल जैसे बड़े सॉफ्टवेयर, आपको अपनी ब्रांच और मास्टर ब्रांच के बीच तैनाती की शाखाओं को पेश करने की आवश्यकता हो सकती है, जहां CI / CD> टूल चल सकते हैं, इससे पहले कि यह उत्पादन में पहुंच जाए। आइडिया को लाखों लोगों द्वारा उपयोग किए जाने के बाद से उत्पादन संस्करण के लिए अधिक सुरक्षा प्रदान करना है।


7
बस "Gitdmz-flow" / "Git DMZ Flow" को सूची में जोड़कर
Robert Fey

1
संदर्भित कंपनियों ने ट्रंक आधारित प्रणाली का उपयोग किया। paulhammant.com/2014/01/08/…
पैट्रिकवैलकर

1
गिट DMZ प्रवाह Gitflow के समान है और DMZ शाखा विकसित शाखा की तरह है। इसलिए मुझे इसमें कुछ खास नहीं लगता।
गयान पथिरेज

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

5
@ GyanPathirage वास्तव में यह नहीं है। 1. "क्लासिक" मास्टर पर GitFlow टैग। हॉटफ़िक्स शाखा केवल आपके लिए नवीनतम उत्पादन संस्करण (मास्टर से) के विरुद्ध एक समाधान करने के लिए है। 2. "रिलीज़ ब्रांच" का अर्थ है Gitflow में कुछ और, जो वास्तव में प्री-रिलीज़ प्रीव्यू ब्रांच है (डेवलप ब्रांच से ब्रांचिंग, और इसका वास्तव में रिलीज़ होने पर मास्टर में विलय करने का लक्ष्य है)। 3. आप जिस चीज का जिक्र कर रहे हैं, उसे GitFlow में "सपोर्ट ब्रांच" कहा जाता है (यही एक कारण है जो मुझे GitFlow नापसंद है: अपरंपरागत शब्दावली)। हालाँकि यह अभी भी प्रायोगिक प्रवाह है (इसलिए आप इसे अधिकांश गीटफ़्लो इंट्रो में नहीं देखते हैं)
एड्रियन

38

मैं एक साल से अधिक के लिए git-flow मॉडल का उपयोग कर रहा हूं और यह ठीक है।

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

जब आपके पास एक ऐसा एप्लिकेशन होता है, जिसमें धीमी गति से विकास / परिनियोजन प्रवाह होता है।

लेकिन उदाहरण के लिए, GitHub की तरह हमारे पास एक एप्लिकेशन है जिसमें एक तेज़ विकास / परिनियोजन प्रवाह है, हम रोज़ तैनात करते हैं, और कभी-कभी दिन में कई बार, इस मामले में, git-flow मेरी राय में सब कुछ धीमा कर देता है, और मैं GHHub का उपयोग करता हूं बहे।

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

कम से कम एक GUI है जो Mac और Windows SourceTree के लिए git-flow का समर्थन करता है ।

इन दिनों, मैं GitHub प्रवाह की ओर अधिक झुकाव कर रहा हूं, इसकी सरलता और प्रबंधन करने में आसान होने के कारण। इसके अलावा, "अक्सर जल्दी तैनात होने के कारण" ...

उम्मीद है की यह मदद करेगा


+1। मैं आपसे सहमत हुँ।
VonC

2
GitHub प्रवाह Git-Flow के भीतर है। सोचें कि क्या आपको निरंतर एकीकरण और निरंतर तैनाती की आवश्यकता है, तो आप बस विकसित शाखा के साथ जितना संभव हो सके चला सकते हैं। हर सुविधा को विकसित शाखा से विभाजित किया जाता है। जब तक आपके पास जटिल परिनियोजन मॉडल नहीं हो, आपको मास्टर शाखा या रिलीज़ शाखाओं की आवश्यकता नहीं हो सकती है। (उदा। आपका 1.1 संस्करण कुछ क्लाइंट पर लाइव है। आपका 1.2 किसी अन्य क्लाइंट पर लाइव है और वर्तमान में आप अपने नए क्लाइंट के लिए 1.3 विकसित करते हैं) सभी 3 क्लाइंट अपने संबंधित संस्करण पर बग फिक्स और परिवर्तन के लिए कहेंगे।
गयान पथिरेज

नमस्कार डिएगो और आपके उत्तर के लिए धन्यवाद। कई संस्करण रखरखाव के बारे में क्या? क्या आप इसे आसानी से Git Flow के साथ करते हैं? मैंने सुना है कि यह मुश्किल है क्योंकि आपको समर्थन शाखाओं की आवश्यकता है! क्या आपको लगता है कि मॉडल ऐसा करने के लिए अनुकूल है?
लुइस गौविया

1
हाय लुइस, मुझे लगता है कि आप मॉडल को काम कर सकते हैं, लेकिन फिर से मुझे लगता है कि आप एक मानक गिट वर्कफ़्लो के साथ ही प्राप्त कर सकते हैं।
डिएगो एंट्यून्स

1
@LuisGouveia वास्तव में, क्योंकि आपके प्रश्न और मेरे उत्तर के बाद, मैं एक परियोजना भर में आया था कि गिट-फ्लो पूरी तरह से काम करेगा, और मेरे पास परियोजना का स्वामित्व है। विचार git flow release...आवेदन को तैनात करने के लिए गिटब क्रियाओं के संयोजन में उपयोग करना है। अपनी मूल प्रतिक्रिया में, मैंने उल्लेख किया कि हमने एक दिन में कई बार जारी किया, इससे गिट-फ्लो का उपयोग करते समय समस्याएं पैदा हुईं। मेरे विचार से इस परियोजना में git-flow अच्छा काम करेगा क्योंकि हमारे पास एक पूर्व-परिभाषित रिलीज़ चक्र है, जो git-flow का उपयोग करने के लिए प्रमुख विक्रय बिंदुओं में से एक है।
डिएगो एंट्यून्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.