आपके लिए काम करने वाले मॉडल क्या काम करते हैं?


378

हमारी कंपनी वर्तमान में एक साधारण ट्रंक / रिलीज़ / हॉटफ़िक्स ब्रांचिंग मॉडल का उपयोग कर रही है और यह सलाह देगी कि ब्रांचिंग मॉडल आपकी कंपनी या विकास प्रक्रिया के लिए सबसे अच्छा काम करते हैं।

  1. वर्कफ़्लोज़ / ब्रांचिंग मॉडल

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

  2. रिबासिंग बनाम विलय (क्रमबद्ध इतिहास बनाम पेचीदा)

    pull --rebaseजब तक आपका काम पूरा नहीं हो जाता है, तब तक आपको मेनलाइन पर वापस आने के लिए इंतजार करना चाहिए ? व्यक्तिगत रूप से मैं विलय की ओर झुकता हूं क्योंकि यह एक दृश्य चित्रण रखता है जिसके आधार पर एक कार्य शुरू किया गया था और समाप्त हो गया था, और मैं merge --no-ffइस उद्देश्य के लिए भी पसंद करता हूं । हालांकि इसमें अन्य कमियां हैं। कई लोगों ने विलय की उपयोगी संपत्ति का एहसास नहीं किया है - कि यह कम्यूटेटिव नहीं है (विषय शाखा को मास्टर में विलय करने का मतलब यह नहीं है कि विषय शाखा में मास्टर विलय करना)।

  3. मैं एक प्राकृतिक वर्कफ़्लो की तलाश कर रहा हूँ

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

  4. मर्ज संघर्ष (चेरी-पिक के कारण) बनाने से कैसे बचें?

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

  5. सामयिक शाखाओं में विघटित कैसे करें?

    हमें पता चलता है कि विषय शाखाओं से एक समाप्त एकीकरण को इकट्ठा करने के लिए यह बहुत बढ़िया होगा, लेकिन अक्सर हमारे डेवलपर्स द्वारा काम स्पष्ट रूप से परिभाषित नहीं किया जाता है (कभी-कभी "आसपास के रूप में सरल") और अगर कुछ कोड पहले से ही एक "मिस" विषय में चला गया है, ऊपर के प्रश्न के अनुसार इसे फिर से वहाँ से बाहर नहीं निकाला जा सकता है? आप अपनी विषय शाखाओं को परिभाषित / अनुमोदित / स्नातक / जारी करने के साथ कैसे काम करते हैं?

  6. कोड समीक्षा और स्नातक करने जैसी उचित प्रक्रियाएं निश्चित रूप से प्यारी होंगी।

    लेकिन हम बस इस बात का प्रबंधन करने के लिए पर्याप्त चीजें नहीं रख सकते हैं - कोई सुझाव? एकीकरण शाखाओं, चित्र?

नीचे संबंधित प्रश्नों की एक सूची है:

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


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

प्लास्टिक एससीएम ब्लॉग ने अपनी राय को चर्चा में फेंक दिया, यह कम से कम व्यावहारिक है: codicesoftware.blogspot.com/2010/08/…
HiQ CJ

1
आप का उपयोग करते समय "मर्ज --no-एफएफ", कुछ चेतावनियां के लिए इस जाँच में सावधान रहना होगा sandofsky.com/blog/git-workflow.html
Doppelganger

1
@Doppelganger मुझे इस बात में दिलचस्पी होगी कि विशेष रूप से --no-ff लिंक पोस्ट में बताई गई समस्या में कितना योगदान दे रहा है। मुझे बताई गई समस्या के कारण चेकपॉइंट कमिट के साथ बाइसेक्ट की विफलता है, और उस मामले में मदद करने के लिए गिट दोष की विफलता - लेकिन मैं यह देखने में विफल रहता हूं कि "-नो-एफएफ" कुछ भी कैसे बदलता है, जैसा कि इसका उपयोग नहीं करने का विरोध किया गया। लेखक की शिकायत है कि --no-ff के साथ कोई मर्ज संशोधित फ़ाइल नहीं बनाता है - फिर भी इसके बिना, फ़ाइल को या तो संशोधित नहीं किया जाएगा, आप केवल अपने इतिहास में पुरानी प्रतिबद्धता देखेंगे, है ना?
कोडिंग

