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