सोर्स कोड कंट्रोल में आपके प्रोजेक्ट का क्या हिस्सा होना चाहिए?


54

एक साथी डेवलपर ने एक नई Drupal परियोजना पर काम शुरू कर दिया है, और sysadmin ने सुझाव दिया है कि उन्हें केवल साइट / डिफ़ॉल्ट उपनिर्देशिका को स्रोत नियंत्रण में रखना चाहिए, क्योंकि यह "अपडेट को आसानी से स्क्रिप्ट करने योग्य बना देगा।" कुछ हद तक संदिग्ध दावा करते हुए, यह एक और सवाल उठाता है कि स्रोत नियंत्रण के तहत क्या फाइलें होनी चाहिए? और क्या ऐसी स्थिति है जहां फाइलों के कुछ बड़े हिस्से को बाहर रखा जाना चाहिए?

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

उस ने कहा, मैं इस पर अन्य राय प्राप्त करना पसंद करूंगा। क्या सब कुछ नियंत्रण में नहीं रखने के लिए कोई तर्क हैं?


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

जवाबों:


71

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


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

1
लिया गया बिंदु, उस स्तर के लिए आवश्यक स्तर या व्यावहारिकता है।
एड जेम्स

3
@JayBazuzi: वर्कस्टेशन सेटअप गाइड (स्रोत नियंत्रण में) आवश्यक उपकरण और निर्भरता को रेखांकित करना चाहिए, साथ ही कैसे सेट अप करना है और कहां से उपकरण प्राप्त करना है। एक उपयोगी टूलकिट को बनाए रखना महत्वपूर्ण है, लेकिन स्रोत नियंत्रण का उद्देश्य नहीं है। मुझे लगता है कि अगर आप वास्तव में चाहते थे, तो आप इंस्टॉलर फ़ाइल / .msi और कुछ निर्देश फ़ाइलों को जोड़ सकते थे, लेकिन हो सकता है कि यह कार्यस्थलों में संभव न हो। क्या आप वास्तव में VisualStudio Pro 2010 या IBM RAD, XMLSpy इत्यादि को अपने स्रोत नियंत्रण प्रणाली में जांचना चाहेंगे ? कई कार्यस्थलों ने इन उपकरणों के लिए तैनाती को नियंत्रित किया है।
FrustratedWithFormsDesigner

2
@ कार्टिस्टोक्स: यह बालों को विभाजित करने वाला है। यह आमतौर पर माना जाता है कि बिल्ड बॉक्स में वैसी ही लाइब्रेरी होती हैं जैसी कि देव बॉक्स में होती हैं। यदि दो अलग हैं, तो आईटी प्रबंधक के साथ कुछ गड़बड़ है। आपको (आदर्श रूप से) केवल स्रोत कोड की आवश्यकता होगी। कुछ परियोजनाएँ यह लागू नहीं होती हैं, लेकिन अधिकांश के लिए यह होनी चाहिए।
माइक एस

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

29

सूर्य के नीचे हर चीज को स्रोत नियंत्रण में रखना सबसे अच्छा है।

  • कोड

  • पुस्तकालय

  • साधन

  • बिल्ड / तैनाती लिपियों

  • डेटाबेस निर्माण और अद्यतन स्क्रिप्ट

  • कुछ दस्तावेज

  • पर्यावरण विशिष्ट कॉन्फ़िगरेशन फ़ाइलें

एकमात्र चीज जिसे स्रोत नियंत्रण में नहीं रखा जाना चाहिए, वह आपकी परियोजना के लिए कलाकृतियां हैं।


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

2
@BruceEdiger उस मामले में मैं व्यक्तिगत रूप से आउटपुट और टूल विशिष्ट जानकारी दोनों चाहता हूँ। उपकरण गायब हो जाता है, तो आप कम से कम अभी भी एक स्थिर इलेक्ट्रॉनिक प्रतिलिपि :) है
maple_shaft

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

कंपाइलर के विशिष्ट संस्करण के बारे में आप क्या उपयोग कर रहे हैं? हेक, पूरे ओएस क्यों नहीं?
wnoise

18

मैं कहूँगा कि;

  • बिल्ड को करने के लिए आवश्यक किसी भी फ़ाइल को संस्करण नियंत्रण में रखा जाता है
  • किसी भी फ़ाइल (जो) निर्माण द्वारा उत्पन्न किया जा सकता है नहीं करता है

