योजनाबद्ध और स्रोत कोड का संस्करण नियंत्रण


12

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

  • स्रोत कोड के लिए मैं निश्चित रूप से Git का उपयोग करूंगा। लेकिन जब वे वास्तव में बाइनरी फ़ाइलों (नए ईगल संस्करण कुछ एक्सएमएल प्रारूप का उपयोग करते हैं, तो वर्टीकैट वर्जनिंग के लायक हैं, लेकिन यह इतना मानव पठनीय नहीं है ...)?

  • क्या सूत्रों और स्कीमों को एक Git रिपॉजिटरी में डालना अच्छा है? यह समझ में आता है, लेकिन दूसरी ओर मेरे लॉग में सॉफ्टवेयर और हार्डवेयर दोनों बदलाव होंगे। इसके अलावा सॉफ्टवेयर में कई शाखाएँ हो सकती हैं, लेकिन हार्डवेयर शायद नहीं ...

  • हार्डवेयर संशोधन से कैसे निपटें? उन्हें टैग करें या उन्हें अलग निर्देशिका में सहेजें?

  • इसके अलावा हार्डवेयर संशोधन और फर्मवेयर संस्करण के बीच कुछ निर्भरताएं हो सकती हैं। उनसे कैसे निपटें?

क्या आप कृपया मेरे साथ अपनी सर्वोत्तम प्रथाओं को साझा कर सकते हैं?


एक वाणिज्यिक समाधान काम करेगा?
यूजीन श।

5
मैं एक व्यावसायिक संस्करण नियंत्रण प्रणाली को फिर कभी नहीं छूऊंगा। उनमें से मेरा अनुभव भयानक वर्कफ़्लोज़ है जो svn या यहां तक ​​कि गिट की तुलना में उपयोग करने के लिए बहुत कठिन हैं।
pjc50

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

जवाबों:


19

इसका अधिकांश हिस्सा व्यक्तिगत प्राथमिकताओं में आता है।

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

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

मैं सामान्य रूप से हार्डवेयर के लिए एक रिपॉजिटरी बनाऊंगा, एक सॉफ्टवेयर के लिए और एक फ़र्मवेयर के लिए अगर यह एक बड़ी, संभावित रूप से लंबे समय से चल रही परियोजना है, लेकिन छोटे सेवा परियोजनाओं, उदाहरणों या थोड़े प्रयोगों के लिए, मैं अक्सर इसे एक रिपॉजिटरी में डाल देता हूं, जिसके परिणामस्वरूप अराजकता बड़ी नहीं होगी।

Git में आप उप-रिपॉजिटरी का उपयोग करने के साथ-साथ हार्डवेयर प्रोजेक्ट या आसपास के अन्य तरीके से फ़र्मवेयर को एकीकृत करने के लिए उपयोग कर सकते हैं, भले ही वे अलग-अलग प्रबंधित रिपॉजिटरी हों।

बड़ी परियोजनाओं के लिए, मैं आमतौर पर बग ट्रैकिंग सिस्टम का उपयोग मुद्दों और प्रस्तावों का ट्रैक रखने के लिए करता हूं, फिर से एचडब्ल्यू के साथ-साथ एसडब्ल्यू के लिए, मेंटिस एक अच्छा है जिसे मुफ्त में इस्तेमाल किया जा सकता है।

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

अगर R01 में ऐसा कुछ दिलचस्प है जो R02 (या अन्य तरीके से) में नहीं हो रहा है, तो आपके पास दो Git Hashes हैं जिनसे आप स्रोत फ़ाइलों की तुलना कर सकते हैं, कोई चिंता नहीं।

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

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


1
क्या यह वास्तव में कभी-कभी हार्डवेयर और फर्मवेयर को अलग-अलग रिपोज में डालने के लिए समझ में आता है? उन्हें एक में रखना एक समस्या कैसे होगी? यदि आप एक साथ जुड़े घटकों में परिवर्तन का ट्रैक रखने की जरूरत है (उदाहरण के लिए स्वैप IO पिन विभिन्न फर्मवेयर असाइनमेंट में परिलक्षित होने की जरूरत है, और अपूर्ण संस्करणों की जाँच करने के लिए नेतृत्व कर सकते हैं) मैं इसके बजाय एक समस्या होने की उम्मीद है।
21

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

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

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

