2010-09-07 13 views
5

मैं वर्तमान में .NET में एक प्रोजेक्ट पर काम कर रहा हूं जिसमें कई लॉजिकल परतें और कई फ्रंट-एंड शामिल हैं। यहाँ हमारे SVN संरचना का एक मोटा प्रतिनिधित्व है:सबवर्जन: पर्यावरण प्रति शाखा?

trunk 
---doc 
---lib 
---src 
------console 
---------console.vbproj 
------domain 
---------domain.vbproj 
------... 
------web 
---------web.vbproj 
---.sln 

हमारे दिन-प्रतिदिन के विकास के सभी ट्रंक में होता है - इस जहां सभी डेवलपर्स से चेकआउट/करने के लिए प्रतिबद्ध है।

मैं पर्यावरण (परीक्षण और उत्पादन) के बीच साफ-सफाई और आसानी से तैनात करने का एक तरीका ढूंढ रहा हूं।

मेरा विचार ट्रंक-समाधान और सभी से दो शाखाएं, परीक्षण और उत्पादन बनाना है। मैं निम्नलिखित कारणों के लिए अपने आप को यह न्यायोचित ठहरा रहा हूँ:

  1. मैं जिस पर संशोधनों प्रवाह पूरा नियंत्रण है जो केवल परीक्षण शाखा को और परीक्षण शाखा से उत्पादन शाखा में ट्रंक से मर्ज करके वातावरण को
  2. मैं कर सकते हैं आसानी से देखें कि सबवर्सन

में संबंधित शाखा के लॉग को देखकर प्रत्येक वातावरण में कौन सा कोड निष्पादित हो रहा है, क्या किसी के पास इस तरह के समाधान के साथ कोई अनुभव है? क्या कोई संभावित नुकसान या oversights हैं जो मुझे याद आ रही है?

+0

बस अगर कोई भी उत्सुक है, तो इस दृष्टिकोण से संबंधित कई ब्लॉग पोस्ट हैं; सिर्फ Google "प्रति पद शाखा"।मेरा मानना ​​है कि अधिकांश सामग्री में जेफ एटवुड मूल रूप से अक्टूबर 2007 में ब्लॉग किए जाने का एक पुनर्जन्म है: [यहां देखें] (http://www.codinghorror.com/blog/2007/10/software-branching-and -parallel-universes.html) – TMcManemy

उत्तर

7

क्या किसी के पास इस तरह के समाधान के साथ कोई अनुभव है?

हाँ :-)

वहाँ किसी भी संभावित नुकसान या चूक कि मुझे याद आ रही हैं?

आप समस्या यह है कि समय के साथ परीक्षण का सामना करने और शाखाओं जारी विकास के वातावरण से दूर बहाव आप बहुत संभावना ट्रंक से हर बदलाव मर्ज नहीं होगा के रूप में होगा। डेवलपर्स फिर थोड़ा अलग वातावरण में काम करेंगे और आप शाखाओं को सिंक में रखकर ज्यादा समय बर्बाद कर देंगे। इसे merge-mania anti-pattern के रूप में जाना जाता है।

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

प्रत्येक रिलीज के लिए प्रक्रिया दोहराएं। इस तरह आप विलय की संख्या को सीमित कर देंगे और उन लोगों पर काम कर रहे लोगों को हमेशा काटते हैं।

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

+0

"प्रति रिलीज शाखा" पद्धति के साथ, आप तैनाती स्वचालित करने के बारे में कैसे जाएंगे? उदाहरण के लिए, "प्रति पर्यावरण शाखा" का उपयोग करके मैं स्क्रिप्ट बना सकता हूं जैसे कि प्रत्येक शाखा संकलित और इसके संबंधित वातावरण में तैनात की जाती है। फिर, मेरी वांछित शाखा में विलय और इसी स्क्रिप्ट को चलाने के रूप में तैनाती आसान हो जाती है। – TMcManemy

+0

शायद मैं समझ नहीं पा रहा हूं कि पर्यावरण के साथ आपका क्या मतलब है। आम तौर पर यदि कोई सामान्य कोर है तो आप पर्यावरण विशिष्ट कोड स्विच (या svn: externals के साथ बाहरी) स्विच करेंगे। तो विलय के लिए कोई ज़रूरत नहीं है। यदि आप विलय करने के लिए स्क्रिप्ट चला सकते हैं तो आपके सेटअप में कुछ अवधारणात्मक रूप से गलत होना चाहिए। विलय एक मूल्य जोड़ने वाला काम है जिसे सामान्य रूप से स्वचालित नहीं किया जा सकता है। यदि इसे स्वचालित किया जा सकता है, तो कोई मूल्य जोड़ने नहीं है, इसलिए यह संभवतः आपके मामले में केवल अनावश्यक ओवरहेड है। – jdehaan

+0

मुझे "मर्ज उन्माद" वाक्यांश पेश करने के लिए उपरोक्त। इससे ब्रांचिंग के लिए विरोधी पैटर्न बहुत अधिक हो गए। धन्यवाद jdehaan। – granadaCoder

2

हम किसी भी मुद्दे के बिना एक ही लेआउट का उपयोग कर रहे हैं। नवीनतम svn संस्करण का उपयोग करना सुनिश्चित करें। लापता विलय ट्रैकिंग के कारण 1.5 से पहले संस्करण का उपयोग नहीं किया जाना चाहिए।

एलास्सियन (मैं प्रायोजित नहीं हूं) से जिरा जैसे बग ट्रैकिंग टूल के संयोजन के साथ आपका सेटअप और भी पारदर्शी हो जाता है।

संबंधित मुद्दे