साझा पुस्तकालयों के लिए शाखाकरण और संस्करण रणनीति


12

ये पोस्ट संबंधित लगती हैं, लेकिन मेरा मस्तिष्क पिघलना शुरू कर रहा है, यह सोचने की कोशिश कर रहा है: पी

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

मैं साझा पुस्तकालयों में कुछ डुप्लिकेट कोड को खींचना चाहता हूं। मैं मूल रेपो को अकेला छोड़ रहा हूं ताकि हम कुछ भी न तोड़ें - हम मौजूदा कोड को स्थानांतरित कर सकते हैं और / या जरूरत पड़ने पर मौजूदा कोड को रिफलेक्टर कर सकते हैं। इसलिए मैंने पुस्तकालयों सहित नए कोड के लिए एक रेपो की स्थापना की है।

मेरी समस्या हमें अत्यधिक प्रक्रिया में रखे बिना पुस्तकालयों के संस्करण के आसपास घूमती है: हमने स्वीकार किया कि हमें एक अधिक सुसंगत दृष्टिकोण की आवश्यकता है, और अधिक देवों के साथ सभी समान कोड, प्रबंधन और अन्य देवता चीजों को पुनर्गठित करने के लिए खुले हैं, लेकिन शायद ऐसा नहीं होगा उत्पादकता को प्रभावित करने के लिए समाधान शुरू होता है, तो अच्छी तरह से नीचे जाएं।

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

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

तो मेरा सवाल है: मैं क्या याद कर रहा हूँ? मुझे लगता है कि मैंने एक समाधान पर तय किया है और अब मैं इस पर बदलाव लाने की कोशिश कर रहा हूं जो बदलाव को आसान बना देगा। इस तरह की समस्या को हल करने के लिए आपने किस तरह की रणनीतियों का इस्तेमाल किया है? मुझे एहसास है कि यह सवाल सभी जगह है; मैं अनिश्चितता के किसी भी बिंदु को साफ करने और स्पष्ट करने की पूरी कोशिश करूंगा।

और जितना मुझे मर्क्यूरियल का उपयोग करना पसंद होगा, हमने पहले ही एक केंद्रीकृत वाणिज्यिक एससीएम (वॉल्ट) पर पैसा खर्च किया है और स्विच करना एक विकल्प नहीं है। इसके अलावा, मुझे लगता है कि यहां मुद्दा संस्करण नियंत्रण उपकरण की पसंद से अधिक गहरा है।


निर्धारित लागत डूब रही है
वैकल्पिक

जवाबों:


1

मैं आपकी पहल की सराहना करता हूं। जैसा कि आप इसे लागू करते हैं, संगठन के लिए कई लाभ प्राप्त करने चाहिए। मैं इसे कॉपी करने के बजाय कोड को स्थानांतरित करूंगा। प्रतियां होने से असंगत परिवर्तन हो सकते हैं, जिन्हें हल करने की आवश्यकता होगी।

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

जबकि लाइब्रेरीज़ स्थिर हो रही हैं, नई लाइब्रेरी प्राप्त करना संभवतः कोड अपडेट प्रक्रिया का हिस्सा होना चाहिए। आप लाइब्रेरी परिवर्तनों के कमिट शेड्यूल करना चाहते हैं। कोड को स्थानांतरित करने की घोषणा करने से परस्पर विरोधी परिवर्तनों को कम करने में मदद मिल सकती है।

पुस्तकालयों को अलग-अलग परियोजनाओं के रूप में माना जाना चाहिए और जितनी जल्दी हो सके स्थिर किया जाना चाहिए। एक बार जब वे स्थिर हो जाते हैं (विशेषकर इंटरफेस) तो अन्य परियोजनाओं के साथ बदलाव को एकीकृत करना आसान होना चाहिए। नए पुस्तकालयों को पुराने कोड के साथ काम करना चाहिए। अपनी स्थिर आईडी के साथ स्थिर लाइब्रेरी रिलीज़ टैग करें। पुस्तकालयों के साथ व्यवहार करने का प्रयास करें क्योंकि आप तीसरे पक्ष के पुस्तकालय होंगे।


6

परियोजनाओं के बीच साझा किए जाने वाले कोड को स्वयं प्रोजेक्ट के रूप में माना जाना चाहिए। उन्हें तीसरे पक्ष के पुस्तकालयों के समान व्यवहार किया जाना चाहिए। कोई अन्य रास्ता नहीं है।

यदि आप साझा समूह के लिए रणनीति अपनाने के लिए अपना समूह नहीं प्राप्त कर सकते हैं, तो आप अपने आप को मर्क्यूरियल या जीआईटी जैसे आधुनिक स्रोत कोड प्रबंधन टूल की मदद से अपना सकते हैं, भले ही एससीएम आपकी कंपनी आधिकारिक तौर पर उपयोग न करे। थोड़ी देखभाल के साथ, दो एससीएम एक ही कार्य निर्देशिका का उपयोग कर सकते हैं एक को दूसरे की आंतरिक फ़ाइलों को अनदेखा करने के लिए कहकर। आप एक SCM का उपयोग रोज़ाना, और कंपनी एक को एकीकृत करने के लिए करेंगे।

