ट्रैकिंग शाखा क्या है?


173

क्या कोई "ट्रैकिंग शाखा" समझा सकता है क्योंकि यह लागू होता है?

यहाँ git-scm.com से परिभाषा दी गई है :

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

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

दुर्भाग्य से, git में नया होना और SVN से आना, यह परिभाषा मेरे लिए बिलकुल समझ में नहीं आती है।

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

क्या कोई मुझे (अंग्रेजी में) बता सकता है?


6
एक शब्दावली नोट: शब्द ट्रैक , गिट में, बहुत बुरी तरह से अतिभारित है। कुछ फाइलों को ट्रैक किया जाता है और कुछ को अनट्रैक किया जाता है; कुछ शाखा नामों को रिमोट-ट्रैकिंग शाखाएं कहा जाता है ; और आप --trackएक (स्थानीय) शाखा बनाने के लिए विकल्प का उपयोग कर सकते हैं जिसकी एक दूरस्थ ट्रैकिंग शाखा है जो इसके अपस्ट्रीम के रूप में सेट है । शब्दावली 2006 और 2019 के बीच कुछ हद तक विकसित हुई है, इसलिए अलग-अलग लोगों को कभी-कभी इनमें से प्रत्येक शब्द से कुछ अलग मतलब हो सकता है
torek

मैं व्यक्तिगत रूप से दूरस्थ-ट्रैकिंग शाखाओं के स्थान पर वाक्यांश को ट्रैक करने वाले नामों का उपयोग करने की सलाह देता हूं , क्योंकि शब्द शाखा भी अतिभारित है। रिमोट-ट्रैकिंग नाम वे हैं जो दिखते हैं : वे आपके रिपॉजिटरी में हैं, लेकिन वे शाखा के नाम को याद रखने का आपका तरीका हैं, जैसा कि कुछ अन्य Git रिपॉजिटरी में देखा गया है । यदि आप तब अपस्ट्रीम शब्द का उपयोग करते हैं , जो कि अधिक आधुनिक शब्द है, तो यह कहना कि आपके अपस्ट्रीम के रूप में सेट किया गया है , आप इस सभी शब्दावली भ्रम से बच सकते हैं। origin/masteroriginmasterorigin/master
torek

जवाबों:


141

ProGit किताब है एक बहुत अच्छा विवरण :

ट्रैकिंग शाखाएँ

एक दूरस्थ शाखा से एक स्थानीय शाखा की जाँच करना स्वचालित रूप से एक ट्रैकिंग शाखा कहलाता है। ट्रैकिंग शाखाएँ स्थानीय शाखाएँ होती हैं जिनका दूरस्थ शाखा से सीधा संबंध होता है। यदि आप ट्रैकिंग शाखा और प्रकार पर हैं git push, तो Git को स्वचालित रूप से पता होता है कि किस सर्वर और शाखा को पुश करना है। इसके अलावा, git pullइन शाखाओं में से एक पर चलने पर सभी दूरस्थ संदर्भ प्राप्त होते हैं और फिर स्वचालित रूप से संबंधित दूरस्थ शाखा में विलय हो जाता है।

जब आप एक रिपॉजिटरी क्लोन करते हैं, तो यह आम तौर पर एक मास्टर शाखा बनाता है जो मूल / मास्टर को ट्रैक करता है। इसीलिए git pushऔर git pullकिसी अन्य तर्क के साथ बॉक्स से बाहर काम करें। हालाँकि, यदि आप चाहें तो अन्य ट्रैकिंग शाखाएँ स्थापित कर सकते हैं - जो मूल पर शाखाएँ ट्रैक नहीं करती हैं और मास्टर शाखा को ट्रैक नहीं करती हैं। साधारण मामला उदाहरण है जिसे आपने अभी देखा है, चल रहा है git checkout -b [branch] [remotename]/[branch]। यदि आपके पास संस्करण 1.6.2 या बाद का संस्करण है, तो आप --trackशॉर्टहैंड का भी उपयोग कर सकते हैं :

