2010-06-14 14 views
13

मेरे पास एक स्थानीय भंडार है जो एक नंगे रिमोट रिपोजिटरी से क्लोन किया गया है। निम्न आदेश रिमोट रिपोजिटरी की शाखाओं को सूचीबद्ध करता है।गिट में, मैं रिमोट रिपोजिटरी की रिमोट शाखाओं को कैसे देखूं?

$ git ls-remote <remote> 

74bd3eb190edb39db04f6c0c4dbbb9e1e96bc6db refs/remotes/test 
85de54d6ae813c624b9623983e6b0a4948dae0fe refs/remotes/trunk 

मैं चेकआउट और ट्रैक कि दूरदराज के दूरस्थ शाखा ट्रंक करना चाहते हैं। मैं उसको कैसे करू?

ध्यान दें कि यह रिमोट रिपोजिटरी की स्थानीय शाखा की जांच करने से अलग है। इस प्रकार रिमोट रिपोजिटरी कैसा दिखता है।

$ git branch -a 

master 
remotes/test 
remotes/trunk 

Git लाने < दूरस्थ> दूरदराज के भंडार की शाखाओं के सभी लाने के लिए चलाने के बाद, मैं स्थानीय भंडार में इस उत्पादन मिलता है।

$ git branch -r 

repo/HEAD -> repo/master 
repo/master 
+1

जेफ्रोमी और क्रिस के जवाब पर्याप्त होना चाहिए। मैं बस दिलचस्प एसओ सवाल http://stackoverflow.com/questions/1070496/having-a-hard-time-understanding-git-fetch संदर्भ के लिए जोड़ता हूं। – VonC

उत्तर

11

आप किसी भी रिमोट से किसी भी रेफरी प्राप्त कर सकते हैं (जब तक सर्वर आपको इसे देने के इच्छुक है)। refs/heads/ के बाहर रेफरी लाने की कुंजी refs/ से शुरू होने वाले पूर्ण रेफ पथ प्रदान करना है। अगर वांछित है, तो आप उन रिपॉजिटरीज से भी खींच सकते हैं जिन्हें रिमोट्स के रूप में कॉन्फ़िगर नहीं किया गया है (गिट fetch रिमोट नाम के बजाय यूआरएल ले सकता है)।

डिफ़ॉल्ट रूप से, कॉन्फ़िगर किए गए रिमोट केवल रिमोट रिपोजिटरी के refs/heads/ नेमस्पेस से प्राप्त करेंगे, इसलिए वे refs/remotes/ के अंदर कुछ भी नहीं उठाएंगे। लेकिन, आप refs/remotes/trunk (remotes/trunk) पर एक पूर्ण रेफरी का उपयोग कर इसके अंदर एक रेफरी का उल्लेख कर सकते हैं, लेकिन यह भी अस्पष्ट हो सकता है)।

यदि fetched refspec गंतव्य रेफरी निर्दिष्ट नहीं करता है, तो इसे विशेष FETCH_HEAD रेफरी में संग्रहीत किया जाएगा।


लायें भंडार के refs/remote/trunk FETCH_HEAD में और एक अलग प्रमुख के रूप में यह बाहर की जाँच:

git fetch remote-name-or-url refs/remotes/trunk && 
git checkout -b trunk-from-remote FETCH_HEAD 
: के बजाय एक अलग प्रमुख का उपयोग करने का

git fetch remote-name-or-url refs/remotes/trunk && 
git checkout FETCH_HEAD 

एक ही है, लेकिन बनाने के एक नाम है, स्थानीय शाखा

वही, लेकिन सीधे एक स्थानीय शाखा में:

git fetch remote-name-or-url refs/remotes/trunk:trunk-from-remote && 
git checkout trunk-from-remote 

यदि आप एक कॉन्फ़िगर किए गए रिमोट के साथ काम कर रहे हैं, तो आप remote.<remote-name>.fetch कॉन्फ़िगरेशन को फिर से लिख सकते हैं और refs/heads/ और refs/remotes/ दोनों से स्वचालित करने के लिए अतिरिक्त प्रविष्टि जोड़ सकते हैं।

# fetch branchs of remote into remote-name/heads/* 
git config remote.remote-name.fetch '+refs/heads/*:refs/remotes/remote-name/heads/*' && 
# fetch remotes of remote into remote-name/remotes/* 
git config --add remote.remote-name.fetch '+refs/remotes/*:refs/remotes/remote-name/remotes/*' 