अन्य शाखा मॉडल: कैक्टस मॉडल barro.github.io/2016/02/… , मेनलाइन मॉडल bitnbites.eu/a-stable-mainline-branching-model-for-git । यह दोनों शाखा मॉडल गिटफ्लो की तुलना में एक और दृष्टिकोण प्रदान करते हैं।
मैथ्यू मोमल

जवाबों:


90

DVCS को सबसे अधिक परेशान करने वाले नए डेवलपर्स को प्रकाशन प्रक्रिया के बारे में महसूस करने की आवश्यकता है :

  • जो भी रिमोट रेपो चाहिए उसे आप आयात कर सकते हैं
  • आप किसी भी (नंगे) रेपो को प्रकाशित कर सकते हैं (पुश)

उस से, आप अपने सवालों को आसान बनाने के लिए कुछ नियमों का सम्मान कर सकते हैं:

  • यदि इसे धकेल नहीं दिया गया है तो केवल एक शाखा को रिबास करें (अंतिम रिबास के बाद धकेल नहीं)
  • केवल एक नंगे रेपो को धक्का दें (Git1.7 के बाद से अनिवार्य)
  • रिबास और मर्ज पर लिनस की सलाह का पालन ​​करें

अभी:

वर्कफ़्लोज़ / ब्रांचिंग मॉडल :

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

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

रिबासिंग बनाम विलय (क्रमिक इतिहास बनाम पेचीदा) :

मुझे आपका जवाब पसंद है (" इन-हाउस डेवलपमेंट के लिए गिट उपयोग के लिए वर्कफ़्लो विवरण ")

मैं एक प्राकृतिक वर्कफ़्लो की तलाश कर रहा हूँ :

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

मर्ज संघर्ष (चेरी-पिक के कारण) बनाने से कैसे बचें?

जैसा कि जकूब नारबस्की ने अपने जवाब में कहा , चेरी-पिकिंग को दुर्लभ स्थितियों के लिए आरक्षित किया जाना चाहिए, जहां इसकी आवश्यकता होती है।
यदि आपके सेटअप में बहुत सारे चेरी-पिकिंग शामिल हैं (यानी "यह दुर्लभ नहीं है"), तो कुछ बंद है।

क्या रिवर्ट में भी यही लागू होगा (यह कैसे करना है?)

git revert उस पर ध्यान देना चाहिए, लेकिन यह आदर्श नहीं है।

सामयिक शाखाओं में विघटित कैसे करें?

जब तक एक शाखा को अभी तक हर जगह नहीं धकेला जाता है, तब तक एक डेवलपर को अपने इतिहास को फिर से शुरू करना चाहिए (एक बार जब वह अंत में विकास को और अधिक निश्चित और स्थिर आकार में ले जाता है):

  • यदि आवश्यक हो तो कई शाखाएं (एक स्पष्ट पहचान सुविधा द्वारा)
  • एक शाखा के भीतर एक सुसंगत सेट होता है ( ट्रिटिंग गिट चेकिन्स देखें )

कोड समीक्षा और स्नातक जैसी उचित प्रक्रियाएं?

एकीकरण शाखाएं (एक समर्पित एकीकरण में) रेपो डेवलपर को निम्नलिखित मदद कर सकता है:

  • उस दूरस्थ एकीकरण शाखा (पुल --rebase) के शीर्ष पर उसका / उसके विकास का खंडन करें
  • स्थानीय रूप से हल करें
  • विकास को उस रेपो पर धकेलें
  • इंटीग्रेटर के साथ जांच करें जिसके परिणामस्वरूप गड़बड़ नहीं है;)

@UncleCJ: जैसा कि आप देख सकते हैं, यह आपके "अंतिम प्रश्न" का अंतिम उत्तर नहीं है ;)
VonC

