svn - Subversion repositories में "शाखा", "टैग" और "ट्रंक" का क्या अर्थ है?




tags branch (12)

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

मुझे लगता है कि इसका मतलब आमतौर पर "टैग" से होता है। लेकिन सबवर्सन में:

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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


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

जीआईटी और एसवीएन दोनों में शाखा और टैग की समान शब्दावली है।


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

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


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


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


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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

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

यहां भंडारों के लिए एक बहुत अच्छी मार्गदर्शिका का एक लिंक दिया गया है:

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


सामान्य रूप से (उपकरण अज्ञेय दृश्य), एक शाखा समानांतर विकास के लिए उपयोग की जाने वाली तंत्र है। एक एससीएम 0 से एन शाखाओं में हो सकता है। सबवर्सन 0 है।

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

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

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

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

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

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

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

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

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





trunk