मुझे गिट के अलावा वीसीएस में मॉडलों को ब्रांच करने के बारे में बहुत कुछ पता नहीं है। मैं कहूंगा कि किसी भी डीवीसीएस में आप क्लोनिंग द्वारा ब्रांचिंग को कार्यान्वित कर सकते हैं (आप क्लोन करके शाखा बनाते हैं)। Mercurial तथाकथित "नामित शाखाएं" हैं (वास्तव में मैं इसे समझता हूं) वास्तव में लेबल केवल शाखा के रूप में व्याख्या की जाती है, कभी-कभी अस्पष्टता को हल करने के लिए संशोधन की स्थानीय संख्या की आवश्यकता होती है। Mercurial "बुकमार्क्स" ar, मुझे लगता है, गिट शाखाओं के काफी समान है। दो DVCS जिनमें बहुत शाखाकरण की विभिन्न अवधारणा Monotone और Darcs हैं। मुझे लगता है कि "प्रतिलिपि करके शाखाकरण" कि सबवर्जन का उपयोग करता है, जहां परियोजना नाम और शाखा नाम के बीच अलगाव सम्मेलन है, यह एक गलत विचार है।
गिट संशोधन में एक निर्देशित विश्वकोश ग्राफ (डीएजी) का काम करता है। यह निर्देशित है, क्योंकि माता-पिता के माता-पिता होते हैं। यह एक बहुत ही महत्वपूर्ण मुद्दा है: प्रतिबद्धता के डीएजी में किनारे अपने माता-पिता को प्रतिबद्ध हैं (या, विलय प्रतिबद्धता के मामले में, दो या उससे अधिक माता-पिता)। काम का ग्राफ विश्वकोश है, जिसका अर्थ है कि कोई श्रृंखला नहीं है (कोई रास्ता नहीं) जो एक ही वस्तु के साथ शुरू होता है और समाप्त होता है।
Git glossaryविकास की सक्रिय रेखा के रूप में "शाखा" को परिभाषित करता है। यह विचार गिट में शाखाओं के कार्यान्वयन के पीछे है।
शाखा पर सबसे हालिया प्रतिबद्धता को उस शाखा के टिप के रूप में जाना जाता है। शाखा की नोक को शाखा प्रमुख द्वारा संदर्भित किया गया है, जो इस प्रतिबद्धता के लिए केवल एक प्रतीकात्मक नाम है। अपने "ढीले" रूप में इस तरह के शाखा प्रमुख (उदाहरण के लिए 'मास्टर' नाम की शाखा के लिए) refs/heads/
निर्देशिका में गिट रिपोजिटरी (.git
डीआईआर के अंदर) में कहीं भी एक फ़ाइल है, जिसमें शाखा की वर्तमान युक्ति का संदर्भ शामिल है: इसका SHA-1 प्रतिबद्धता के पहचानकर्ता (हेक्साडेसिमल स्ट्रिंग के रूप में)।
जब आप गिट में कोई नई प्रतिबद्धता बनाते हैं, तो वर्तमान में चेक की गई शाखा की नोक आगे बढ़ती है। दूसरे शब्दों में, नई प्रतिबद्धता वर्तमान शाखा की नोक के शीर्ष पर बनाई गई है, और शाखा प्रमुख नई प्रतिबद्धता के लिए आगे बढ़ता है (कुछ हद तक इसी तरह के सूचकांक को ढेर के शीर्ष पर कैसे आगे बढ़ सकता है)।
एक सिंगल गिट रिपोजिटरी शाखाओं की मनमानी संख्या को ट्रैक कर सकती है, लेकिन आपके काम करने वाले पेड़ (यदि आपके पास कोई है) उनमें से केवल एक ("वर्तमान" या "चेक आउट" शाखा) से जुड़ा हुआ है। वर्तमान शाखा हेड पॉइंटर द्वारा दी जाती है। हेड (आमतौर पर) सूचकांक वर्तमान में शाखा (शाखा के नाम पर) की जांच करने के लिए सूचक है, जैसे शाखा प्रमुख शाखाओं की युक्तियों के लिए पॉइंटर्स हैं।
उदाहरण के लिए यदि अभी चेक आउट शाखा 'गुरु' है, तो .git/HEAD
फ़ाइल (का प्रतिनिधित्व प्रमुख) है एक वामो होते हैं .git/refs/heads/master
('मास्टर' शाखा के प्रमुख) ref: refs/heads/master
(refs/heads/master
के लिए एक प्रतीकात्मक संदर्भ), और साथ लाइन समाप्त होगा उदाहरण के लिए एलएफ समाप्त लाइन 0b127cb8ab975e43398a2b449563ccb78c437255
है, whihc 'मास्टर' शाखा की नोक के लिए SHA-1 पहचानकर्ता है (यानी यदि वर्तमान शाखा "पैक नहीं" है: तो आपको .git/packed-refs
पर एक नज़र रखना होगा)।
गिट में कुछ आदेश, जैसे "गिट प्रतिबद्ध" या "गिट रीसेट" शाखा सिर में हेरफेर/परिवर्तन; अन्य जैसे कि "गिट चेकआउट" हेड (हेरेट) को बदलें/बदलें (वर्तमान शाखा के प्रतीकात्मक संदर्भ)।
"git log branch
" कमांड शाखा टिप से पहुंचने योग्य सभी प्रतिबद्धताओं को दिखाता है, जिसका अर्थ शाखा के टिप, उसके माता-पिता, माता-पिता (या माता-पिता) के माता-पिता की प्रतिबद्धता आदि का मतलब है। यह एक डीएजी का हिस्सा दिखाता है।
एक शाखा को हटाने वाली गिट में बस शाखा के सिर को हटाने का मतलब है। इसका मतलब यह हो सकता है कि कुछ "अदृश्य", पहुंचने योग्य फ्रीम रेफ (शाखाएं और टैग) बन जाते हैं, जिसका अर्थ है कि कुछ समय में उन लोगों को कचरा इकट्ठा किया जा सकता है और भंडार से निकाल दिया जा सकता है। लेकिन अगर आप "गिट शाखा-डी < ब्रैनchnम >" के साथ शाखा को हटा सकते हैं तो इसका मतलब है कि कोई काम नहीं खो जाएगा; आप "गिट शाखा-डी < ब्रैनchnम >" के साथ शाखा हटाने को मजबूर कर सकते हैं। शाखा का नाम बदलना शाखा के नाम का नाम बदलने का विषय है, शाखा टिप का एक प्रतीकात्मक संदर्भ (प्रतीकात्मक नाम); शाखा के नाम प्रतिबद्ध वस्तु में कहीं भी सहेजे नहीं जाते हैं।
Git भी reflogs, जो जहां शाखा टिप बताया (और जब) का स्थानीय इतिहास है की अवधारणा है। उदाहरण के लिए यदि आप "गिट प्रतिबद्ध - कमांड" के साथ प्रतिबद्धता में संशोधन करते हैं, तो शाखा टिप संशोधित प्रतिबद्धता के साथ प्रतिस्थापित हो जाएगी, और हेड^संशोधन से पहले और बाद में प्रतिबद्धता के माता-पिता होंगे, जबकि संशोधन से पहले संस्करण के लिए रीफ्लॉग में प्रवेश होगा और संशोधन के बाद। यदि आप "गिट रीसेट" का उपयोग करके इतिहास को रिवाइंड करते हैं, तो रीफ्लॉग में रिवाइंडिंग से पहले पुराने शाखा टिप की जानकारी होगी।
शॉर्ट रीफ्लॉग में अतिरिक्त सुरक्षा और गिट कमांड को आसान वसूली देता है।
नामित शाखाएं गिट शाखाओं से काफी अलग हैं, विवरण के लिए यहां देखें: http://stevelosh.com/blog/entry/2009/8/30/a-guide-to-branching-in-mercurial/ – tonfa
यह भी देखें "गिट एंड मर्कुरियल - तुलना और कंट्रास्ट" में मेरा जवाब, जिसमें शाखाएं भी शामिल हैं: http://stackoverflow.com/questions/1598759/git-and-mercurial-compare-and-contrast/1599930#1599930 –
मैन, टोनफा हमेशा मेरे ब्लॉग एंट्री पोस्ट करने से पहले प्रबंधन करता है! :) –