किसी भी दर पर, आपको यह सुनिश्चित करना चाहिए कि आपके कार्यशील निर्देशिका को अपडेट करने के लिए अन्य परियोजनाओं के साथ साझा किए गए संशोधनों के साथ क्या करना चाहिए। वे तभी हो सकते हैं जब आप उन असंगतताओं से निपटने के लिए तैयार हों जो उत्पन्न हो सकती हैं; अन्यथा, आपका काम करने योग्य से परे अस्थिर हो सकता है।


4

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

कुछ लाभ:

  1. प्रत्येक मॉड्यूल का सरल डिबगिंग।
  2. तेजी से निर्माण चक्र (पुस्तकालयों का पुनर्निर्माण नहीं हुआ है जो नहीं बदले हैं)
  3. एक बार जब कुछ काम करता है तो आप उस मॉड्यूल के बाहर किसी अन्य क्षेत्र को बदलकर (100% नहीं, लेकिन आप संभावना कम कर देते हैं) इसे तोड़ सकते हैं।
  4. अगर यह बड़े अंतर पर निर्भर नहीं है, तो काम के कामों को तोड़ना आसान है।
  5. जब आप एक पुस्तकालय को ठीक करते हैं तो छोटे टुकड़ों का तेज़ वितरण (आपके पास .dll / .so फ़ाइलों का एक बड़ा कारण)।

मेरे पास इस भाग के बारे में एक प्रश्न है:

"मेरे जुनूनी दिमाग में आदर्श समाधान अलग-अलग पुस्तकालयों का निर्माण करना है, प्रत्येक आश्रित परियोजना के साथ जानबूझकर चुने गए, उनके संगत संस्करणों के खिलाफ बनाया गया है।"

क्या आप पूरी परियोजना को स्थिर करते हैं? यदि ऐसा होता है: 6. अनावश्यक कोड ब्लोट में कमी।

कुछ नकारात्मक:

  1. यदि प्रोजेक्ट छोटा है, तो आप केवल जटिलता जोड़ रहे हैं जहां इसकी आवश्यकता नहीं है।
  2. बहुत सारे मॉड्यूल ब्रांच करना वास्तव में बड़ी परियोजनाओं के लिए रखरखाव समस्या में बदल सकता है। मैं "तिजोरी" नहीं जानता, इसलिए मुझे यकीन नहीं है कि उनके ब्रांचिंग ऑपरेशन अच्छे या बुरे हैं।

यह C # कोड है, इसलिए यह सामान्य अर्थ में स्टेटिक लिंकिंग के लिए "नहीं" है। तिजोरी तोड़फोड़ की तरह है, पूर्व 1.5: PI ने svn में मर्ज ट्रैकिंग के लिए इतनी उत्सुकता से इंतजार किया , यह सोचकर कि मैं स्वर्ग में था जब यह आखिरकार आ गया। फिर मुझे डीवीसीएस मिला।
शंबुलेटर

1

अभी, ऐसा लग रहा है कि आपके पास एक बार एक लक्ष्य में सभी कोडबेस बने हैं। आपके पास संभवतः पाँच से अधिक डेवलपर नहीं हैं। मैं वास्तव में पुस्तकालयों को बहुत अलग करने की उपयोगिता नहीं देखता। आप कोड से अपने वर्कफ़्लो को बदल देंगे -> संकलन -> कोड को चलाएं -> संकलन -> कॉपी DLL -> संकलन -> रन ... ick।

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

उस बुनियादी ढांचे के बिना, मैं निम्नलिखित में से किसी एक पर लागू होने पर परियोजना को अलग करूंगा:

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

जब आपके पास बहुत सी परियोजनाएँ हैं और कुछ डेवलपर्स और स्वतंत्र रिलीज़ साइकिल हैं, तो उस बुनियादी ढांचे के निर्माण के बारे में मुझे चिंता होगी।

क्या आप कर सकते हैं और चाहिए अब क्या विश्वसनीय, repeatable बनाता है के लिए एक बिल्ड सर्वर की स्थापना की और यह सुनिश्चित करें कि आप किसी दिए गए निष्पादन से स्रोत संशोधन पा सकते हैं बनाने है। आप .NET का उपयोग कर रहे हैं; रिविजन नंबर सहित एक वर्जन स्ट्रिंग डालने के लिए क्रूज़कॉन्ट्रोल.नेट सेट करना बहुत ही सरल है।

एक बार आपके पास एक बिल्ड सर्वर होने के बाद, लाइब्रेरी से अलग होना, इसे वॉल्ट में स्थानांतरित करने का एक मामला होगा, CC.NET में एक और लक्ष्य जोड़कर, और परिणामी DLL को अपने मुख्य प्रोजेक्ट के लाइब्रेरी फ़ोल्डर में कॉपी करके इसे कमिट किया जाएगा। दिन-प्रतिदिन के विकास की तुलना में एससीएम पक्ष पर आसान।


1

मर्क्यूरियल में एक सुविधा होती है जिसे सबप्रॉपिटरीज़ कहा जाता है। मैंने हाल ही में किलन से यह ब्लॉग पढ़ा कि वे कैसे काम करते हैं।

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

हो सकता है कि वॉल्ट में एक समान सुविधा हो।


1

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

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

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