मैं समझता हूं, और मुझे विडंबना भी ठीक है, यह ठीक है ;-)
HiQ CJ

3
@UncleCJ अपस्ट्रीम केवल वह जगह है जहां आप नियमित रूप से मेरी पोस्ट से खींचते हैं, जहां भी सभी कमियां समाप्त होती हैं (एसवीएन पार्लेंस में रिलीज संस्करण या ट्रंक)। डाउनस्ट्रीम हर कोई उनके नीचे है। सामान को ऊपर की ओर भेजना, इसे रिलीज रेपो (जैसे linux-2.6) में मर्ज करने की प्रक्रिया है और डाउनस्ट्रीम में बाहर जाने से होने वाले बदलाव हैं, या आपके रिपॉजिटरी से यह कहना है कि इस तरह के फीचर को आपके मिनिंस में डेवलप करने का मैनेजर ... I मतलब टीम।

2
@UncleCJ: "मुझे अभी भी यह पता चलता है कि कड़ाई से अनुक्रमिक इतिहास प्राप्त करने के लिए अपने चेकइन को ट्रिम करना मुश्किल है": यह Git1.7 के साथ आसान है और इसका rebase --interactive --autosquashजो स्वचालित रूप से आगे बढ़ेगा वह सभी एक और प्रतिबद्ध संदेश की शुरुआत के साथ होता है। यदि वे कमिट टिकट संख्या (उदाहरण के लिए) का उपयोग करते हैं, भले ही उस टिकट से संबंधित सुधारों को समय पर क्रमिक रूप से नहीं बनाया गया था, तो ऑटोसक्वाश उन कमिट्स के त्वरित पुन: संचालन के लिए अनुमति देता है।
VonC

1
@UncleCJ: हमेशा जरूरी नहीं है, लेकिन इसके बारे में पता लगाने रखने में मदद: "सख्ती से अनुक्रमिक इतिहास (यह आवश्यक है या नहीं ?! है)" कार्यात्मक निर्भरता ( stackoverflow.com/questions/881092/... ) और अर्थ संघर्ष ( stackoverflow.com/questions / 2514502 / ... )
VonC

21

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

यदि मेरे पास कर्नेल विकास के बारे में मेरी समझ है (मैं उस पर ध्यान केंद्रित करूंगा) ठीक है, तो हर किसी के पास कर्नेल विकसित करने के लिए अपनी खुद की गिट रिपॉजिटरी है। वहाँ एक रिपॉजिटरी है, linux-2.6.git, Torvalds द्वारा देखभाल की जाती है, जो रिलीज रिपॉजिटरी के रूप में कार्य करती है। लोग यहां से क्लोन करते हैं यदि वे "रिलीज़" शाखा के खिलाफ एक विशेषता विकसित करना शुरू करना चाहते हैं।

अन्य रिपॉजिटरी कुछ विकास करते हैं। यह विचार लिनेक्स-2.6 से क्लोन करने का है, जितनी बार आप चाहें उतनी बार शाखा करें जब तक कि आपको "नया" फीचर मिल गया हो। फिर, जब यह तैयार हो जाता है, तो आप इसे किसी ऐसे व्यक्ति को उपलब्ध करा सकते हैं जिसे विश्वसनीय माना जाता है, जो इस शाखा को आपकी रिपॉजिटरी से अपने में खींच लेगा और इसे मुख्यधारा में विलय कर देगा। लिनक्स कर्नेल में यह कई स्तरों (विश्वसनीय लेफ्टिनेंट) पर होता है जब तक कि यह लिनक्स-2.6.it तक नहीं पहुंचता है जिस बिंदु पर यह "कर्नेल" बन जाता है।

