सबवर्सन रिपॉजिटरी में "शाखा", "टैग" और "ट्रंक" का क्या मतलब है?


1193

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

उनका क्या मतलब है?


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

जवाबों:


910

हम्म, यकीन नहीं है कि मैं निक री टैग से एक शाखा के समान सहमत हूं। एक टैग सिर्फ एक मार्कर है

  • ट्रंक विकास का मुख्य निकाय होगा, जो परियोजना की शुरुआत से लेकर वर्तमान तक उत्पन्न होता है।

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

  • टैग ट्रंक या एक शाखा पर समय का एक बिंदु होगा जिसे आप संरक्षित करना चाहते हैं। संरक्षण के दो मुख्य कारण यह होंगे कि या तो यह सॉफ्टवेयर की एक प्रमुख रिलीज है, चाहे अल्फा, बीटा, आरसी या आरटीएम, या यह ट्रंक पर प्रमुख संशोधनों से पहले सॉफ़्टवेयर का सबसे स्थिर बिंदु था।

ओपन सोर्स प्रोजेक्ट्स में, परियोजना हितधारकों द्वारा ट्रंक में स्वीकार नहीं की जाने वाली प्रमुख शाखाएं कांटे के लिए आधार बन सकती हैं - जैसे, पूरी तरह से अलग परियोजनाएं जो अन्य स्रोत कोड के साथ एक सामान्य मूल साझा करती हैं।

शाखा और टैग उपप्रकारों को निम्नलिखित तरीकों से ट्रंक से अलग किया जाता है:

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

"शाखा मर्ज ट्रैकिंग" से संबंधित संस्करण 1.5 के बाद से तोड़फोड़ की भी विशेषताएं हैं, ताकि एक शाखा के लिए प्रतिबद्ध परिवर्तनों को वृद्धिशील, "स्मार्ट" विलय के समर्थन में वापस ट्रंक में मिला दिया जा सके।


284
टैग और शाखाओं के साथ भ्रम यह है कि svn में वास्तव में उनके बीच कोई अंतर नहीं है, निर्देशिका के नाम के अलावा। Svn में आप एक टैग में परिवर्तन करने में सक्षम हैं, और वास्तव में इसे रोकना मुश्किल है। अधिकांश अन्य VCS टैग को अपरिवर्तनीय स्नैपशॉट (समय में बिंदु) के रूप में मानते हैं।
केन लियू

4
Tagsनिर्देशिका का उपयोग अक्सर मील के पत्थर के नियमित उपयोगकर्ता द्वारा परीक्षण और सत्यापन के लिए भी किया जाता है। यह एक प्रोटोटाइप बनाने के लिए एक अच्छी जगह होगी (मेरे सिर के शीर्ष पर सिर्फ कुछ विचार)।
जेफ नोएल

6
@KenLiu ऐसे हुक हैं जो टैग को अपरिवर्तनीय बना सकते हैं। यही है, आप एक टैग बना सकते हैं, और चेकआउट कर सकते हैं, लेकिन कोई बदलाव नहीं कर सकते। बेशक, एक टैग रिपॉजिटरी का सिर्फ एक हिस्सा होने का मतलब है कि पूरा इतिहास उपलब्ध है। यदि कोई टैग बदलता है, तो आप उसे ट्रैक कर सकते हैं और क्यों। कई VCS में, यदि आप एक टैग को संशोधित करते हैं, तो पता करने का कोई तरीका नहीं हो सकता है।
डेविड डब्ल्यू।

3
शायद स्थिर शाखाओं का उल्लेख किया जाना चाहिए: वहाँ किए गए परिवर्तन आम तौर पर ट्रंक में वापस विलय नहीं किए जाते हैं ।
वुल्फ

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

556

सबसे पहले, जैसा कि @AndrewFinnell और @KenLiu बताते हैं, SVN में डायरेक्टरी नाम का मतलब कुछ भी नहीं है - "ट्रंक, ब्रांच और टैग" बस एक सामान्य सम्मेलन है जो अधिकांश रिपॉजिटरी द्वारा उपयोग किया जाता है। सभी परियोजनाएं सभी निर्देशिकाओं का उपयोग नहीं करती हैं (यह यथोचित रूप से "टैग" का उपयोग नहीं करने के लिए सामान्य है), और वास्तव में, कुछ भी आपको उन्हें कुछ भी कहने से रोक नहीं रहा है जो आप चाहते हैं, हालांकि सम्मेलन को तोड़ना अक्सर भ्रमित होता है।