मैं ट्रंक के बाहर कहीं उपकरण स्थापित पैकेज जैसे बड़े बायनेरिज़ रखना चाहता हूं, लेकिन उन्हें अभी भी संस्करण नियंत्रण में होना चाहिए।


15

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


15

कठिन अनुभव ने मुझे सिखाया है कि लगभग सब कुछ स्रोत नियंत्रण में है। (यहां मेरी टिप्पणी एक दशक और मालिकाना हार्डवेयर के साथ एम्बेडेड / टेलीकॉम सिस्टम के लिए विकसित होने वाले डेढ़ दशक के दौरान रंगी हुई है, और कभी-कभी उपकरण खोजने के लिए कठिन है।)

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

यहाँ कुछ उत्तर कहते हैं कि "टूलचैन को स्रोत नियंत्रण में न रखें"। मैं यह नहीं कहूंगा कि यह गलत है, लेकिन टूलचैन को स्रोत नियंत्रण में रखना सबसे अच्छा है जब तक कि आपके पास इसके लिए एक ठोस ठोस कॉन्फ़िगरेशन प्रबंधन (CM) प्रणाली न हो । फिर से, ऊपर बताए अनुसार नवीनीकरण समस्या पर विचार करें। इससे भी बदतर, मैंने एक ऐसी परियोजना पर काम किया, जहां टूलचिन के चार अलग-अलग स्वाद थे जब मुझे काम पर रखा गया था - वे सभी सक्रिय उपयोग में थे ! मेरे द्वारा किए गए पहले कामों में से एक (मैं काम करने के लिए एक निर्माण प्राप्त करने में कामयाब होने के बाद) टूलचिन को स्रोत नियंत्रण में रखा गया था। (ठोस मुख्यमंत्री प्रणाली का विचार आशा से परे था।)

और क्या होता है जब विभिन्न परियोजनाओं के लिए अलग-अलग टूलचिन की आवश्यकता होती है? बिंदु में मामला: कुछ वर्षों के बाद, परियोजनाओं में से एक को एक विक्रेता से अपग्रेड मिला और सभी मेकफाइल्स टूट गए। पता चला कि वे GNU मेक के नए संस्करण पर निर्भर थे। इसलिए हम सब अपग्रेड हुए। वूप्स, एक और प्रोजेक्ट का मेकफाइल्स सब टूट गया। पाठ: जीएनयू के दोनों संस्करण बनाते हैं, और उस संस्करण को चलाते हैं जो आपके प्रोजेक्ट चेकआउट के साथ आता है।

या, यदि आप एक ऐसी जगह पर काम करते हैं जहाँ बाकी सब कुछ बेतहाशा नियंत्रण से बाहर है, तो आपके पास वार्तालाप है, "अरे, आज नया आदमी शुरू हो रहा है, जहां संकलक के लिए सीडी है?" "डननो, जैक के जाने के बाद से उन्हें नहीं देखा, वह सीडी का संरक्षक था।" "उह, क्या हम दूसरी मंजिल से आगे बढ़ने से पहले नहीं थे?" "शायद वे एक बॉक्स या कुछ और में हैं।" और चूंकि उपकरण तीन साल पुराने हैं, इसलिए विक्रेता से उस पुरानी सीडी को प्राप्त करने की कोई उम्मीद नहीं है।

आपकी सभी निर्मित स्क्रिप्ट स्रोत नियंत्रण में हैं। सब कुछ! पर्यावरण चर के लिए सभी तरह से नीचे। आपकी बिल्ड मशीन प्रोजेक्ट की जड़ में किसी एक स्क्रिप्ट को निष्पादित करके आपकी किसी भी परियोजना का निर्माण चलाने में सक्षम होनी चाहिए। ( ./buildएक उचित मानक है; ./configure; makeलगभग उतना ही अच्छा है।) स्क्रिप्ट को पर्यावरण को आवश्यकतानुसार सेट करना चाहिए और फिर जो भी उपकरण उत्पाद बनाते हैं उसे लॉन्च करें (मेक, एंट, आदि)।

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

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

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

  • ब्रह्मांड में जहां सब कुछ स्रोत नियंत्रण में है, आप 2.2.6 टैग की जांच करते हैं, एक या एक घंटे में डिबग बिल्ड तैयार करते हैं, एक या दो दिन "वीआईपी बग" को फिर से बनाते हैं, कारण को ट्रैक करते हैं, इसे ठीक करते हैं वर्तमान रिलीज़, और ग्राहक को उन्नत करने के लिए मना लें। तनावपूर्ण, लेकिन लगभग उतना बुरा नहीं है जितना कि अन्य ब्रह्मांड जहां आपका हेयरलाइन 3cm अधिक है।