अब यहाँ कहाँ यह भ्रमित हो जाता है। शाखा नामों को रिपॉजिटरी के पार होने की आवश्यकता नहीं है। इसलिए मैं अपनी रिपॉजिटरी नामक शाखा में मास्टर की git pull origin master:vanilla-codeशाखा से शाखा प्राप्त कर सकता हूं । मुझे पता है कि क्या चल रहा है, यह वास्तव में कोई फर्क नहीं पड़ता है - यह इस अर्थ में वितरित किया जाता है कि सभी रिपॉजिटरी एक-दूसरे के समकक्ष हैं और एसवीएन जैसे कई कंप्यूटरों में साझा नहीं किए गए हैं।originvanilla-code

तो, यह सब ध्यान में रखकर:

  1. मुझे लगता है कि यह प्रत्येक प्रोग्रामर पर निर्भर है कि वे अपनी ब्रांचिंग कैसे करते हैं। आप सभी की जरूरत रिलीज आदि के प्रबंधन के लिए एक केंद्रीय भंडार है। ट्रंक हो सकता है head। रिलीज़ टैग या शाखाएं हो सकती हैं और हॉटफ़िक्स शायद अपने आप में शाखाएं हैं। वास्तव में, मैं संभवतः शाखाओं के रूप में रिलीज़ करूँगा ताकि आप उन्हें पैच कर सकें।
  2. मैं विलीन हो जाऊंगा और फिर से नहीं। यदि उदाहरण के लिए आप एक भंडार लेते हैं, इसे क्लोन करते हैं, शाखा करते हैं और कुछ देव करते हैं, तो originआपको अपने भंडार से खींचना चाहिए, संभवत: दूसरी शाखा बनाएं और नवीनतम masterको मर्ज करें yourbranchताकि कोई और आपके प्रयासों को कम से कम प्रयास के साथ बदल सके। मुमकिन। मेरे अनुभव में बहुत कम ही सही मायने में रिबेस की जरूरत है।
  3. मुझे लगता है कि यह समझ का मामला है कि गिट काम करता है और यह क्या कर सकता है। यह कुछ समय और बहुत अच्छा संचार करता है - मुझे केवल यह समझना शुरू हो गया है कि क्या हो रहा है जब मैंने अन्य डेवलपर्स के साथ git का उपयोग करना शुरू कर दिया है और अब भी, कुछ चीजें जिनके बारे में मुझे यकीन नहीं है।
  4. विलय संघर्ष उपयोगी हैं। मुझे पता है, मुझे पता है, आप चाहते हैं कि यह सब काम करे, लेकिन, तथ्य यह है कि कोड में बदलाव है और आपको कुछ कामों में परिणाम को मर्ज करने की आवश्यकता है। मर्ज संघर्ष वास्तव में सिर्फ प्रोग्रामिंग है। मुझे उनके बारे में क्या करना है, इसके लिए एक आसान स्पष्टीकरण कभी नहीं मिला है, इसलिए यहां यह है: उन फाइलों पर ध्यान दें, जिनके पास विलय हैं, जाएं और उन्हें बदल दें कि उन्हें क्या होना चाहिए, git add .और फिर git commit
  5. हालाँकि यह सूट करता है। जैसा कि मैंने कहा है, प्रत्येक उपयोगकर्ता git रिपॉजिटरी के साथ खेलने के लिए अपना है और शाखा नामों को समान होने की आवश्यकता नहीं है । यदि आपके पास एक मचान भंडार है, उदाहरण के लिए, आप एक नामकरण स्कीमा को लागू कर सकते हैं, लेकिन आपको प्रत्येक डेवलपर के लिए केवल रीपो रेपो की आवश्यकता नहीं है।
  6. यह मर्ज चरण है। जब आप कोड की समीक्षा करने / गुणवत्ता परीक्षण पास करने पर विचार करते हैं, तो आप केवल रिलीज शाखाओं आदि में विलीन हो जाते हैं।

मुझे आशा है कि वह मदद करेंगे। मुझे एहसास है कि VonC ने एक बहुत ही समान विवरण पोस्ट किया है ... मैं बहुत तेजी से टाइप नहीं कर सकता!