मैं शायद शाखाओं और टैग्स के सबसे आम उपयोग परिदृश्य का वर्णन करूँगा, और उनका उपयोग कैसे किया जाता है इसका एक उदाहरण परिदृश्य दें।

  • ट्रंक : मुख्य विकास क्षेत्र। यह वह जगह है जहाँ कोड की आपकी अगली प्रमुख रिलीज़ रहती है, और आम तौर पर सभी नवीनतम सुविधाएँ होती हैं।

  • शाखाएँ : हर बार जब आप एक प्रमुख संस्करण जारी करते हैं, तो यह एक शाखा बनाई जाती है। यह आपको बग फिक्स करने की अनुमति देता है और नवीनतम - संभवतः अधूरा या अप्रतिष्ठित - सुविधाओं को जारी किए बिना एक नई रिलीज़ करता है।

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


उदाहरण के लिए, मान लें कि आप एक नई परियोजना शुरू करते हैं। आप "ट्रंक" में काम करना शुरू करते हैं, आखिरकार संस्करण 1.0 के रूप में क्या जारी किया जाएगा।

  • ट्रंक / - विकास संस्करण, जल्द ही 1.0 हो जाएगा
  • शाखाएँ / - खाली

एक बार जब 1.0.0 समाप्त हो जाता है, तो आप एक नई "1.0" शाखा में ट्रंक कर देते हैं, और एक "1.0.0" टैग बनाते हैं। अब ट्रंक में 1.1 क्या जारी रहेगा पर काम करते हैं।

  • ट्रंक / - विकास संस्करण, जल्द ही 1.1 हो जाएगा
  • शाखाएँ / 1.0 - 1.0.0 रिलीज़ संस्करण
  • टैग / 1.0.0 - 1.0.0 रिलीज़ संस्करण

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

  • ट्रंक / - विकास संस्करण, जल्द ही 1.1 होगा
  • शाखाओं / 1.0 - आगामी 1.0.1 रिलीज
  • टैग / 1.0.0 - 1.0.0 रिलीज़ संस्करण

एक बार जब आप पर्याप्त बग (या शायद एक महत्वपूर्ण बग) पाते हैं, तो आप एक 1.0.1 रिलीज करने का निर्णय लेते हैं। तो आप 1.0 शाखा से "1.0.1" एक टैग बनाते हैं, और कोड जारी करते हैं। इस बिंदु पर, ट्रंक में 1.1 होगा, और "1.0" शाखा में 1.0.1 कोड होगा। अगली बार जब आप 1.0 को अपडेट जारी करते हैं, तो यह 1.0.2 होगा।

  • ट्रंक / - विकास संस्करण, जल्द ही 1.1 होगा
  • शाखाएँ / 1.0 - आगामी 1.0.2 रिलीज़
  • टैग / 1.0.0 - 1.0.0 रिलीज़ संस्करण
  • टैग / 1.0.1 - 1.0.1 रिलीज़ संस्करण

आखिरकार आप 1.1 रिलीज करने के लिए लगभग तैयार हैं, लेकिन आप पहले एक बीटा करना चाहते हैं। इस स्थिति में, आप संभवतः "1.1" शाखा और "1.1beta1" टैग करते हैं। अब, क्या 1.2 (या 2.0 हो सकता है) पर काम ट्रंक में जारी है, लेकिन 1.1 पर काम "1.1" शाखा में जारी है।

  • ट्रंक / - विकास संस्करण, जल्द ही 1.2 होने वाला है
  • शाखाएँ / 1.0 - आगामी 1.0.2 रिलीज़
  • शाखाएँ / १.१ - आगामी १.१.० रिलीज़
  • टैग / 1.0.0 - 1.0.0 रिलीज़ संस्करण
  • टैग / 1.0.1 - 1.0.1 रिलीज़ संस्करण
  • टैग / 1.1beta1 - 1.1 बीटा 1 रिलीज़ संस्करण

एक बार जब आप 1.1 अंतिम रिलीज करते हैं, तो आप "1.1" शाखा से "1.1" टैग करते हैं।

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


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

  • ट्रंक / - विकास संस्करण, जल्द ही 1.2 होने वाला है
  • शाखाएँ / १.१ - आगामी १.१.० रिलीज़
  • शाखाओं / ui- फिर से लिखना - प्रयोगात्मक सुविधा शाखा

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