उस ने कहा, आप इसे बहुत दूर ले जा सकते हैं:

  • आपके पास एक मानक ओएस स्थापित होना चाहिए जो आपके पास "सोने की नकल" हो। यह दस्तावेज़, शायद एक README में है जो स्रोत नियंत्रण में है, ताकि आने वाली पीढ़ियों को पता हो कि संस्करण 2.2.6 और पहले केवल RHEL 5.3 और 2.3.0 पर बनाया गया था और बाद में केवल Ubuntu 11.04 पर बनाया गया था। यदि आपके लिए टूलचैन को इस तरह से प्रबंधित करना आसान है, तो इसके लिए जाएं, बस सुनिश्चित करें कि यह एक विश्वसनीय प्रणाली है।
  • स्रोत नियंत्रण प्रणाली में बनाए रखने के लिए प्रोजेक्ट प्रलेखन बोझिल है। प्रोजेक्ट डॉक्स हमेशा कोड के आगे होते हैं, और वर्तमान संस्करण के लिए कोड पर काम करते समय अगले संस्करण के लिए प्रलेखन पर काम करना असामान्य नहीं है। खासकर यदि आपके सभी प्रोजेक्ट डॉक्स बाइनरी डॉक्स हैं जिन्हें आप अलग नहीं कर सकते हैं या मर्ज नहीं कर सकते हैं।
  • यदि आपके पास एक सिस्टम है जो बिल्ड में उपयोग की जाने वाली सभी चीजों के संस्करणों को नियंत्रित करता है, तो इसका उपयोग करें ! बस यह सुनिश्चित करें कि पूरी टीम में सिंक करना आसान है, ताकि सभी (बिल्ड मशीन सहित) एक ही उपकरण के सेट से खींच रहे हों। (मैं डेबियन के पिल्डर जैसी प्रणालियों के बारे में सोच रहा हूं और अजगर के वर्चुअन का जिम्मेदार उपयोग करता हूं।)

किसी भी हार्ड-टू-रिप्लेस हार्डवेयर की जांच करना न भूलें। एक कंपनी ने एक निर्माण खो दिया क्योंकि उनके पास अब कुछ सीपीयू (एचपीपीए; 68040?) नहीं था कि निर्माण उपकरण चल पड़े।
hotpaw2

1
"मुख्यमंत्री प्रणाली" किसके लिए है?
बोडो

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

टूलचिन लगाने और स्रोत नियंत्रण में कलाकृतियों का निर्माण करने की सलाह के कारण डाउनवोटिंग। हां, यदि आपके पास उनके लिए खराब प्रबंधन समाधान हैं, तो यह कभी-कभी आवश्यक हो सकता है, लेकिन यह कभी भी वांछनीय नहीं है। और PHP जैसे लोकप्रिय ओएसएस उपकरण हमेशा उपलब्ध रहेंगे (क्योंकि गायब होने के लिए कोई एकल प्रकाशक नहीं है), इसलिए यह निश्चित रूप से वर्तमान प्रश्न के मामले में आवश्यक नहीं है।
मार्नेन लाईबो-कोसर

13

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


7

स्रोत नियंत्रण के लिए उपयोग मामला यह है: क्या होगा यदि हमारे सभी डेवलपर्स मशीनों और हमारे सभी तैनाती मशीनों को एक उल्का द्वारा मारा गया था? आप चाहते हैं कि रिकवरी चेकआउट के करीब हो और यथासंभव निर्माण हो। (यदि वह बहुत मूर्खतापूर्ण है, तो आप "एक नए डेवलपर को किराए पर ले सकते हैं।")

दूसरे शब्दों में, ओएस, ऐप्स और टूल के अलावा सब कुछ वीसीएस में होना चाहिए, और एम्बेडेड सिस्टम में, जहां एक विशिष्ट टूल बाइनरी संस्करण पर निर्भरता हो सकती है, मैंने वीसीएस में रखे गए टूल भी देखे हैं!

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


1
इसका मतलब यह भी है कि कई मशीनों से काम करना दर्द रहित होता है। बस रेपो खींचो, और तुम जाने के लिए तैयार हो।
स्पेंसर रथबुन