व्यावसायिक सेटिंग में git का उपयोग करने के बारे में कुछ और विचार संपादित करें , क्योंकि यह टिप्पणियों से ओपी के लिए प्रासंगिक लगता है:

  • रिलीज रिपॉजिटरी, हम इसे कॉल करेंगे product.git, यह कई वरिष्ठ प्रोग्रामर / तकनीकी लोगों द्वारा सुलभ है जो वास्तव में उत्पाद की देखरेख के लिए जिम्मेदार हैं। वे ओएसएस में अनुरक्षकों की भूमिका के अनुरूप हैं।
  • ये प्रोग्रामर संभवत: नए संस्करणों के विकास का भी हिस्सा हैं, इसलिए वे खुद को कोड भी कर सकते हैं और वेरिएस रिपॉजिटरी को बनाए रख सकते हैं। वे वास्तव में नई सुविधाओं के लिए स्टेजिंग रिपॉजिटरी का प्रबंधन कर सकते हैं और उनके अपने रिपॉजिटरी भी हो सकते हैं।
  • उनके नीचे व्यक्तिगत बिट्स विकसित करने के लिए जिम्मेदार प्रोग्रामर हैं। उदाहरण के लिए, कोई यूआई कार्य के लिए जिम्मेदार हो सकता है। इसलिए वे UI.it रिपॉजिटरी का प्रबंधन करते हैं।
  • उनके नीचे वास्तविक प्रोग्रामर हैं जो दिन भर की नौकरी के लिए सुविधाओं का विकास करते हैं।

तो क्या होता है? खैर, हर कोई "अपस्ट्रीम" स्रोत से प्रत्येक दिन की शुरुआत में खींचता है यानी रिलीज़ रिपॉजिटरी (जिसमें संभवतः पिछले दिनों के विकास से नवीनतम सामग्री भी होगी)। हर कोई ऐसा करता है, सीधे। यह उनकी रिपॉजिटरी में एक शाखा पर जाएगा, जिसे शायद "मास्टर" कहा जाता है या शायद अगर आप मुझे "नवीनतम" कहते हैं। प्रोग्रामर तब कुछ काम करेगा। यह काम कुछ ऐसा हो सकता है जिसके बारे में वे निश्चित नहीं हैं, इसलिए वे एक शाखा बनाते हैं, काम करते हैं। यदि यह काम नहीं करता है, तो वे शाखा को हटा सकते हैं और वापस जा सकते हैं। यदि ऐसा होता है, तो उन्हें मुख्य शाखा में विलय करना होगा जो वे वर्तमान में काम कर रहे हैं। हम कहेंगे कि यह एक यूआई प्रोग्रामर है, जिस पर latest-uiवह काम करता git checkout latest-uiहैgit merge abc-ui-mywhizzynewfeature। वह फिर अपनी तकनीकी लीड (यूआई लीड) बताता है, मैंने इस तरह का काम पूरा कर लिया है, मुझे इससे दूर रखें। तो यूआई लीड करता है git pull user-repo lastest-ui:lastest-ui-suchafeature-abc। यूआई लीड तब ​​उस शाखा को देखता है और कहता है, वास्तव में, यह बहुत अच्छा है, मैं इसे मर्ज कर दूंगा ui-latest। फिर वह अपने नीचे से सभी को अपनी ui-latestशाखाओं पर या जो भी नाम उन्हें दिया है, उससे खींचने के लिए कह सकता है, और इसलिए यह सुविधा देवों द्वारा खोजी जाती है। यदि टीम खुश है, तो यूआई लीड परीक्षण लीड को उससे खींचने और परिवर्तनों को मर्ज करने के लिए कह सकता है। यह हर किसी को (परिवर्तन के बहाव में) फैलता है, जो इसका परीक्षण करता है और बग रिपोर्ट आदि को प्रस्तुत करता है। अंत में, यदि फीचर परीक्षण आदि पास करता है, तो शीर्ष तकनीकी लीड में से एक इसे कार्यक्रम की वर्तमान कार्य प्रतिलिपि में विलय कर सकता है, जिस बिंदु पर सभी परिवर्तनों को फिर नीचे प्रचारित किया जाता है। और इसी तरह।

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


