स्रोत फ़ाइलों में ओवरराइटिंग कार्य को टीम कैसे रोकती है? [बन्द है]


26

यह मेरे लिए संभावना है कि उदाहरण के लिए, खेल इंजन के लिए, एक साथ कई लोगों द्वारा काम किया जा रहा है कि ओवरराइटिंग को कैसे रोका जाए?

मान लीजिए कि डेवलपर एक पर काम कर रहा है Audio.cppऔर डेवलपर दो भी काम कर रहा है Audio.cpp, यह कैसे आम तौर पर बड़ी टीमों में ओवरराइटिंग से निपटने में कामयाब होता है? ( डेवलपर के समाप्त होने तक फ़ाइल को खोलने से डेवलपर दो को रोकने के लिए दूसरे शब्दों में )


84
आपके द्वारा चयनित टैगों में से एक पहले से ही उत्तर है।
फिलिप

18
वास्तव में, 4 टैग की 3 एक जवाब है, लेकिन एक है जवाब।
16

1
संबंधित: gamedev.stackexchange.com/q/480
moooeeeep

जवाबों:


69

अधिकांश सॉफ़्टवेयर डेवलपमेंट टीम (न केवल गेम डेवलपमेंट में) संस्करण नियंत्रण सॉफ़्टवेयर का उपयोग करके इस समस्या को हल करते हैं । उदाहरण हैं

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

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


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

18
यह उत्तर भी निहित है कि विलय हमेशा मैन्युअल रूप से किया जाता है। हालांकि अधिकांश समय संस्करण नियंत्रण सॉफ्टवेयर स्वचालित रूप से अंतर को मर्ज कर सकता है, और वास्तव में कांटेदार परिवर्तनों के लिए केवल मैनुअल काम की आवश्यकता होती है।
झॉकिंग

कृपया टिप्पणियों, लोगों में विस्तारित चर्चा से बचें। यह चर्चा मंच नहीं है। यदि आप ऐसा करना चाहते हैं तो गेम डेवलपमेंट चैट का उपयोग करें । मैंने कई टेंपरेरी कॉमेंट थ्रेड्स साफ़ किए हैं।
जोश

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

13

डेवलपर्स एक ही फ़ाइल का उपयोग नहीं करते हैं ।

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

यह संस्करण नियंत्रण की अन्यथा सरल अवधारणा के एक हिस्से के लिए एक सरल व्याख्या है ।


6
इसके अलावा वे इस उपन्यास को कहते हैं जिसे संचार कहते हैं और सॉफ्टवेयर वैक्यूम में नहीं लिखा जाता है। इसलिए यदि वे संघर्ष को नहीं समझते हैं, तो वे दूसरे व्यक्ति से बात करते हैं या पहले से समन्वय करते हैं।
ब्रायन

9

संस्करण नियंत्रण और मर्ज के साथ टकराव से निपटने के बारे में अन्य उत्तरों में उठाए गए बिंदुओं के अलावा, कम से कम दो अन्य तरीके हैं जो टीम के सदस्य एक-दूसरे के काम को अधिलेखित करने से बच सकते हैं:

  • कुछ संस्करण नियंत्रण प्रणाली (उदाहरण के लिए SVN) फाइलों को लॉक करने की अनुमति देती हैं। इसका मतलब है कि एक टीम का सदस्य किसी फ़ाइल की अनन्य स्वामित्व को कुछ समय के लिए ले सकता है, अन्य टीम के सदस्यों को परस्पर विरोधी संपादन (या, वास्तव में, कोई भी संपादन) करने से रोकता है जब तक कि फ़ाइल बाद में अनलॉक नहीं हो जाती।

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

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

    बेशक, हमेशा कुछ ओवरलैप होंगे जिन्हें किसी अन्य तरीके से प्रबंधित किया जाना चाहिए।


2
प्लस साइड पर, लॉकिंग एकमात्र तरीका है जिससे आप एक .JPEG या अन्य गैर-सादा-पाठ फ़ाइल को संपादित कर सकते हैं। यह एक सैद्धांतिक सीमा नहीं है, यह सिर्फ इतना है कि मर्ज उपकरण आमतौर पर चूसते हैं।
16

2
@MSalters यह नहीं है कि उपकरण चूसना, यह सिर्फ इतना है कि अधिकांश मर्ज उपकरण पाठ के लिए बनाए गए हैं, बाइनरी डेटा के लिए नहीं। और यदि आप दो बदलावों को एक ही पिक्सेल को एक फाइल में संशोधित करते हैं, तो आप एक संघर्ष को कैसे हल करेंगे? या इससे भी बदतर, आप जेपीईजी संपीड़न के कारण हुए परिवर्तनों में कैसे कारक होंगे? यह एक बहुत ही जटिल मुद्दा है, जिसमें एक अच्छा समाधान भी नहीं हो सकता है, इसलिए अधिकांश मर्ज टूल समर्थन नहीं करते हैं, क्योंकि इसकी आवश्यकता बहुत दुर्लभ है और कार्यक्षमता को लागू करना मुश्किल है।
मोरिसी

3
@MaurycyZarzycki: एक ही अक्षर बदलना समान पिक्सेल को बदलने के समान है: जिसे मैनुअल समाधान की आवश्यकता होती है। .JPEG शायद एक बुरा उदाहरण था, मुझे अब एहसास हुआ, क्योंकि कलाकार हानिपूर्ण स्वरूपों पर काम नहीं करते हैं। लेकिन मर्ज समस्या भी .PNG के साथ मौजूद है। बहुत कम से कम, आप सराहना करेंगे कि क्या मर्ज टूल XML को बिना तोड़े विलय करने में सक्षम होगा।
10

@ शेर्सर्स श्योर, इसके साथ मैं और अधिक सहमत हो सकता हूं।
मॉरीसी

1
@xorsyst: इसे इस तरह आज़माएँ: SVN से दो स्थानों पर जाँच करें। फिर लोकेशन से फाइल को लॉक करें। लोकेशन 2 को पता नहीं चलेगा कि यह कमिट या अपडेट होने तक लॉक है।
ज़ैन लिंक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.