उल्का संदर्भ के लिए +1, यह अच्छी तरह से बातें करता है।
मफिनिस्ता

क्या कोई व्यक्ति (जैसे) एक जावा प्रोजेक्ट को पूर्ण टूलचैन के साथ रेव कंट्रोल के तहत इंगित कर सकता है, जैसे कि इसे चेक किया जा सकता है और इसका सीधा उपयोग किया जा सकता है?
andersoj


6

कुछ भी जो परियोजना में योगदान देता है और जिसके लिए आप परिवर्तनों को ट्रैक करना चाहते हैं।

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


2

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


1

सब कुछ स्रोत नियंत्रण में होना चाहिए, सिवाय:

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

इसे इस तरह समझें: टीम के प्रत्येक नए सदस्य को परियोजना की एक कार्यशील प्रतिलिपि (कॉन्फ़िगरेशन आइटम को घटाकर) चेकआउट करने में सक्षम होना चाहिए।

और डेटाबेस स्कीमा परिवर्तन (हर स्कीमा परिवर्तन के सरल sql डंप) को भी संस्करण नियंत्रण में रखना न भूलें। आप उपयोगकर्ता और एपीआई प्रलेखन को शामिल कर सकते हैं, अगर यह परियोजना के लिए समझ में आता है।


@maple_shaft टिप्पणियों में पर्यावरण कॉन्फ़िगरेशन फ़ाइलों के बारे में मेरे पहले बयान के साथ एक महत्वपूर्ण मुद्दा उठाता है। मैं स्पष्ट करना चाहूंगा कि मेरा उत्तर प्रश्न की बारीकियों के लिए है, जो कि ड्रुपल या जेनेरिक सीएमएस परियोजनाओं के बारे में है। ऐसे परिदृश्यों में आपके पास आमतौर पर एक स्थानीय और एक उत्पादन डेटाबेस होता है, और एक पर्यावरण कॉन्फ़िगरेशन विकल्प इन डेटाबेस (और समान क्रेडेंशियल) के लिए क्रेडेंशियल्स होता है। यह उचित है कि ये स्रोत नियंत्रण में नहीं हैं, क्योंकि यह कई सुरक्षा चिंताओं को पैदा करेगा।

हालाँकि, एक अधिक विशिष्ट विकास वर्कफ़्लो में, मैं मेपल_शफ़्ट से सहमत हूँ कि पर्यावरण कॉन्फ़िगरेशन विकल्प एक-चरण के निर्माण और किसी भी वातावरण की तैनाती के लिए सक्षम करने के लिए स्रोत नियंत्रण में होना चाहिए।


3
स्रोत नियंत्रण से संबंधित कॉन्फ़िगरेशन फ़ाइलों के बारे में आपके कथन के साथ -1 अत्यधिक छूट। शायद डेवलपर विशिष्ट कॉन्फ़िगरेशन फ़ाइलें हाँ, हालांकि पर्यावरण विशिष्ट कॉन्फ़िगरेशन फ़ाइलें आवश्यक हैं यदि आप किसी भी वातावरण के एक-चरण के निर्माण और परिनियोजन की क्षमता चाहते हैं।
मेपल_शफ्ट

2
@maple_shaft प्रश्न के संदर्भ में (ड्रुपल प्रोजेक्ट या जेरिक सीएमएस वेब प्रोजेक्ट) "किसी भी वातावरण का एक-चरण का निर्माण और तैनाती" एक अत्यधिक संभावना वाला परिदृश्य है (क्या आप उत्पादन डेटाबेस क्रेडेंशियल को सब कुछ के साथ डालेंगे?)। मैं इस सवाल का जवाब दे रहा हूं कि सामान्य नियंत्रणों को संस्करण नियंत्रण में नहीं रखा जाना चाहिए। - लेकिन आपका डाउनवोट स्वागत योग्य है :)
yannis

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

