खेल के विकास के साथ संस्करण नियंत्रण - मुझे कब शाखा लगानी चाहिए?


26

मैंने हाल ही में अपनी परियोजनाओं के साथ संस्करण नियंत्रण का उपयोग करना शुरू किया (भले ही मैं उन पर अकेले काम कर रहा हूं)। मुझे लगता है कि यह संपूर्ण विकास प्रक्रिया (इश्यू ट्रैकिंग के साथ) के इतिहास को बनाए रखने का एक अच्छा तरीका देता है और मुझे अपनी परियोजनाओं के लिए बैकअप रखने की अनुमति देता है।

जैसा कि मैंने धीरे-धीरे संस्करण नियंत्रण का उपयोग करने की सुविधाओं और लाभों की खोज की है, मैं ब्रांचिंग के विचार के आसपास फंस गया हूं। मुझे कब करना चाहिए?

क्या मुझे हर बार जाना चाहिए और एक नई सुविधा विकसित करनी चाहिए, या केवल एक बार जब मैं एक निश्चित मील के पत्थर तक पहुंचता हूं?

जाहिर है, अकेले काम करते समय शाखा लगाना बहुत बेकार है, लेकिन मैं अब अच्छी आदतें चुनूंगा और इसकी आदत डालूंगा।

जब मैं माइक मैकशाफ्ट्री (जो इस तरह से एक महान पुस्तक है) द्वारा पुस्तक गेम कोडिंग कम्प्लीट को पढ़ रहा था , मैं पूरी तरह से खो गया जब लेखक ने तीन शाखाओं को रखने की सिफारिश की:

  • मुख्य : मुख्य विकास शाखा जहां नियमित परिवर्तन किए जाते हैं।
  • सोना : सोने की वह शाखा जहाँ अंतिम मील का पत्थर पहुँचा होता है।
  • अनुसंधान : सामान की जांच के लिए शाखा जो मुख्य शाखा (खेल इंजन, आदि के महत्वपूर्ण घटकों को संशोधित) को बुरी तरह से प्रभावित कर सकती है।

यह है कि यह कैसे माना जाता है? यह डेवलपर्स की बड़ी टीमों के साथ खेल के विकास की दुनिया में वास्तव में कैसे काम करता है?

मूल रूप से: खेल के विकास में आमतौर पर एक शाखा (और विलय) कब होती है?

जवाबों:


32

शाखा सुविधा के लिए वीसीएस समर्थन पर थोड़ा निर्भर करता है (यानी: क्या वीसीएस इसे आसान या कठिन बनाता है)।

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

जब वीसीएस के साथ काम किया जाता है जो शाखाओं के उपयोग को मुश्किल या दर्दनाक बनाता है (सोर्ससेफ, स्वन, आदि), तो आप संभवतः प्रत्येक जारी उत्पाद के लिए "रिलीज़" शाखा बनाए रखेंगे, और "ट्रंक" में अपना मुख्य विकास करेंगे। "ट्रंक" से "रिलीज़" शाखाओं में परिवर्तन को मर्ज करना और अगर आपको उन रिलीज़ के लिए हॉटफ़िक्स जारी करने की आवश्यकता है।

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

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

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


1
बहुत बढ़िया जवाब। मैं इसे स्वीकार करने से पहले थोड़ा इंतजार करूंगा क्योंकि यह देखने के लिए कि क्या अन्य लोग अपने अनुभव के आधार पर नमक का अनाज लाएंगे, यह देखने के लिए स्वीकार किए जाते हैं।
जेसी एमोंड

8

उपरोक्त पहले से ही एक उत्कृष्ट उत्तर लेकिन ध्यान देने योग्य एक बात यह है कि आप कब शाखा लगाना चाहते हैं और कब टैग करना चाहते हैं।

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

दूसरी बात मैं बहुत दृढ़ता से सलाह दूंगा कि अपनी संपत्ति और कोड को एक ही संस्करण प्रणाली में रखें। कोड की एक शाखा (या टैग) होने पर पूरी तरह से बेकार है यदि आप संपत्ति से मेल नहीं खाते (और फिर शाखा) कर सकते हैं। यह मुख्य कारणों में से एक है गेम कंपनियां पेरफ़ोर्स से प्यार करती हैं - यह बाइनरी आर्ट फ़ाइल्स को समान रूप से खुश करता है क्योंकि यह कोड स्टोर कर रहा है, और (git के विपरीत) यह गैर-तकनीकी प्रकारों के लिए समझ में आता है!

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


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

1

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

जैसा कि आपने कहा, यदि आप अच्छी आदतें चुनना चाहते हैं, तो मैं माइक के दृष्टिकोण के साथ जाऊंगा। यह बहुत मायने रखता है और इसका दृष्टिकोण मैं अपने दो आदमी इंडी परियोजनाओं में उपयोग करता हूं।


1

कुछ भी जो आपको वापस जाने और अधिक काम करने में सक्षम होने की आवश्यकता है, उसे शाखाबद्ध होना चाहिए (लेकिन आवश्यक रूप से शाखित नहीं ... अभी तक)।

इतना सरल होने का कारण। आपको उस कोड का एक निश्चित संस्करण जारी करने में सक्षम होने की आवश्यकता है, किसी अन्य कोड की नहीं, इसलिए उस समय आपको एक शाखा पर काम करने की आवश्यकता होती है।

VCS'es अलग हैं। कुछ - जैसे गिट - किसी भी समय किसी भी प्रतिबद्ध से शाखा करना बहुत आसान है, अन्य - जैसे सीवीएस - बाद में काम करने के लिए बहुत बोझिल है।

शायद आप स्टैकओवरफ़्लो पर एक सवाल खोलना चाहते हैं, यह पूछते हुए कि आपके द्वारा चुने गए संस्करण नियंत्रण प्रणाली के साथ सबसे अच्छा काम कैसे करें? यदि आप वास्तव में बहुत सारे इतिहास के साथ अभी तक शुरू नहीं हुए हैं, तो आप अपने काम के तरीके का वर्णन करने के लिए एक सवाल खोल सकते हैं और आपके लिए सबसे अच्छा संस्करण नियंत्रण प्रणाली की सिफारिश मांग सकते हैं?

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