सबसे पहले, जैसा कि @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 "। (एक तरफ, अर्थ वर्जनिंग संस्करण संख्याओं को करने के लिए एक अच्छा मार्गदर्शक है)।