@leftaroundabout: यह हार्डवेयर और फर्मवेयर के बीच संबंध पर निर्भर करता है। आइए सामान्य सॉफ्टवेयर परियोजनाओं के साथ एक सादृश्य लें। क्या आप अपनी वेबसाइट के साथ gif और jpg फाइल करेंगे? इस मामले में दोनों बाइनरी और स्रोत एक-दूसरे के साथ बदलते हैं, भले ही चित्र अक्सर बदल न जाएं। लेकिन .. क्या आप अपने प्रोजेक्ट के साथ Apache या Nginx सोर्स कोड लगा सकते हैं। उस बात के लिए, क्या आप लिनक्स कर्नेल के स्रोत कोड का पालन करेंगे? इस मामले में Apache या Nginx और Linux कर्नेल हार्डवेयर के लिए अधिक अनुरूप है - वे बदल जाते हैं लेकिन कोड से स्वतंत्र रूप से आप उन पर चलाते हैं
slebetman

5

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

2) हमारे एसवीएन में निम्नलिखित संरचना है।
/ टैग
/ शाखा
/ ट्रंक / हार्डवेयर
/ ट्रंक / सॉफ्टवेयर / फर्मवेयर

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

2) टैग उप-फ़ोल्डरों से नहीं पूरे ट्रंक से बनाए जाते हैं, जैसे टैग / मेनबोर्ड-v1.2.345। हार्डवेयर (अर्थात् पीसीबी) में हमेशा सिल्क स्क्रीन प्रिंट में एसवीएन संशोधन होता है या तांबे में एक सीधा संदर्भ होता है।

4) हार्डवेयर और फर्मवेयर के बीच निर्भरता जटिल हो सकती है। IMO यह कमेंट्स पर उपयोगी टिप्पणियों को छोड़कर रिपॉजिटरी लेवल पर इससे निपटने के लिए बहुत मायने नहीं रखता है।
स्पेयर I / O पिन का उपयोग करके हार्डवेयर परिवर्तन एन्कोडिंग पर विचार करें। 16 विभिन्न हार्डवेयर संस्करणों को एन्कोड करने के लिए 4 पिन का उपयोग करने जैसा कुछ। हमने संस्करणों को एन्कोड करने के लिए विभिन्न प्रतिरोध मूल्यों के साथ एकल एडीसी इनपुट का भी उपयोग किया। इस तरह से यह सॉफ़्टवेयर किस हार्डवेयर पर चलता है "जान सकता है" और विशिष्ट सुविधाओं को बदल / अक्षम / सक्षम बनाता है।


मैं सहमत हूँ। मैंने "रिलीज़ बंडल" बनाने का एक अच्छा अभ्यास भी देखा है - योजनाबद्ध, बीओएम, गेमर्स, पूरे लॉट - उत्पादन के लिए हर रिलीज के अवसर पर। आप इन A, B, C आदि को कॉल करते हैं और फिर उन्हें कहीं संग्रहित करते हैं जहाँ टीम उनका उल्लेख कर सकती है। इसके अलावा, यह ट्रैक करने के कुछ साधनों को मत भूलें कि आपने कौन से वायर मोड पर किस प्रोटोटाइप बोर्ड पर काम किया है।
pjc50

@ pjc50: वास्तव में हम रिलीज बिल्ड का निर्माण "बिल्ड" के रूप में भी करते हैं, लेकिन स्रोत नियंत्रण से बाहर (लेकिन एक संशोधन संदर्भ के साथ)। अनिवार्य रूप से यह निर्माता को मिली हर चीज की एक सटीक प्रति होगी। यदि आप उच्च मात्रा के उत्पादन के साथ पेशेवर रूप से हार्डवेयर विकास करते हैं तो कुछ गलत होने पर सभी जानकारी आसानी से उपलब्ध होना बहुत जरूरी है। यदि आपको याद नहीं है कि क्या आप बोर्ड हाउस "यह एक महत्वपूर्ण दस्तावेज" भेजते हैं, जो शायद कस्टम पीसीबी कॉपर मोटाई को निर्दिष्ट करता है तो आप मुसीबत में पड़ सकते हैं।
Rev1.0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.