git: "ब्रांचनाम" ​​और "रेफ्स / हेड्स / ब्रांचनाम" ​​के बीच अंतर


96

एक उदाहरण पर समझाया जाना सबसे अच्छा: मैं रिपॉजिटरी की शाखा 0.58 पर हूं और यह उसका तरीका है कि मैं कैसे खींचता हूं:

git pull origin 0.58

जब मैं सिर्फ "गिट पुल" कहता हूं, मुझे मिलता है:

ip238:openlierox az$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.0.58.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.0.58.remote = <nickname>
    branch.0.58.merge = <remote-ref>
    remote.<nickname>.url = <url>
    remote.<nickname>.fetch = <refspec>

See git-config(1) for details.

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

git config branch.0.58.merge 0.58
git config branch.0.58.remote origin

और यह काम करने लगता है। फिर, बस दिलचस्पी के कारण, मैंने इन सेटिंग के बारे में किसी अन्य शाखा पर एक नज़र डाली:

ip238:openlierox az$ git config branch.0.57.merge
refs/heads/0.57
ip238:openlierox az$ git config branch.0.57.remote
origin

मैं अब सोच रहा था, क्या "0.58" या "रेफ्स / हेड्स / 0.58" के बीच कोई अंतर है?

वास्तव में क्या अंतर है?


1
बस शीर्षक में टाइपो पता करने के लिए (अब यह संशोधित करके एक पुराने शीर्षक के साथ खिलवाड़ के बिना) , यह पढ़ना चाहिए "refs / सिर / BRANCHNAME" , headsएक "एस" के साथ।
रोमेनैवलेरी

जवाबों:


129

A ref, कमिट की ओर इशारा करते हुए कुछ भी है, उदाहरण के लिए, शाखाएँ (प्रमुख), टैग और दूरस्थ शाखाएँ। आपको अपनी .git/refsनिर्देशिका में हेड्स, रीमोट्स और टैग्स देखने चाहिए , यह मानते हुए कि आपके रिपॉजिटरी में तीनों प्रकार के रेफ हैं।

refs/heads/0.580.58 नामक एक शाखा निर्दिष्ट करता है । यदि आप निर्दिष्ट नहीं करते हैं कि रेफ किस नाम पर है, तो गिट डिफ़ॉल्ट में दिखेगा। यह केवल 0.58 का उपयोग करता है गर्भ धारण अस्पष्ट - आप दोनों एक शाखा और एक टैग हो सकता है जिसका नाम 0.58 है।


3
बहुत बहुत धन्यवाद, यह इसे बहुत अच्छी तरह से समझाता है। यह सिर्फ सरल "0.58" के साथ काम करता है क्योंकि ऐसा कोई नामांकित टैग नहीं है।
अल्बर्ट

1
ठीक है, यह अनिवार्य रूप से हमेशा पूरी तरह से ठीक होगा, लेकिन सुरक्षित होना अच्छा है।
कास्कैबेल

यह उत्तर एक खजाना है। अंत में कोई मुझे समझाता है और मैं इसका आनंद लेता हूं! धन्यवाद।
एडेरोक्स

9
: यहाँ स्पष्टता के लिए उन सभी को है refs/heads/और refs/remotes/औरrefs/tags/
जिम Aho

40

बस किसी ऐसे व्यक्ति के लिए जो जिज्ञासु है - git show-refजो कि Git v1.8.2.2 के बाद से उपलब्ध है, आपको आपके स्थानीय रिपॉजिटरी में आपके पास मौजूद सभी संदर्भ दिखाएगा।


3
git log --decorate=fullइतिहास के संदर्भों का पूरा नाम भी दिखाएगा
गलाथ

19

देखें, branchNameजीआईटी को वास्तव में इसकी पहचान करने से पहले पूरी तरह से हल करने की आवश्यकता है। पूरी तरह से हल किया गया नाम होगा refs/heads/branchName

प्रसिद्ध कमांडों git checkout branchNameमें से एक वास्तव में स्वचालित रूप से यह पहचानने के लिए पूरी तरह से हल करता है कि आप कहां चेकआउट करना चाहते हैं। ध्यान दें कि यह स्वचालित रूप से करता है इसलिए हम इसे कभी भी अपने दम पर नहीं लिखते हैं।

इससे ऐसा कैसे होता है ? आइए हम यहां देखें

refname :, जैसे master, heads/master,refs/heads/master

एक प्रतीकात्मक रेफरी नाम। उदाहरण के लिए आमतौर पर मास्टर का अर्थ है कि संदर्भित वस्तु refs/heads/master। यदि आपके पास दोनों हैं heads/masterऔर tags/master, आप स्पष्ट रूप heads/masterसे गिट को बताने के लिए कह सकते हैं कि आपका कौन सा मतलब है। जब अस्पष्ट है, <refname>तो निम्नलिखित नियमों में पहला मैच लेने से मना कर दिया गया है:

1. यदि $GIT_DIR/<refname>मौजूद है, यह है कि तुम क्या मतलब है (यह आमतौर पर केवल के लिए उपयोगी है HEAD, FETCH_HEAD, ORIG_HEAD, MERGE_HEADऔर CHERRY_PICK_HEAD);

2. सही, refs/<refname>अगर यह मौजूद है;

3. सही, refs/tags/<refname>अगर यह मौजूद है;

4. सही, refs/heads/<refname>अगर यह मौजूद है;

5. सही, refs/remotes/<refname>अगर यह मौजूद है;

6. सही, refs/remotes/<refname>/HEADअगर यह मौजूद है।

तो 6 चरणों से ऊपर, यह हल करने की कोशिश करता है कि यह क्या है branchName । इसलिए हमें कभी भी इसे पूरी तरह से हल करने की आवश्यकता नहीं है।

यहाँ और यहाँ भी देखो ।

इसके अलावा, अपनी .gitनिर्देशिका में जाएं और refफ़ोल्डर के अंदर देखें ।

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