संस्करण नियंत्रण में कोड और कॉन्फ़िगरेशन होना चाहिए जो एप्लिकेशन के निर्माण के लिए आवश्यक है।
इस का मतलब है कि:
अस्थायी सामान जो थोड़े समय के लिए पेश किया गया था (बग के स्थान को इंगित करने के लिए आवश्यक समय, या किसी भाषा की विशेषता के साथ प्रयोग करने के लिए, उदाहरण के लिए) संस्करण नियंत्रण में नहीं होना चाहिए: इसे तब तक रखें जब तक आपको ज़रूरत न हो यह, तो बस जब यह करने के लिए इसे हटा दें ।
स्थानीय फाइलें जो एक विशेष मशीन के लिए उपयुक्त हैं, उन्हें एक शाखा में रखा जा सकता है।
मैं उन्हें सिर्फ स्थानीय रूप से रखने से बचूंगा, क्योंकि जब आपका लैपटॉप चोरी हो जाता है या ओएस को फिर से स्थापित करने के लिए कोई वायरस आपको मजबूर करता है, तो यह सब कुछ फिर से करना बहुत दर्दनाक है (और, वैसे, आप पाते हैं कि आपका अंतिम बैकअप दो साल पहले किया गया था) ।
दूसरी ओर, फ़ाइल संरचना के साथ सावधान रहें: स्थानीय कॉन्फ़िगरेशन ठीक है, जब तक कि यह भारी न हो जाए, और आपको परियोजना में भाग लेने वाले प्रत्येक 42 डेवलपर्स की हर फ़ाइल में एक एकल परिवर्तन करने के लिए मजबूर करता है।
मशीनों के बीच विशिष्टताओं को दूर करने के अवसर के लिए देखें। इसका मतलब हो सकता है:
डेवलपर्स मशीनों पर स्थानीय उदाहरणों को बदलने के लिए एक देव SQL सर्वर तक पहुंच प्रदान करना,
सार्वजनिक पैकेज के लिए पीपीआई या एनपीएम जैसी पैकेज वितरण सेवाओं का उपयोग करना और इन-हाउस पैकेज के लिए उनके निजी समकक्षों,
टीम के सदस्यों से सॉफ्टवेयर के एक ही संस्करण को स्थापित करने के लिए कहें,
जितना संभव हो सके सॉफ्टवेयर अपडेट करें,
या एक क्लिक में मशीन पर ओएस और आवश्यक सॉफ़्टवेयर को तैनात करना संभव है (इसके अलावा प्रत्येक डेवलपर के लिए अपना पसंदीदा विम बनाम एमएसीएस, क्रोम बनाम फ़ायरफ़ॉक्स, आदि स्थापित करने का समय)
इसलिए:
प्रोजेक्ट फाइलें। वर्तमान पीसी पर लेआउट को प्रतिबिंबित करने के लिए पथों को संपादित करने की आवश्यकता हो सकती है।
प्रत्येक पीसी पर एक ही लेआउट का उपयोग क्यों नहीं किया जाता है? परियोजना के भीतर पथ परियोजना फ़ाइल के सापेक्ष होना चाहिए, जिसका अर्थ है कि यह कोई फर्क नहीं पड़ता कि परियोजना कहाँ स्थित है। सॉफ़्टवेयर और लाइब्रेरीज़ के संस्करण गुप्त कीड़े से बचने के लिए समान हैं जो केवल कुछ मशीनों पर दिखाई देते हैं, और टीम के अन्य सदस्यों के लिए पुन: पेश करना असंभव है।
उदाहरण:
विज़ुअल स्टूडियो के साथ बनाई गई परियोजना में, आप पा सकते हैं:
फाइलें खुद। रिश्तेदार होने के पथ, इससे कोई फर्क नहीं पड़ता कि मेरी मशीन पर, परियोजना स्थित है, H:\Development\Hello World Project\
जबकि टीम के अन्य सदस्यों ने परियोजना की जांच की C:\Work\HelloWorld\
।
निर्भरताएँ, अर्थात तृतीय पक्ष और इन-हाउस लाइब्रेरी। दोनों प्रकार को NuGet द्वारा नियंत्रित किया जाना चाहिए जो सभी संघर्षों से संबंधित चर्चाओं को अप्रचलित बनाता है। यदि आपके पास मेरे पास पुस्तकालय का एक ही संस्करण नहीं है, तो NuGet से निर्भरता को अपडेट करने के लिए कहें। जैसा कि सरल है (जब यह अच्छी तरह से काम करता है, जो हमेशा ऐसा नहीं होता है)।
ध्यान दें कि निजी नूगेट में इन-हाउस पुस्तकालयों को रखना महत्वपूर्ण है। एक साझा फ़ोल्डर में संग्रहीत पुस्तकालयों का एक समूह होने या एक टीम में ई-मेल द्वारा भेजे जाने से अराजकता और अवसादग्रस्तता सीआई सर्वर की ओर जाता है।
सेटिंग्स। यह महत्वपूर्ण है कि टीम समान सेटिंग्स साझा करे। यदि टीम का आधा हिस्सा चेतावनियों को गलत मानता है और आधी टीम चेतावनियों को मानती है, तो टीम के पहले हिस्से के सदस्य डेवलपर्स द्वारा टीम के दूसरे भाग से उत्पन्न चेतावनियों को हटाने में अपना समय व्यतीत करेंगे।
उपयोगिताओं से संबंधित सेटिंग्स। वे मुश्किल हैं, क्योंकि टीम के कुछ सदस्यों ने कुछ उपयोगिताओं को स्थापित किया हो सकता है, जबकि अन्य ने नहीं।
यह समान टूलसेट स्थापित करने के लिए दृढ़ता से अनुशंसित है। यदि कुछ प्रोग्रामर स्टाइलकॉप का उपयोग करना चाहते हैं, लेकिन अन्य नहीं करते हैं, तो टीम को काम नहीं मिलेगा। यदि कुछ कोड कॉन्ट्रैक्ट का उपयोग करते हैं लेकिन अन्य नहीं करते हैं, तो उनके पास समान मुद्दे होंगे।
Makefiles। उदाहरण के लिए अनुकूलन को डीबगिंग के दौरान बंद करने की आवश्यकता हो सकती है, लेकिन CI सर्वर के लिए नहीं।
संस्करण नियंत्रण में कई मेकअप रखें। CI सर्वर पर डिबग संस्करण बनाने के लिए और इसे एक क्लाइंट को धक्का देना असामान्य नहीं है जो एक मुश्किल बग का अनुभव करता है।
गंदा बदसूरत हैक्स। उदाहरण के लिए, फ़ंक्शन के बीच में 7 लौटें, फ़ंक्शन के आधार पर कुछ का परीक्षण करने के लिए, और 7 के मूल्य पर तोड़ने का संदेह है।
मैं पहली बार में इस तरह के कोड से बचूंगा। कुछ का परीक्षण करने के लिए, यूनिट परीक्षणों का उपयोग करें। यदि यह वास्तव में डिबगिंग के उद्देश्य के लिए कुछ कोड को स्वैप करने में कुछ सेकंड लेता है , तो इसे करें, लेकिन आप इस कोड को कुछ मिनटों में हटा देंगे, इसलिए इसे करने की कोई आवश्यकता नहीं है।
जैसा कि आप इसका वर्णन करते हैं, आपको एक परीक्षण लिखना चाहिए। उदाहरण के लिए, यदि आप यह सुनिश्चित करना चाहते हैं कि:
class TemperatureConverter
{
public int CelsiusToFahrenheit(int temperature)
{
...
}
}
एक अपवाद फेंकता है जब निरंतर temperature
से हीन होता AbsoluteZero
है, आपको कोड के साथ नहीं खेलना चाहिए। इसके बजाय, एक इकाई परीक्षण बनाएं जो होगा:
- अपने कोड को स्व-दस्तावेज,
- अपने कोड की विश्वसनीयता बढ़ाएँ,
- यह सुनिश्चित करें कि अनुरक्षक उपरोक्त विधि को संशोधित करते समय प्रतिगमन परीक्षण पर भरोसा कर सकता है,
- अपनी टीम के अन्य डेवलपर्स की सेवा करें जिन्हें समान परीक्षा करने की आवश्यकता हो सकती है।