आपके व्यापक उत्तर (और वोट) के लिए एक गुच्छा धन्यवाद, मैं इसे उपयोगी जानकारी को लिखने के लिए एक जोड़े को और अधिक समय पढ़ूंगा। हालाँकि, हम एक कंपनी हैं, ओएसएस डेवलपमेंट कमेटी नहीं ;-) देखते हैं कि यह पद कहां जाता है, मुझे एक अच्छी गति महसूस होती है, इसे जारी रखें!
HiQ CJ

@VonC धन्यवाद। @UncleCJ सच है, लेकिन आप करते हैं, मुझे यकीन है, रिलीज-मैनेजर आदि हैं। रिपॉजिटरी की पहुंच वाला कोई भी व्यक्ति इन चीजों को कर सकता है। विकास के लिए, डेवलपर्स को स्वतंत्रता क्यों नहीं देनी चाहिए, क्या कारण है? आपको मर्ज करने के लिए कुछ प्रोटोकॉल प्रदान करना और आपकी केंद्रीय रिपॉजिटरी (ies) का नाम जैसा आप चाहते हैं, कोई समस्या नहीं है। कहा कि, एक सामान्य नामकरण स्कीमा एक बुरा विचार नहीं है। मैं व्यक्तिगत शाखाओं और शाखाओं के लिए संस्करण के लिए प्रारंभिक-संस्करण-फ़ीचर-सबब्रांच का उपयोग करने की प्रवृत्ति रखता हूं।

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

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

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

9

एक मॉडल जिसे मैंने अच्छे परिणामों के साथ प्रयोग किया है वह निम्नलिखित है:

एक "धन्य" रेपो हर कोई धक्का देता है और / से, मूल रूप से एक क्लाइंट-सर्वर टोपोलॉजी को खींचता है।

कोई भी मास्टर शाखा नहीं है, इसलिए कोई भी डेवलपर किसी भी कोड को "मेनलाइन" में नहीं धकेल सकता है।

सभी घटनाक्रम विषय शाखाओं पर होते हैं। हमने आसानी से यह पता लगाने के लिए नामों को नाम दिया कि इसके लिए कौन जिम्मेदार है: jn / newFeature या jn / issue-1234

व्हाइटबोर्ड पर शाखाओं और कानबन / स्क्रैम कार्डों के बीच 1 से 1 के बीच मैपिंग भी है।

एक शाखा जारी करने के लिए इसे धन्य रेपो में धकेल दिया जाता है और समीक्षा के लिए तैयार करने के लिए कंबन-कार्ड ले जाया जाता है।

फिर, यदि शाखा समीक्षा द्वारा स्वीकार की जाती है, तो यह एक रिलीज के लिए एक उम्मीदवार है।

एक रिलीज तब होती है जब स्वीकृत शाखाओं के एक सेट को एक साथ विलय कर दिया जाता है और संस्करण संख्या के साथ टैग किया जाता है।

धन्य टैग के लिए नए टैग को धक्का देकर नई सुविधाओं के लिए एक नया संभव आधार है।

मर्ज संघर्ष से बचने के लिए डेवलपर्स से अनुरोध है कि वे नवीनतम रिलीज़ टैग में अपनी अनुरक्षित शाखाओं को अपडेट (मर्ज) करें।


2

व्यक्तिगत रूप से, मैं मास्टर शाखा में केवल रिलीज-तैयार कोड रखने की कोशिश करता हूं।

जब मैं एक नई सुविधा या बगफिक्स पर काम करता हूं तो मैं एक शाखा में करता हूं। मैं शाखा में इकाई-परीक्षण भी करता हूं। यदि सब कुछ ठीक है, तभी मैं वापस मास्टर में विलीन हो जाता हूं।

मैं सामान्य शाखा नामकरण सम्मेलनों का उपयोग करने की कोशिश करता हूं, जैसे:

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