2012-08-09 16 views
18

पर विभिन्न प्रभाव पड़ता है यह ज्यादातर जिज्ञासा की प्रकृति है क्योंकि मैं गिट से परिचित होने की कोशिश कर रहा हूं। मैंने 'गिट fetch' के लिए प्रलेखन को देखा है लेकिन मुझे नीचे के लिए एक स्पष्ट स्पष्टीकरण नहीं दिख रहा है। अग्रिम धन्यवाद, और क्षमा करें अगर यह कमाल से स्पष्ट है।गिट fetch बनाम गिट fetch मूल मास्टर के पास शाखा

1) एक केंद्रीय भंडार से, GitHub कहते हैं, मैं दो मशीनों, HostA और HostB में से प्रत्येक पर website नाम के एक रिपोजिटरी क्लोन।

2) HostA पर, मैं फ़ाइल में बदलाव करता हूं, README.txt कहता हूं, और इसे प्रतिबद्ध करता हूं।
HostA पर इस बिंदु पर, शाखाओं master और origin/master के लिए प्रतिबद्ध, के रूप में विभिन्न उम्मीद कर रहे हैं के बाद से मैं अभी तक

git show master 
git show origin/master 

रिपोर्ट विभिन्न हैश धक्का दिया नहीं किया है (क्योंकि master परिवर्तन है और origin/master नहीं करता है)

3) एक बार जब मैं धक्का देता हूं, तो वे उसके बाद भी होते हैं।


4) अब, अधिक HostB पर, अगर मैं निम्न कार्य करें:

git fetch 
git merge FETCH_HEAD 

बाद में एक ही हैश, HostB master और origin/master रिपोर्ट पर जब git show

लेकिन

साथ पूछे

यदि मैंने किया था, तो HostB पर:

git fetch origin master 
git merge FETCH_HEAD 

उस बिंदु पर हैश अभी भी भिन्न हैं।

git show origin 
git show origin/master 

रिपोर्ट अलग हैश

ट्रैकिंग शाखा origin/master अपडेट नहीं किया जाता जब तक मैं एक सादे git fetch

क्यों है?

+0

लगभग डुप्लिकेट: (तथ्य यह है कि यह खींचता है, नहीं लाता है, कोई भौतिक अंतर नहीं करता है) http://stackoverflow.com/questions/1741143/git-pull-origin-mybranch-leaves-local-mybranch-n- मूल-आगे-मूल-क्यों –

उत्तर

20

मतलब है कि आपका शाखा एक संबद्ध remote tracking branch है कि इसके विन्यास की तरह है:

git config branch.[branch-name].remote [remote-name] 
git config branch.[branch-name].merge [remote-master] 

git fetch जो दो आदेशों के बीच अंतर समझाने की महत्वपूर्ण हिस्सा है:

<refspec> 

<refspec> पैरामीटर का प्रारूप एक वैकल्पिक प्लस + है, इसके बाद स्रोत रेफरी <src>, उसके बाद एक कोलन : के बाद, गंतव्य <dst> गंतव्य गंतव्य के बाद।
<src> से मेल खाने वाला रिमोट रेफ लाया जाता है, और यदि <dst> खाली स्ट्रिंग नहीं है, तो स्थानीय रेफरी जो इससे मेल खाता है <src> का उपयोग करके तेज़ी से अग्रेषित किया जाता है।

मुझे इसे दोहराएँ:

अगर <dst> रिक्त स्ट्रिंग, स्थानीय रेफरी यह तेजी से अग्रेषित <src> उपयोग कर रहा है कि मेल खाता नहीं है।
यह जानते हुए कि: refspec गंतव्य के लिए निर्दिष्ट किया जाता है:

  • git fetch को git fetch origin master:master (अपनी शाखा config का डिफ़ॉल्ट मान से), तो यह रिमोट ट्रैकिंग शाखा अद्यतन करेगा बराबर है आप।

  • git fetch origin master "git fetch origin master:" के बराबर है, नहीं करने के लिए "git fetch origin master:master"; यह नहीं में 'master' शाखा या रिमोट ट्रैकिंग 'remotes/origin/master' शाखा
    दूसरे शब्दों में, (Jakub Narębski के answer से) आप नहीं था FETCH_HEAD में 'master' शाखा के लाए जाने के मूल्य (रिमोट के 'origin'), और संग्रहीत करता है 'टी आप को तेज़ी से आगे अपने आप को मर्ज करने या Git पुल उपयोग करना चाहते हैं अपने refspec

+0

हाय वॉनसी: बहुत बहुत धन्यवाद, यही वही है जो मुझे जानने की जरूरत है। – Xoanon93

+0

@ Xoanon93 आपका स्वागत है। रिमोट ट्रैकिंग शाखाओं के बारे में संदेह में मैं हमेशा http://stackoverflow.com/questions/1070496/having-a-hard-time-understanding-git-fetch पर वापस जाता हूं। – VonC

+2

मेरा दिमाग दर्द होता है। –

0

उत्तर git fetch से वापस आने वाले संदेशों में जवाब है। पहले मामले में, जब आप एक refspec प्रदान किए बिना लाने, तो आप देखेंगे कि दूरदराज के ट्रैकिंग शाखाओं अपडेट किया जाता है:

remote: Counting objects: 5, done. 
remote: Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
From /depot 
    c67d1c8..1941673 master  -> origin/master 

नोट कैसे संदेश दर्शाता है कि मूल/मास्टर मूल से गुरु के साथ अद्यतन किया जाता है।

अब दूसरे मामले में, जहां refspec निर्दिष्ट करते हैं, आप कुछ पूरी तरह अलग मिलती है:

remote: Counting objects: 5, done. 
remote: Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
From /depot 
* branch   master  -> FETCH_HEAD 

तो जब आप refspec, रिमोट ट्रैकिंग शाखा (मूल/मास्टर) निर्दिष्ट अद्यतन नहीं है, केवल FETCH_HEAD।

अंतिम परिणाम यह है कि जब आप वास्तव में नहीं होते हैं तो आप मूल/मास्टर से आगे दिखाई देंगे।मैं कल्पना नहीं कर सकता कि यह व्यवहार वांछनीय क्यों होगा, लेकिन यह निश्चित रूप से fetch कमांड का एक दिलचस्प छोटा सा quirk है।

0

गंतव्य निर्दिष्ट करें। आपको यह समझ में नहीं आता है कि गिट फ़ेच का उद्देश्य आपके काम करने वाले पेड़ को अपडेट नहीं करना है। प्राप्त करना आपकी ट्रैकिंग शाखाओं को अपडेट करने के लिए है।

संबंधित मुद्दे