@maple_shaft डाउनवोट के बारे में चिंता न करें (मैंने प्रश्न संपादित किया है, लेकिन यदि आप चाहें तो इसे छोड़ने के लिए स्वतंत्र महसूस करें)। पासवर्ड प्रोटेक्टेड वर्जन कंट्रोल के लिए: हमें हाल ही में एक ऐसी स्थिति से जूझना पड़ा था, जहां एक लैपटॉप हमारी प्रबंधन टीम के एक सदस्य से चुराया गया था, जिसमें पासवर्ड हमारे वर्जन कंट्रोल सिस्टम (जो उस समय हमारे S3 क्रेडेंशियल्स में था) को समाहित किया था। यह उसके हिस्से का एक बड़ा स्नैफू था (लैपटॉप पासवर्ड संरक्षित नहीं था, और कुछ अन्य विवरण जो मैं वास्तव में नहीं बता सकता) लेकिन फिर भी यह कुछ ऐसा है जो हर किसी के लिए हो सकता है। उस अनुभव से बिल्डिंग हमने सब कुछ vcs से बाहर स्थानांतरित कर दिया।
यनीस १11

@maple_shaft और हालांकि ऐसा लग सकता है कि मैं व्यामोह की वकालत कर रहा हूं, हम अब समान स्नैफस से क्रेडेंशियल्स से संबंधित किसी भी चीज़ की रक्षा करने के लिए चरम पर जाते हैं।
यनीस

1

आपके स्वचालित निर्माण में जो कुछ भी उत्पन्न होता है वह स्रोत नियंत्रण में नहीं जाता है। कुछ भी है कि आवश्यकता नहीं निर्माण के दौरान संशोधन करता है स्रोत नियंत्रण में चले जाते हैं। यह इत्ना आसान है।

उदाहरण के लिए, निम्नलिखित स्रोत नियंत्रण में नहीं जाते हैं:

  • उत्पन्न कोड
  • उत्पन्न बायनेरिज़
  • आपके द्वारा निर्मित कुछ भी
  • आपकी सेवा, प्रक्रिया, वेब एप्लिकेशन द्वारा रनटाइम पर निर्मित कुछ भी

स्रोत नियंत्रण में क्या जाता है:

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

इन नियमों के बारे में यह धारणा है कि जो कुछ भी स्रोत नियंत्रण में है उसे एक मानव द्वारा संशोधित किया जा सकता है और किसी के मूल्यवान समय को समझने में ले सकता है कि यह क्यों है।


1

कुछ भी है कि आप काम करने की जरूरत है और बदल सकते हैं किसी तरह या किसी अन्य संस्करण की जरूरत है। लेकिन दो स्वतंत्र प्रणालियों का ध्यान रखने की आवश्यकता शायद ही कभी होती है।

एक विश्वसनीय तरीके से उत्पन्न कुछ भी आमतौर पर एक स्रोत संस्करण से जुड़ा हो सकता है - इसलिए इसे स्वतंत्र रूप से ट्रैक करने की आवश्यकता नहीं है: उत्पन्न स्रोत, बायनेरिज़ जो एक सिस्टम से दूसरे में पारित नहीं होते हैं, आदि।

लॉग और अन्य सामान का निर्माण करें, जिनके बारे में कोई भी परवाह नहीं करता है (लेकिन आप निश्चित रूप से कभी नहीं जानते हैं) आमतौर पर सबसे अच्छा ट्रैक किया जाता है जो कोई भी इसे उत्पन्न कर रहा है: जेनकिंस, आदि।

ऐसे उत्पादों का निर्माण करें जो एक प्रणाली से दूसरी प्रणाली को ट्रैक किए जाने की आवश्यकता होती है, लेकिन एक मावेन रेपो इसे करने का एक अच्छा तरीका है - आपको एक स्रोत नियंत्रण प्रदान करने वाले नियंत्रण के स्तर की आवश्यकता नहीं है। उद्धार अक्सर एक ही श्रेणी में होता है।

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


0

मेरा जवाब बहुत आसान है: बायनेरिज़ नहीं। निहितार्थ से, लगभग सब कुछ।

(निश्चित रूप से डेटाबेस बैकअप या स्कीमा माइग्रेशन या उपयोगकर्ता-डेटा नहीं, हालांकि।)


स्कीमा माइग्रेशन बिल्कुल स्रोत नियंत्रण में जाते हैं। इस तरह से आपको पता है कि DB स्कीमा क्या कोड की अपेक्षा करता है।
मर्नेन लाईबो-कोसर

0

स्रोत नियंत्रण एक परिवर्तन ट्रैकिंग तंत्र है। इसका उपयोग तब करें जब आप जानना चाहते हैं कि किसने और कब बदला।

