tl; dr - ऐसा लगता है जैसे बड़े लीगों में कदम रखने का समय आ गया है। जब तक आप उस तरह की चीज़ में न हों, तब तक एक सुअर पर लिपस्टिक लगाना किसी भी तरह से प्रीतिकर नहीं है।
लोगों की समस्या
पहला मुद्दा है समकालिकिकरण। यदि आपके पास एक ही कोड पर एक साथ काम करने वाले कई लोग हैं, तो आपको समस्याओं को रोकने के लिए केवल एक नियम की आवश्यकता होगी:
Rule 1: Always pull before you merge/rebase
जब डीवीसीएस की बात आती है, तो दूरस्थ शाखा (यानी मुख्य भंडार) में परिवर्तन करना कठिन होता है और स्थानीय में परिवर्तन करना बहुत आसान होता है। प्रत्येक व्यक्ति अपने स्वयं के कोड परिवर्धन को बिना मुद्दों के अधिक से अधिक पूर्ण बनाने के लिए जिम्मेदार है। जब तक 2 लोग ठीक उसी समय पर प्रतिबद्ध न हों, आपको अनुभव नहीं करना चाहिए। मूल / दूरस्थ मास्टर के लिए प्रतिबद्ध पहुंच केवल कुछ डेवलपर्स तक सीमित होनी चाहिए और उन्हें दूरस्थ ट्रैकिंग शाखाओं के माध्यम से अन्य डेवलपर्स से परिवर्तन खींचना चाहिए।
कोड समस्या
आप कैसे जानते हैं कि आपके द्वारा किए गए परिवर्तन कोड नहीं तोड़ते हैं?
सरल उत्तर ... वे नहीं साबित करने के लिए परीक्षण लिखें। यदि आप विचार के TDD (टेस्ट ड्रिवेन डिज़ाइन) स्कूल को अनदेखा करते हैं, तो परीक्षण का पूरा बिंदु सत्यापन का एक स्तर जोड़ना है जो आपको बिना कोड को बदलने में सक्षम बनाता है।
Rule 2: Don't make assumptions, write proofs (ie tests).
इसके अलावा, मूल / दूरस्थ मास्टर को धकेलने से पहले परीक्षणों का पूरा सरगम चलाया जाना चाहिए।
अपने कमिट्स को छोटा रखें और जितना संभव हो सके संक्षिप्त करें। इस तरह, यदि आपको किसी बदलाव को वापस करने की आवश्यकता है, जो बाद में कुछ टूट गया, तो आप उन भागों को फिर से लागू करने से बचाएंगे जो कोड को नहीं तोड़ते हैं।
आपको पहले कुछ संगठनात्मक पुन: संरचना की आवश्यकता हो सकती है
यदि उपरोक्त समाधान आसानी से लागू नहीं किए जा सकते हैं, तो संभवतः विकास संरचना के साथ कुछ समस्याएं हैं जिन्हें पहले संबोधित करने की आवश्यकता है।
परियोजना का मालिक द्वारपाल होना चाहिए। यदि कोई समन्वय समस्याएं हैं, तो संभवत: कम पहुंच वाले बहुत से लोग हैं। लिनक्स कर्नेल जैसी विशाल परियोजनाओं पर भी, केवल मुट्ठी भर डेवलपर्स ने मूल / दूरस्थ मास्टर रिपॉजिटरी तक पहुंच बनाई है। कमिट को प्रबंधित करने के लिए वास्तव में रिपॉजिटरी के कई स्तर हैं। सिंगल लेयर कमिट मॉडल के बजाय जहां हर कोई अपने परिवर्तनों को मूल पर धकेल रहा है, पदानुक्रमित मॉडल में द्वारपाल होते हैं जो बदलाव को खींचते हैं और परियोजना में शामिल करने से पहले उनकी गुणवत्ता को सत्यापित करते हैं। पदानुक्रमित प्रतिबद्ध मॉडल गुणवत्ता का त्याग किए बिना एकल परत मॉडल की तुलना में बहुत बड़ा और अधिक प्रभावी हो सकता है।
Devs है कि पहुंच के लिए प्रतिबद्ध नहीं मिल के लिए, वे अपने स्वयं के रिमोट ट्रैकिंग शाखाओं बनाने के लिए सीखना चाहिए (Git और gitorious इस के लिए अच्छे हैं) तो devs जो कर पहुँच के लिए प्रतिबद्ध है आसानी से खींच सकते हैं / मूल में शाखाओं को एकीकृत। यदि परिवर्तन छोटे हैं, तो पैच भी काम करेंगे।
मर्ज / रिबेस करने से पहले परिवर्तनों को खींचने की क्षमता यह मानती है कि आप अपनी स्थानीय मास्टर शाखा में विकसित नहीं हो रहे हैं। इसे संभालने का आसान तरीका है कि आप कोड शुरू करने से पहले एक प्रारंभिक खींचतान करें, फिर अपना सारा काम उस शाखा पर करें। कठिन तरीका यह है कि विलय करने से पहले इसे शाखा दें और मास्टर को वापस रोल करें।
समग्र परियोजना के लिए कोडिंग शैली को परिभाषित करें और देवों का पालन करें। योगदान करने वाले देवों को कोड लिखना चाहिए जो सफाई को कम करने के लिए परियोजना के मानकों / मानदंडों के अनुरूप हो। एक खुली परियोजना में कोडिंग शैली एक बड़ा अहंकार अवरोध हो सकता है। यदि कोई मानक निर्धारित नहीं है, तो हर कोई अपनी पसंदीदा शैली में कोड करेगा और कोडबेस बहुत बदसूरत हो जाएगा।
"द मिथिकल मैन मंथ" का मिथक
मानो या न मानो, बड़े / अधिक सफल ओपन सोर्स प्रोजेक्ट लोकतंत्र की तरह नहीं चलते हैं। वे एक पदानुक्रम के रूप में चला रहे हैं। यह कहते हुए कि 8-10 डेवलपर्स से परे एक परियोजना प्रभावी रूप से विकसित नहीं हो सकती है। अगर यह सच होता तो लिनक्स कर्नेल जैसी मेगा-परियोजनाएँ मौजूद नहीं होतीं। गहरा मुद्दा यह है कि हर किसी को पहुंच प्रदान करने के लिए बस कुशल संचार को भी संभालना मुश्किल हो जाता है।
पौराणिक पुरुष महीने की समस्या वास्तव में दूर की जा सकती है। आपको बस अपने प्रोजेक्ट को मिलिट्री की तरह चलाने की जरूरत है। पदानुक्रम के भीतर कई स्तर हैं क्योंकि यह सामान्य ज्ञान है कि व्यक्तिगत लोग केवल कुछ मुट्ठी भर लोगों के साथ संचार का प्रबंधन करने में प्रभावी होते हैं। जब तक 5-7 से अधिक लोगों के काम के प्रबंधन के लिए कोई एकल व्यक्ति जिम्मेदार नहीं होता है, तब तक सिस्टम अनिश्चित काल के लिए स्केल कर सकता है।
यह सबसे अच्छा / अनुभवी डेवलपर्स को अधिक एकीकरण और उच्च-स्तरीय डिज़ाइन / नियोजन करने के लिए सीमित कर सकता है लेकिन यह एक बुरी बात नहीं है। स्केलिंग का एक हिस्सा यह तय करने के लिए कदम बढ़ा रहा है कि परियोजना को दीर्घकालिक योजना की आवश्यकता है। उच्चतम स्तर पर जिन लोगों के पास भविष्य में सबसे बड़ा निवेश (समय भी एक संसाधन है) है उन पर बड़े निर्णय लेने का आरोप लगाया जाना चाहिए।
बढ़ते दर्द के बीच एक ओपन सोर्स प्रोजेक्ट के बारे में सुनना अच्छा है। बधाई और शुभकामनाएँ।