svn रमण सबवर्सन-ट्रंक वास्तव में मुख्य विकास के लिए सबसे अच्छी जगह है?




मुंबई में घूमने वाली जगह (8)

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

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

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

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

मैं कल्पना कर सकता हूं कि गलती से कुछ टीम को कम करने के लिए उपकरण (उदाहरण के लिए टीमसिटी और देरी से चूक) हो सकता है, लेकिन क्या आप वास्तव में दूसरी समस्या को दूर कर सकते हैं? यदि नहीं, तो क्या कुछ शाखाओं जैसे " /branch/dev " पर "जंगली विकास" करना बेहतर नहीं होगा और केवल तंग में विलय हो सकता है जब निर्माण काफी ठोस होता है?


यह वास्तव में आपके पर्यावरण पर निर्भर करता है कुछ मामलों में, अस्थायी रूप से टूटा ट्रंक होने पर कोई बड़ा सौदा नहीं है। लेकिन अगर आप 2-3 से ज्यादा लोगों के साथ काम कर रहे हैं, तो शायद यह एक अच्छा विचार नहीं होगा।

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

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


आपका ट्रंक हमेशा संकलन करना चाहिए, यदि आपको परिवर्तन तोड़ने की ज़रूरत हो तो आपको किसी शाखा का उपयोग करना चाहिए और बाद में परिवर्तनों को मर्ज करना चाहिए।

एसवीएन बुक के इस अध्याय को पढ़ें: http://svnbook.red-bean.com/nightly/en/svn.branchmerge.html


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

हम शाखाओं / फीचर 1 की विकास शाखाओं पर काम करते हैं और ब्रांड्स / फीचर 1 -> टैग / फीचर 1-क्यूए 1 की प्रतिलिपि बनाकर एक क्यूए टैग बनाते हैं और टैग / फीचर 1-क्यूए 1 बनाने के लिए शाखाओं / फीचर 1 में कोई भी बग तय करते हैं। जब तैनात करने के लिए तैयार थे, तो सभी परिवर्तन जो शाखाओं / फीचर 1 में हुए थे, ट्रंक को अंतिम विलय के बाद से अंतिम रिलीज टैग यानी 5.1.0 बनाने से पहले ट्रंक को विलय कर दिया गया है।

कार्य प्रवाह आपकी टीम की स्थापना के आधार पर या किस तरह के प्रोजेक्ट / वातावरण में हैं, इसके आधार पर भिन्न हो सकते हैं।


मैंने अल्पकालिक विकास शाखाओं को बनाने में आसान बनाने के लिए कुछ शैल-स्क्रिप्ट बनाए हैं:

# Create new branch and switch to it
function svn_bswitch()
{
   branch=$1; shift
   msg="$1"; shift

   URL=$(svn info . | sed -ne '[email protected]: \(.*\)@\[email protected]')
   REPO=$(svn info . | sed -ne '[email protected] Root: \(.*\)@\[email protected]')
   BRANCH_URL=$REPO/branch/$branch

   svn copy $URL $BRANCH_URL -m "$msg"
}


# Switch to a branch or tag
function svn_switch()
{
  d=$1; shift
  REPO=$(svn info . | sed -ne '[email protected] Root: \(.*\)@\[email protected]')
  URL=$REPO/$d
  svn switch $URL
}

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

संलग्न छवि एक कच्चा प्रतिनिधित्व है वैकल्पिक पाठ http://i36.tinypic.com/2jvbs8.jpg


हमारी कंपनी में, हमारे पास ट्रंक का रात का निर्माण होता है उम्मीद की जाती है कि हर कोई अपने कोड का परीक्षण करता है ताकि इससे पहले इसे कम से कम संकलित किया जा सके। अगर रात का निर्माण विफल हो जाता है, तो आपत्तिजनक कोड को तब तक निकाल दिया जाता है जब तक कि तय नहीं हो।

मुझे लगता है कि सबसे महत्वपूर्ण हिस्सा हर किसी के लिए तोड़फोड़ की भूमिका को समझने के लिए है और यह महत्वपूर्ण क्यों है कि वे केवल कोड में जांचते हैं जो संकलित होते हैं।


जब एक अच्छा पुराने "स्थिर ट्रंक, शाखा में देव" प्रक्रिया एक मुद्दा बन जाता है:

आप एक वेब एप्लिकेशन विकसित कर रहे हैं जो बहुत सारे लाइव, संभवतः उपयोगकर्ता-योगदान, डेटा पर निर्भर करता है। आप किसी कारण से डेटाबेस बैकेंड (-एस) या बाहरी फाइल सिस्टम का एक और उदाहरण नहीं बना सकते हैं जिस पर आप निर्भर हैं। (उदाहरण के लिए, आपके वातावरण में डेटा मॉडल माइग्रेशन की कमी हो सकती है)

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

फिर मर्ज चरण आता है - और उसके बाद कोई भी अब कछुओं एसएसवीएन का इस्तेमाल नहीं करना चाहता है





branching-and-merging