यह भी ध्यान दें, मैंने यहाँ जो संस्करण योजना का उपयोग किया है, वह कई में से एक है। कुछ टीमें 1.1, 1.2, आदि के रूप में बग फिक्स / रखरखाव रिलीज़ करती हैं, और 1.x, 2.x, आदि के रूप में बड़े बदलाव। यहाँ उपयोग समान है, लेकिन आप शाखा का नाम "1" या "1" रख सकते हैं। .x "के बजाय" 1.0 "या" 1.0.x "। (एक तरफ, अर्थ वर्जनिंग संस्करण संख्याओं को करने के लिए एक अच्छा मार्गदर्शक है)।


6
@बारुच - यह पूरी तरह से गलत है। टैग हल्के होते हैं और शाखाओं से मिलते-जुलते होते हैं।
जोश केली

7
उपयोग-केस विवरण से प्यार करें। धन्यवाद @ मंडलम्
जराओमी फ्रेंच डेके

2
क्या मुझे कोई उद्धरण मिल सकता है जहां यह कहा गया है कि टैग / शाखाएं हल्की हैं? यह ऐसा प्रतीत नहीं होता है ..
कार्डिन ली जेएच

3
यह स्वीकृत उत्तर होना चाहिए जो इतना बेहतर है ^ ^
नाम जी वीयू

4
@ कार्डिन में अभी मेरे पास संदर्भ नहीं है, लेकिन नोट टैग के लिए महत्वपूर्ण सर्वर पर हल्के हैं, लेकिन क्लाइंट नहीं। यदि आप सभी टैग चेकआउट करते हैं, तो आपको बहुत सारी पूर्ण प्रतियां मिलेंगी। हालाँकि, यदि आप सर्वर पर रिपॉजिटरी आकार देखते हैं, तो यह केवल प्रति टैग कुछ बाइट्स से बढ़ेगा। यही कारण है कि आपको रूट निर्देशिका की जांच नहीं करनी चाहिए, आम तौर पर बोलना।
gregmac

97

निक ने क्या कहा है इसके अलावा आप स्ट्रीम किए गए लाइन्स: ब्रानचिंग पैटर्न फॉर पैरेलल सॉफ्टवेयर डेवलपमेंट पर अधिक जानकारी प्राप्त कर सकते हैं

यहां छवि विवरण दर्ज करें

इस आंकड़े mainमें ट्रंक है, rel1-maintएक शाखा है और 1.0एक टैग है।


1
@Wolf वह हो सकता है - कि आरेख टूलींग की परवाह किए बिना बहुत सामान्य है। सभी SCM अलग-अलग शब्दों का उपयोग करते हैं लेकिन एक ही अवधारणा, ट्रंक और मेन के बीच कोई अंतर नहीं है; या ट्रंक और मास्टर। यह आरेख दिखाता है कि मेरी वर्तमान कंपनी एसवीएन का उपयोग कैसे करती है।
gbjbaanb

@gbjbaanb साझा करने के लिए धन्यवाद। ... और टैग प्रश्न द्वारा संबोधित नहीं किए गए लगते हैं। क्या यह शुद्ध संयोग है (आपकी वर्तमान कंपनी में भी) कि कोई मर्ज मेन्टेन से ब्रांच में नहीं जाता है?
वुल्फ

@ कुंडली संयोग - ट्रंक से केवल शाखा, काम करते हैं, ट्रंक पर वापस विलय। फिर एक टैग शाखा को ट्रंक ऑफ शाखा। हम एकीकरण नामक एक और 'ट्रंक' पर विचार कर रहे हैं, जिसने परीक्षण के लिए विलय की गई शाखाओं को समाप्त कर दिया है, जो एक रिलीज का गठन नहीं करता है, ट्रंक अभी भी उन शाखाओं के लिए उपयोग किया जाता है जिन्हें हम अगले रिलीज में डालने का निर्णय लेते हैं। ट्रंक से एक शाखा में विलय करने का एकमात्र समय एक लंबी चलने वाली शाखा को अपडेट करना है, लेकिन इसकी बेहतर (और आसान) बस ट्रंक से एक नई शाखा बनाना और अपनी पुरानी शाखा के परिवर्तनों को इसमें विलय करना है यदि आपको आवश्यकता है।
gbjbaanb

75