$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"

दूरस्थ शाखा की तुलना में एक अलग नाम के साथ एक स्थानीय शाखा स्थापित करने के लिए, आप आसानी से एक अलग स्थानीय शाखा नाम के साथ पहले संस्करण का उपयोग कर सकते हैं:

$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"

अब, आपकी स्थानीय शाखा sfस्वचालित रूप से धक्का और से खींच लेगी origin/serverfix

बोनस: अतिरिक्त git statusजानकारी

एक ट्रैकिंग शाखा के साथ, git statusआपको बताएगा कि आप अपनी ट्रैकिंग शाखा से कितने पीछे हैं - आपको यह याद दिलाने के लिए उपयोगी है कि आपने अभी तक अपने परिवर्तनों को आगे नहीं बढ़ाया है! यह इस तरह दिख रहा है:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

या

$ git status
On branch dev
Your branch and 'origin/dev' have diverged,
and have 3 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)


21
बस इसे साफ करना चाहता था: "एक स्थानीय शाखा को दूरस्थ शाखा से जांचना स्वचालित रूप से बनाता है जिसे ट्रैकिंग शाखा कहा जाता है।" यह भ्रामक है। --ट्रैक विकल्प के बिना आपके द्वारा बनाई गई कोई भी शाखा ट्रैकिंग नहीं होगी।
जॉनओ

@ जॉन, प्रो Git आदमी के साथ कि ऊपर ले जाना चाहते हो सकता है। संपूर्ण पुस्तक बड़े पैमाने पर संपादन सहयोग IIRC का परिणाम है।
असफ लवी

2
@ जॉनओ, के अनुसार: sbf5.com/~cduan/technical/git/git-4.shtml-track डिफ़ॉल्ट रूप से चालू है और इसलिए यह आवश्यक नहीं है।
हांक लिन

50

नीचे जीआईटी ट्रैकिंग शाखाओं पर मेरे व्यक्तिगत सीखने के नोट्स हैं, उम्मीद है कि यह भविष्य के आगंतुकों के लिए उपयोगी होगा:

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


ट्रैकिंग शाखाएँ और "गिट लाने":

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


नोट्स के लिए धन्यवाद! क्या आप उन सभी को साझा करना चाहेंगे यदि संभव हो तो? धन्यवाद;
आदित्य

@ आदित्य: यह सवाल ट्रैकिंग शाखाओं के लिए है और मैंने इस विषय पर अपने सभी नोट्स पोस्ट कर दिए हैं। यदि मुझे कुछ अन्य प्रासंगिक प्रश्न मिलते हैं जहां मैं अपने अन्य जीआईटी नोट्स पोस्ट कर सकता हूं, तो मुझे ऐसा करने में खुशी होगी।
१२:५५ बजे हगरावल

धन्यवाद! मेरा मतलब है कि उन्हें अपने ब्लॉग या कुछ पर पोस्ट कर रहा था :)। अच्छे नोट्स के लिए फिर से धन्यवाद!
आदित्य

@ आदित्य: आह, मैं देख रहा हूं। अब आपका मतलब साफ है। मैं अपनी वेबसाइट पर पीछे चल रहा हूं, फिर भी खुद के लिए एक बनाने के लिए।
२०:०४

43

प्रो गिट पुस्तक का उल्लेख है :

ट्रैकिंग शाखाएँ स्थानीय शाखाएँ होती हैं जिनका दूरस्थ शाखा से सीधा संबंध होता है

बिल्कुल नहीं। SO प्रश्न " कठिन समय समझने के बादgit-fetch " में शामिल हैं:

स्थानीय ट्रैकिंग शाखाओं की ऐसी कोई अवधारणा नहीं है , केवल दूरस्थ ट्रैकिंग शाखाएँ हैं।
तो origin/masterके लिए एक रिमोट ट्रैकिंग शाखा है masterमें originरेपो।