स्रोत नियंत्रण मुक्त नहीं है। यह आपके वर्कफ़्लो में जटिलता जोड़ता है, और नए कॉलेजिएट के लिए प्रशिक्षण की आवश्यकता होती है। लागत के खिलाफ लाभ तौलना।

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

स्रोत नियंत्रण जादू नहीं है। इसे आज़माएं, लेकिन अगर यह लागत को ऑफसेट करने के लिए पर्याप्त मूल्य नहीं जोड़ता है, तो इसे छोड़ दें।


2
क्या आप गंभीर हैं? स्रोत नियंत्रण खराब है क्योंकि इसे नए सहयोगियों के लिए प्रशिक्षण की आवश्यकता है? क्या आप वास्तव में कह रहे हैं कि आप ऐसे लोगों के साथ लंबे समय तक काम करना पसंद करेंगे जो स्रोत नियंत्रण का उपयोग करना नहीं जानते हैं और सीखने के लिए तैयार नहीं हैं? व्यक्तिगत रूप से मैं बल्कि बर्गर फ्लिप करूँगा।
Zach

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

2
मेरा कहना है, भले ही आप इसे केवल कुछ चीजों ( खांसी स्रोत कोड खांसी ) के लिए उपयोग कर रहे हों , आपके सहयोगियों को पहले से ही यह पता होना चाहिए कि इसका उपयोग कैसे करना है, इसलिए उन्हें किसी और चीज के लिए उपयोग करने के लिए प्रशिक्षण को ओवरहेड नहीं बढ़ाया जाना चाहिए।
Zach

0

सामग्री मैं स्रोत नियंत्रण में नहीं डालूंगा:

  • गुप्त कुंजी और पासवर्ड
  • एसडीके भले ही यह एक ही निर्देशिका है और अगर मैं एसडीके को एक पैच बनाता हूं, तो इसे एक और प्रोजेक्ट बनाना चाहिए क्योंकि यह ऐप के बजाय प्रति फ्रेमवर्क होगा।
  • 3-पार्टी पुस्तकालय जैसे कि। माइग्रेशन, बैकअप, संकलित कोड, अन्य लाइसेंस के तहत कोड से छूट (शायद)

इसलिए मैं एक hg addremoveउदाहरण के लिए नहीं करता हूं क्योंकि एसडीके अपडेट होने के बाद हर एक बार एक नया क्लोन बनाता है। यह भी मुझे हर बार एसडीके अपडेट करने के लिए एक पूर्ण बैकअप बनाता है और जाँचता है कि रिपॉजिटरी से क्लोन किया गया एक नया संस्करण अच्छी तरह से है।


0

मैं आपको निम्नलिखित पुस्तक की अत्यधिक अनुशंसा करता हूं जो आपकी चिंताओं को संबोधित करती है:

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

मैं @FrustratedWithFormsDesigner द्वारा प्रदान किए गए स्वीकार किए गए उत्तर के एक टुकड़े से सहमत नहीं हूं क्योंकि वह प्रोजेक्ट बनाने के लिए आवश्यक टूल को संस्करण नियंत्रण में नहीं रखने की वकालत करता है। कहीं न कहीं सोर्स कंट्रोल (कोड बनाया जा रहा है) के पास प्रोजेक्ट बनाने और स्क्रिप्ट बनाने के लिए स्क्रिप्ट होनी चाहिए जो केवल कमांड लाइन से चलती हैं। अगर उपकरण के माध्यम से उनका मतलब है, आईडीई और संपादक, तो उन्हें परियोजना का निर्माण करने की आवश्यकता नहीं होनी चाहिए। ये डेवलपर्स के लिए सक्रिय / तेजी से विकास के लिए अच्छे हैं और इस प्रकार के वातावरण के सेटअप को स्क्रिप्टिंग के रूप में अच्छी तरह से या SCM के किसी अन्य खंड से डाउनलोड किया जा सकता है या कुछ प्रकार के बाइनरी मैनेजमेंट सर्वर से सेट किया जा सकता है और ऐसे IDE को सेटअप करना जितना संभव हो उतना स्वचालित होना चाहिए।

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


-1

संस्करण नियंत्रण में सभी कोड रखें और सभी कॉन्फ़िगरेशन और उपयोगकर्ता डेटा बाहर। ड्रुपल के लिए विशिष्ट होने के लिए, आपको फ़ाइलों और सेटिंग्स को छोड़कर संस्करण नियंत्रण में सब कुछ डालना होगा। एफपी

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