सामान्य तौर पर (उपकरण अज्ञेयवादी दृष्टिकोण), एक शाखा समानांतर विकास के लिए प्रयुक्त तंत्र है। एक SCM 0 से n शाखाओं तक हो सकता है। तोड़फोड़ में 0 है।

  • ट्रंक एक मुख्य शाखा है जिसे तोड़फोड़ द्वारा अनुशंसित किया जाता है , लेकिन आप इसे बनाने के लिए किसी भी तरह से मजबूर नहीं हैं। आप इसे 'मुख्य' या 'रिलीज़' कह सकते हैं, या इसमें एक भी नहीं!

  • शाखा एक विकास प्रयास का प्रतिनिधित्व करती है। इसे कभी भी संसाधन के नाम पर नहीं रखा जाना चाहिए (जैसे 'vonc_branch') लेकिन उसके बाद:

    • एक उद्देश्य 'myProject_dev' या 'myProject_Merge'
    • एक रिलीज़ परिधि 'myProjetc1.0_dev'or myProject2.3_Merge' या 'myProject6..2_Patch1' ...
  • टैग आसानी से उस स्थिति में वापस आने के लिए फ़ाइलों का एक स्नैपशॉट है। समस्या यह है कि तोड़फोड़ में टैग और शाखा एक ही है । और मैं निश्चित रूप से पागल दृष्टिकोण की सिफारिश करूंगा:

    आप किसी को भी कुछ भी करने से रोकने के लिए सबवर्सन के साथ दिए गए एक्सेस कंट्रोल स्क्रिप्ट में से एक का उपयोग कर सकते हैं, लेकिन टैग क्षेत्र में नई प्रतियां बना सकते हैं।

एक टैग अंतिम है। इसकी सामग्री कभी नहीं बदलनी चाहिए। कभी नहीँ। कभी। आप जारी नोट में एक लाइन भूल गए? एक नया टैग बनाएं। अप्रचलित या पुराने को हटा दें।

अब, मैंने "इस तरह की और ऐसी शाखाओं में वापस विलय करने के बारे में बहुत कुछ पढ़ा, फिर अंत में ट्रंक शाखा में"। इसे मर्ज वर्कफ़्लो कहा जाता है और यहाँ कुछ भी अनिवार्य नहीं है । ऐसा नहीं है क्योंकि आपके पास एक ट्रंक शाखा है जिसे आपको कुछ भी वापस विलय करना होगा

सम्मेलन द्वारा, ट्रंक शाखा आपके विकास की वर्तमान स्थिति का प्रतिनिधित्व कर सकती है, लेकिन यह एक सरल अनुक्रमिक परियोजना के लिए है, जो एक परियोजना है:

  • कोई 'एडवांस' विकास नहीं (अगले-अगले संस्करण की तैयारी के लिए इस तरह के बदलावों को लागू करना कि वे वर्तमान 'ट्रूडो' के अनुकूल न हों)
  • कोई बड़ी रिफैक्टिंग (एक नई तकनीकी पसंद के परीक्षण के लिए)
  • पिछले रिलीज का कोई दीर्घकालिक रखरखाव नहीं

क्योंकि उन परिदृश्य में से एक (या सभी) के साथ, आप अपने आप को चार 'चड्डी', चार 'वर्तमान विकास' प्राप्त करते हैं, और उन सभी को नहीं जो आप समानांतर विकास में करते हैं, जरूरी तौर पर 'ट्रंक' में वापस विलय करना होगा।


38

एसवीएन में एक टैग और शाखा वास्तव में समान हैं।

टैग = समय में एक परिभाषित टुकड़ा, आमतौर पर रिलीज के लिए उपयोग किया जाता है

शाखा = समय में एक परिभाषित टुकड़ा भी है कि विकास जारी रह सकता है, आमतौर पर 1.0, 1.5, 2.0, आदि जैसे प्रमुख संस्करण के लिए उपयोग किया जाता है, फिर जब आप रिलीज करते हैं तो आप शाखा को टैग करते हैं। यह आपको ट्रंक में परिवर्तन को आगे बढ़ाते हुए एक उत्पादन रिलीज का समर्थन जारी रखने की अनुमति देता है

ट्रंक = विकास कार्य स्थान, यह वह जगह है जहां सभी विकास होना चाहिए, और फिर शाखा रिलीज से विलय वापस बदल जाता है।


30