लेकिन वास्तव में, एक बार जब आप एक शाखा के बीच संबंध स्थापित करते हैं :

  • एक स्थानीय शाखा की तरह master
  • और एक दूरस्थ ट्रैकिंग शाखा की तरह origin/master

फिर आप masterएक स्थानीय ट्रैकिंग शाखा के रूप में विचार कर सकते हैं : यह रिमोट ट्रैकिंग शाखा को ट्रैक origin/master करता है, जो बदले में, अपस्ट्रीम रेपो की मास्टर शाखा को ट्रैक करता है origin

वैकल्पिक शब्द


छवि स्पष्टीकरण: मेरा कंप्यूटर मूल से आगे 2 है। यही वह जगह है जहां से गुरु से आने वाले दो लोग आते हैं। चित्र: progit.org/book/ch3-5.html
idbrii

क्या मैं सही ढंग से व्याख्या कर रहा हूं: यदि मेरे पास स्थानीय रूप से मूल और अपस्ट्रीम के लिए सेट हैं, तो मेरी स्थानीय मास्टर शाखा प्रत्यक्ष और अप्रत्यक्ष रूप से मूल को ट्रैक करेगी? उदाहरण: जब मुझे git statusमूल और अपस्ट्रीम रेपो दोनों के संबंध में एक प्रतिबद्ध ट्रैकिंग संदेश प्राप्त होगा? :
शेरलहोमन

3
@SherylHohman नहीं: एक स्थानीय शाखा कुछ भी "सीधे" या "अप्रत्यक्ष रूप से" ट्रैक नहीं करेगी। यह आपके द्वारा असाइन की गई दूरस्थ ट्रैकिंग शाखा को ट्रैक करेगा। एक कांटा के मामले में, सबसे अच्छा अभ्यास आम शाखाओं (जैसे मास्टर) के लिए अपस्ट्रीम (मूल रेपो) को ट्रैक करना है, और नई शाखाओं (आपके पीआर या फीचर शाखाओं) के लिए ट्रैक मूल (आपका रिमोट कांटा): stackoverflow.com/
VonC

2
@VonC - बयान "स्थानीय ट्रैकिंग शाखाओं की ऐसी कोई अवधारणा नहीं है, केवल दूरस्थ ट्रैकिंग शाखाएं हैं।" दिलचस्प है b / c शाखाओं के आसपास ऐसी परस्पर विरोधी शब्दावली है। यह अक्सर संदर्भित web.archive.org/web/20130419172453/http://www.gitguys.com/… "ट्रैकिंग शाखाओं" और "दूरस्थ ट्रैकिंग शाखाओं" के बीच अंतर करता है। वे मूल / मास्टर को "दूरस्थ ट्रैकिंग शाखा" कहते हैं - मैं सहमत हूं - लेकिन फिर वे "मास्टर" को "ट्रैकिंग शाखा" भी कहते हैं। मास्टर ट्रैकिंग क्या है? क्या वे गलत हैं या यह एक शब्दावली समस्या है?
होईसेकैंप

2
@Howiecamp जिसे वे "ट्रैकिंग शाखा कहते हैं जिसे मास्टर कहा जाता है" बस एक स्थानीय शाखा मास्टर है जो एक संबद्ध दूरस्थ ट्रैकिंग शाखा उत्पत्ति / मास्टर के साथ है, यहाँ अपने दूरस्थ मास्टर शाखा के संबंध में मूल से प्राप्त अंतिम SHA1 याद है। तो यह एक "शाफ़्ट" है जो "एक अपस्ट्रीम शाखा के साथ एक स्थानीय शाखा" डिजाइन करने के लिए है
VonC

7

इस तरह मैंने एक ट्रैकिंग शाखा जोड़ी, ताकि मैं इसे अपनी नई शाखा में खींच सकूं:

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