एसवीएन के लिए एक संस्करण नियंत्रण रणनीति के साथ आ रहा है


9

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

पहले, क्या हमें इसे परियोजना द्वारा अलग करना चाहिए था? उदाहरण के लिए, हमारे पास: दो ASP.NET वेब साइटें (वेब ​​अनुप्रयोग नहीं, वेब साइटें), एक वेब सेवा, सभी तालिका स्क्रिप्ट और संग्रहीत कार्यविधियों के लिए परिनियोजन फ़ोल्डर, बाहरी प्रोजेक्ट्स के लिए दो कमांड-लाइन क्लाइंट जिन्हें कॉल किया जाता है। वैबसाइट और एक साझा फ़ोल्डर जिसमें सामान्य व्यावसायिक वस्तुएँ और पसंद हैं। क्या इनमें से प्रत्येक की अपनी शाखाएं / टैग / ट्रंक सेटअप वाली अपनी परियोजना होनी चाहिए, या यह इस तरह होनी चाहिए:

dev/
  branches/
  tags/
  trunk/
      Site1/
      Site2/
      WebService/
      SharedCode/

और सभी शाखाओं और सब कुछ पूरे देव फ़ोल्डर की एक प्रति है? यह दृष्टिकोण निगलने में आसान हो सकता है क्योंकि हमारे पास अक्सर ऐसी परिस्थितियां होती हैं जहां हमें साझा कोड लाइब्रेरी में बदलाव करने की आवश्यकता होती है और साथ ही साथ वेब साइटों के कम से कम एक (आमतौर पर दोनों)।

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


5
बॉक्स रणनीति के बाहर: स्विच पर जाएं।
रीन हेनरिक

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

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

2
@Wayne M - आप पा सकते हैं कि यह वास्तव में दूसरा तरीका है। ऐसा करने के लिए लोगों को एक अधिक समझदार वातावरण संरचना में साइन अप करना आसान हो सकता है अगर ऐसा करने से उन्हें डीवीसीएस का उपयोग करने के सभी फायदे मिलते हैं। एक संक्रमण के रूप में, आप सस्ते लोकल ब्रांचिंग / रेपो एक्सेस का उपयोग करने के लिए पिट्सन पर विचार करना चाह सकते हैं। एक बार जब वे आदी हो जाते हैं और उपकरणों के लिए उपयोग किया जाता है, तो प्राथमिक रेपो (एस) के लिए डीवीसीएस में जाने के लिए एक समूह व्यापक इच्छा हो सकती है।
मार्क बूथ

जवाबों:


5

यदि आप एक एकीकृत निर्माण प्रक्रिया चाहते हैं, तो इस तरह से शाखाओं / टैग्स / ट्रंक को रूट पर रखना सुनिश्चित करें:

branches/
tags/
trunk/
  dev/
    ...

यदि आपको एक एकीकृत निर्माण प्रक्रिया की आवश्यकता नहीं है, तो आप प्रत्येक प्रोजेक्ट के भीतर शाखाएं / टैग / चड्डी डाल सकते हैं यदि आप चाहें। हालांकि, प्रत्येक परियोजना के भीतर रखने के बाद एकीकृत निर्माण में पलायन करना मुश्किल हो सकता है। एक एकीकृत बिल्ड के फायदे हैं, जैसे कि परियोजनाओं के बीच साझा घटकों को प्रकाशित करने की आवश्यकता को समाप्त करना - वे बिल्ड के सभी भाग हैं।

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

branches/
  dev/
    Site1/
    Site2/
    WebService/
    SharedCode/
tags/
  release1/
    Site1/
    Site2/
    WebService/
    SharedCode/
trunk/
  Site1/
  Site2/
  WebService/
  SharedCode/

1
एक एकीकृत बिल्ड के फायदे हैं, जैसे कि परियोजनाओं के बीच साझा घटकों को प्रकाशित करने की आवश्यकता को समाप्त करना - वे बिल्ड के सभी भाग हैं।
मैथ्यू रोडेटस

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

1
  1. जहां तक ​​svn के भीतर कोड संरचना है, यह वास्तव में व्यक्तिगत पसंद है।

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

तो आपके मामले में ऐसा लगता है कि आपके द्वारा ऊपर स्केच किया गया लेआउट उचित होगा, जैसा कि आपने कोड साझा किया है और आप चाहते हैं कि शाखाएँ / टैग उस साझा कोड को शामिल करें।

  1. टैग और शाखा उपयोग का आपका वर्णन उल्लेखनीय रूप से समझदार है और मुझे लगता है कि मैं svn का उपयोग करने की उम्मीद करूंगा। यह वास्तव में टैगिंग का इरादा है क्योंकि मैं इसे समझता हूं। Svn टैग और शाखाओं में BTW वास्तव में एक ही बात है, लेकिन शब्दावली लागू होती है जैसा आपने इसे लागू किया है।

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


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

0

निम्नलिखित एक तोड़फोड़ भंडार बिछाने का सबसे अच्छा तरीका है

project_a
     - branches
     - tags
     - trunk
project_b
     - branches
     - tags
     - trunk
project_c
     - branches
     - tags
     - trunk
master
     - branches
     - tags
     - trunk       
         - svn:external project_a
         - svn:external project_b
         - svn:external project_c

इस तरह से आप व्यक्तिगत परियोजनाओं को स्वयं देख सकते हैं।

यदि आप सभी 3 परियोजनाओं की जाँच करना चाहते हैं और एक एकीकृत निर्माण करना चाहते हैं, तो कुछ अखंड स्क्रिप्ट / प्रणाली के साथ निर्माण करें, फिर svn के साथ एक मास्टर मॉड्यूल का उपयोग करके जांच करें : बाहरी सभी मास्टर में अन्य परियोजनाओं की मैपिंग करें trunk

यह पहली नज़र में अधिक जटिल है लेकिन यह इस समस्या को हल करने के लिए सबसे अधिक अनुरक्षणीय और मुहावरेदार तरीका है।


2
मैं दृढ़ता से असहमत हूँ। भंडार केवल स्टोर कोड से अधिक करता है; यह संगठनात्मक संरचना और घटकों के बीच संबंध को बताता है; यह एक महत्वपूर्ण, यद्यपि निहित, संचार चैनल है। यदि आप प्रत्येक प्रोजेक्ट को अलग से तोड़ते हैं तो आप संचार के लिए कृत्रिम और अनावश्यक बाधाओं का परिचय दे रहे हैं।
विलियम पायने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.