उनका वास्तव में कोई औपचारिक अर्थ नहीं है। एक फ़ोल्डर SVN के लिए एक फ़ोल्डर है। वे आपकी परियोजना को व्यवस्थित करने का एक आम तौर पर स्वीकृत तरीका है।

  • ट्रंक वह जगह है जहाँ आप अपने विकास की मुख्य लाइन रखते हैं। ब्रांच फोल्डर वह जगह है जहाँ आप अच्छी तरह से ब्रांच बना सकते हैं, जिसे शॉर्ट पोस्ट में समझाना मुश्किल है।

  • एक शाखा आपके प्रोजेक्ट के सबसेट की एक प्रति है जिसे आप ट्रंक से अलग से काम करते हैं। हो सकता है कि यह उन प्रयोगों के लिए हो जो कहीं भी नहीं जा सकते, या हो सकता है कि यह अगली रिलीज़ के लिए हो, जिसे आप बाद में स्थिर होने पर वापस ट्रंक में विलय कर देंगे।

  • और टैग फ़ोल्डर आपकी रिपॉजिटरी की टैग की गई प्रतियां बनाने के लिए है, आमतौर पर रिलीज़ चौकियों पर।

लेकिन जैसा मैंने कहा, एसवीएन के लिए, एक फ़ोल्डर एक फ़ोल्डर है। branch, trunkऔर टैग सिर्फ एक सम्मेलन है।

मैं 'कॉपी' शब्द का उदारतापूर्वक उपयोग कर रहा हूं। एसवीएन वास्तव में भंडार में चीजों की पूरी प्रतियां नहीं बनाता है।


13

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

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

टैग एक विशेष समय पर भंडार की फोटो है। इन पर कोई विकास नहीं होना चाहिए। वे सबसे अधिक बार एक ग्राहक को जारी की गई कॉपी लेने के लिए उपयोग किया जाता है ताकि आप आसानी से एक ग्राहक का उपयोग कर सकें।

यहाँ रिपॉजिटरी के लिए एक बहुत अच्छी गाइड का लिंक दिया गया है:

विकिपीडिया के लेख भी पढ़ने लायक हैं।


12

अब यह सॉफ्टवेयर विकास के बारे में बात है, किसी भी चीज़ के बारे में कोई सुसंगत ज्ञान नहीं है, हर किसी को लगता है कि यह अपना तरीका है, लेकिन ऐसा इसलिए है क्योंकि यह अपेक्षाकृत युवा अनुशासन है।

यहाँ मेरा सादा सरल तरीका है,

ट्रंक - ट्रंक डायरेक्टरी में काम का सबसे चालू, स्वीकृत और मर्ज किया गया निकाय है। जो कई लोगों ने कबूल किया है, उसके विपरीत, मेरा ट्रंक केवल स्वच्छ, साफ-सुथरा, स्वीकृत कार्य और विकास क्षेत्र नहीं, बल्कि एक रिलीज क्षेत्र है।

किसी समय में जब ट्रंक सभी रिलीज करने के लिए तैयार लगता है, तो इसे टैग और जारी किया जाता है।

शाखाएँ - शाखाओं निर्देशिका में प्रयोग और चल रहे कार्य शामिल हैं। एक शाखा के तहत काम तब तक रहता है जब तक कि उसे ट्रंक में विलय करने की मंजूरी नहीं दी जाती है। मेरे लिए, यह वह क्षेत्र है, जहां सभी काम किए जाते हैं।

उदाहरण के लिए: मेरे पास उत्पाद पर विकास के पांचवें दौर के लिए पुनरावृत्ति -5 शाखा हो सकती है, शायद नौवें दौर के प्रयोग के लिए एक प्रोटोटाइप -9 शाखा, और इसी तरह।

टैग - टैग निर्देशिका में स्वीकृत शाखाओं और ट्रंक रिलीज़ के स्नैपशॉट हैं। जब भी किसी शाखा को ट्रंक में विलय करने की मंजूरी दी जाती है, या एक रिलीज ट्रंक से बना होता है, तो अनुमोदित शाखा या ट्रंक रिलीज का एक स्नैपशॉट टैग के तहत बनाया जाता है।

मुझे लगता है कि मैं टैग के साथ समय के माध्यम से आगे और पीछे कूद कर सकते हैं ब्याज को काफी आसानी से।


10

मुझे एसवीएन के बारे में यह महान ट्यूटोरियल मिला जब मैं ओपनसीवी 2 कंप्यूटर विज़न एप्लीकेशन प्रोग्रामिंग कुकिंगबुक के लेखक की वेबसाइट देख रहा था और मुझे लगा कि मुझे साझा करना चाहिए।