संभव टकराव से बचने के लिए, ऊपर के उदाहरण संबंध तोड़ना नेमस्पेस (…/heads/ और …/remotes/) में दुकान refs को लाने कॉन्फ़िगर करता है। यदि आप चाहें तो आप अलग-अलग नाम चुन सकते हैं। यदि आप सुनिश्चित हैं कि कोई संघर्ष नहीं होगा, तो आप उन्हें सीधे refs/remotes/remote-name/ के तहत भी सामान डाल सकते हैं।

+0

क्या मैं इसे सेट अप कर सकता हूं ताकि यह स्वचालित रूप से रिमोट की रिमोट शाखा को ट्रैकिंग स्थानीय शाखा में खींच सके? या क्या मैं यह सुनिश्चित करने से बेहतर हूं कि रिमोट की अपनी स्थानीय ट्रैकिंग शाखाएं हैं, जिन्हें मैं स्थानीय रूप से ट्रैक करता हूं? –

+0

@ हंस: मैंने जवाब दोबारा लिखा है। मैंने "असुरक्षित रिमोट" पहलू पर जोर दिया जो शायद आपके लिए इतना महत्वपूर्ण नहीं था और लाने के लिए अंत में थोड़ा सा जोड़ा। –

+0

मैं उन दूरस्थ रिमोट शाखाओं में से किसी एक को ट्रैक करने के लिए स्थानीय शाखा कैसे स्थापित करूं? मैं एक उचित 'गिट चेकआउट -बी ट्रंक --ट्रैक रेपो/रिमोट्स/ट्रंक' करता हूं, लेकिन फिर 'गिट पुल रेपो' मेरी शाखा.trunk.merge कॉन्फ़िगरेशन को समझ नहीं पाएगा। मुझे काम करने के लिए 'गिट पुल रेपो रेफ/रिमोट्स/ट्रंक: रेफ/रीमोट्स/रेपो/रिमोट्स/ट्रंक' करना है। –

-1

git.exe checkout --track -b trunk refs/remotes/trunk

+0

यहां समस्या यह है कि रिमोट शाखा में स्थानीय शाखाएं नहीं हैं जो इसकी दूरस्थ शाखाओं को ट्रैक करती हैं। –

+0

ऐसा लगता है कि "रिमोट रिपोजिटरी में नहीं है" ... –

6

अच्छा प्रश्न है! मुझे पता है कि यह काम करता है; कुछ और है कि बंद मेरे सिर के ऊपर करता है के बारे में सोच नहीं सकते हैं:

git fetch origin refs/remotes/trunk 
git checkout FETCH_HEAD 
# or make a branch to check out 
git checkout -b remote-trunk FETCH_HEAD 

यह, अजीब है जिस तरह से है कि उन दूरस्थ refs रूप refs/remotes/<remote-name>/<branch-name> के नहीं हैं ... शायद मैं नाम गलत समझा, लेकिन विधि काम करता है।

3

असल में, मुझे इसका एक संतोषजनक समाधान मिला है। रिमोट सेट जोड़ना अपने स्थानीय सिर लाने और खींचने के लिए एक रेफस्पेक सेट करता है। मैंने एक और रिमोट स्थापित किया जिसे मैं कॉल/रेपो-रिमोट/जो रिमोट के रिमोट रेफरी लाता है। .git/config फ़ाइल इस

[remote "repo"] 
    url = ssh://[email protected]<hostname>:<port>/repo 
    fetch = +refs/heads/*:refs/remotes/repo/* 

[remote "repo-remotes"] 
    url = ssh://[email protected]<hostname>:<port>/repo 
    fetch = +refs/remotes/*:refs/remotes/repo-remotes/* 

जैसा दिख रहा है, तो मैं ऐसा कर सकता हूं।

$ git fetch repo-remotes 
$ git checkout -b remote-trunk --track remotes/repo-remotes/trunk 

जो रिमोट रिपोजिटरी की रिमोट शाखा/ट्रंक/को ट्रैक करने वाली स्थानीय शाखा सेट करता है।

+0

किसी दूसरे रिमोट की आवश्यकता नहीं है, बस एक अतिरिक्त fetch कॉन्फ़िगरेशन जोड़ें। –

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