उनके पास एसवीएन का उपयोग करने का एक ट्यूटोरियल है और वाक्यांशों 'ट्रंक', 'टैग' और 'शाखा' का क्या अर्थ है।

अपने ट्यूटोरियल से सीधे उद्धृत:

आपके सॉफ़्टवेयर प्रोजेक्ट का वर्तमान संस्करण, जिस पर आपकी टीम वर्तमान में काम कर रही है, आमतौर पर ट्रंक नामक एक निर्देशिका के तहत स्थित है । जैसे ही परियोजना विकसित होती है, डेवलपर अपडेट करता है कि संस्करण बग को ठीक करते हैं, नई सुविधाएँ जोड़ते हैं) और उस निर्देशिका के तहत अपने परिवर्तन प्रस्तुत करते हैं।

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

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


9

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

शाखाओं की निर्देशिका आपकी शाखाओं को रखने के लिए है, चाहे वे कुछ भी हों।

टैग निर्देशिका मूल रूप से फ़ाइलों के एक निश्चित सेट को टैग करने के लिए है। आप रिलीज जैसी चीजों के लिए ऐसा करते हैं, जहां आप चाहते हैं कि "1.0" इन संशोधनों पर ये फाइलें हों और "1.1" इन संशोधनों पर ये फाइलें हों। आपके द्वारा किए जाने के बाद आप आमतौर पर टैग संशोधित नहीं करते हैं। टैग के बारे में अधिक जानकारी के लिए, अध्याय 4 देखें । ब्रांचिंग और विलय ( तोड़फोड़ के साथ संस्करण नियंत्रण )।


9

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


8

टैग = समय में एक परिभाषित टुकड़ा, आमतौर पर रिलीज के लिए उपयोग किया जाता है

मुझे लगता है कि यह वही है जो आमतौर पर "टैग" से होता है। लेकिन तोड़फोड़ में:

उनका वास्तव में कोई औपचारिक अर्थ नहीं है। एक फ़ोल्डर SVN के लिए एक फ़ोल्डर है।

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

या शायद मैं अभी तक बहुत लंबे समय से सीवीएस का उपयोग कर रहा हूं ।


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

6

मुझे लगता है कि कुछ भ्रम एसवीएन में एक टैग की अवधारणा और कार्यान्वयन के बीच अंतर से आता है। SVN के लिए एक टैग एक शाखा है जो एक प्रति है। टैग को संशोधित करना गलत माना जाता है और वास्तव में TortoiseSVN जैसे उपकरण आपको चेतावनी देंगे यदि आप रास्ते में ../tags/ .. के साथ कुछ भी संशोधित करने का प्रयास करते हैं।


5

मुझे वास्तव में यकीन नहीं है कि 'टैग' क्या है, लेकिन शाखा काफी सामान्य स्रोत नियंत्रण अवधारणा है।

मूल रूप से, एक शाखा ट्रंक को प्रभावित किए बिना कोड में परिवर्तन पर काम करने का एक तरीका है। कहते हैं कि आप एक नई सुविधा जोड़ना चाहते हैं जो काफी जटिल है। आप परिवर्तनों को जांचने में सक्षम होना चाहते हैं क्योंकि आप उन्हें बनाते हैं, लेकिन यह नहीं चाहते कि जब तक आप इस सुविधा के साथ न हों तब तक ट्रंक को प्रभावित न करें।

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

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

यहां शाखाओं पर विकिपीडिया प्रविष्टि है , क्योंकि वे शायद चीजों को मुझसे बेहतर समझा सकते हैं। :)


4

ट्रंक : फुर्तीली हर स्प्रिंट के पूरा होने के बाद हम आंशिक रूप से shippable उत्पाद के साथ बाहर आते हैं। इन रिलीज को ट्रंक में रखा गया है।

शाखाएँ : प्रत्येक चल रहे स्प्रिंट के लिए सभी समानांतर विकास कोड शाखाओं में रखे गए हैं।

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


यह आपका विशेष वर्कफ़्लो है, यह सामान्य रूप से लागू नहीं है।
जेसन एस

4

जीआईटी से परिचित लोगों के लिए, जीआईटी में मास्टर एसवीएन में ट्रंक के बराबर है।

शाखा और टैग में GIT और SVN दोनों में समान शब्दावली है।

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