2010-02-20 17 views
8

मैं एक नए दूरस्थ भंडार से दूरस्थ मास्टर शाखा को ट्रैक करना चाहता हूं। दोनों पहले से मौजूद हैं।गिट सेटअप रिमोट ट्रैकिंग शाखा

मैं इस बारे में गिट में कैसे जा सकता हूं? मुझे यह सही नहीं लग रहा है। मैंने कोशिश की:

fatal: Not a valid object name: 'otherRepo/master':

git remote add otherRepo git://... 
git branch -t myTrack otherRepo/master 

हालांकि, मैं निम्नलिखित त्रुटि मिलती है।

+3

क्या आपने शाखा की कोशिश करने से पहले 'गिट फ़ेच अन्य रेपो' किया था? 'गिट रिमोट एड' बस रिमोट को कॉन्फ़िगर करता है, यह स्वचालित रूप से एक fetch नहीं करता है। यदि आप इसे पहले ही प्राप्त कर चुके हैं, तो क्या आप वाकई मास्टर नाम की एक शाखा है? 'गिट शाखा -आर' या' गिट रिमोट शो- कोई अन्य रेपो '(* इसे लाने के बाद *) यह जांचने के लिए कि कौन सी शाखाएं हैं। –

+0

@ क्रिस: धन्यवाद, अब यह काम करता है। ऐसा लगता है कि मुझे तर्कसंगत लगता है कि मुझे लाने की ज़रूरत है, हालांकि यह अन्य रेपो से अन्य सभी शाखाओं को भी जोड़ता है। क्या मैं सिर्फ अन्य रेपो/मास्टर ला सकता हूं? मैं शाखा-अप को अव्यवस्थित नहीं करना चाहता हूं। –

उत्तर

12

टिप्पणियों में शामिल के रूप में: git remote add otherRepo … केवल रिमोट को कॉन्फ़िगर करता है, यह इससे कुछ भी नहीं लाता है। इससे पहले कि आप स्थानीय शाखाएं बना सकें, आपको रिमोट रिपोजिटरी की शाखाएं लाने के लिए git fetch otherRepo चलाने की आवश्यकता होगी।


(ओपी द्वारा आगे की टिप्पणी का जवाब)

आप केवल दूरदराज के भंडार से एक एकल शाखा का ट्रैक रखने के लिए चाहते हैं, तो आप आपके रिमोट की लाने संपत्ति (remote.otherRepo.fetch) को पुन: कॉन्फ़िगर कर सकते हैं।

# done as a shell function to avoid repeating the repository and branch names 
configure-single-branch-fetch() { 
    git config remote."$1".fetch +refs/heads/"$2":refs/remotes/"${1}/${2}" 
} 
configure-single-branch-fetch "$remoteName" "$branch" 
# i.e. # configure-single-branch-fetch otherRepo master 

इस के बाद, git fetch otherRepo केवल अपने स्थानीय भंडार में otherRepo/master 'दूरस्थ ट्रैकिंग शाखा' में दूरदराज के भंडार के master शाखा लायेगा।

सफाई करने के लिए

अन्य 'दूरस्थ ट्रैकिंग शाखाओं', आप उन सभी हटा सकते हैं और सिर्फ एक आप चाहते हैं फिर से लाएं, या आप चुनिंदा सिर्फ एक आप चाहते हैं को छोड़कर उन सभी को नष्ट कर सकते हैं:

git for-each-ref --shell --format='git branch -dr %(refname:short)' refs/remotes/otherRepo | sh -nv 
# remove the -nv if the commands look OK, then 
git fetch otherRepo 

# OR 

git for-each-ref --shell --format='test %(refname:short) != otherRepo/master && git branch -dr %(refname:short)' refs/remotes/otherRepo | sh -nv 
# remove the -nv if the commands look OK 

यदि आप निर्णय लेते हैं कि आप एक से अधिक दूरस्थ शाखाओं को ट्रैक करना चाहते हैं, लेकिन उनमें से सभी नहीं, तो आपके पास एकाधिक रिंच कॉन्फ़िगरेशन (git config --add remote."$remoteName".fetch … के साथ या git config --edit का उपयोग करके सीधे अपनी डुप्लिकेट और कॉन्फ़िगरेशन फ़ाइल में लाइन को संपादित करने के लिए) हो सकता है।

यदि आप रिमोट से टैग लाने से बचाना चाहते हैं, तो अपने रिमोट की टैगोपेट प्रॉपर्टी को कॉन्फ़िगर करें (remote.otherRepo.tagopt)।

git config remote."$remoteName".tagopt --no-tags 
# i.e. # git config remote.otherRepo.tagopt --no-tags 
+0

इस बहुत पूर्ण जवाब के लिए धन्यवाद। बहुत भयानक लगता है कि इतना आसान ऑपरेशन इतना जटिल बना दिया गया है। जो कुछ –

4

आप

git checkout -b myTrack otherRepo/master 

यह कोशिश एक नई शाखा myTrack, जो otherRepo/मास्टर शाखा पटरियों पैदा करेगा सकता है।

+0

काम नहीं करता है, दी गई त्रुटि है: घातक: गिट चेकआउट: पथ अपडेट करना शाखाओं के साथ असंगत है। क्या आप 'अन्य रेपो/मास्टर' चेकआउट करना चाहते थे जिसे प्रतिबद्ध के रूप में हल नहीं किया जा सकता है? ' –

+0

रिमोट ऐड और लाने के बाद मेरे लिए काम किया। – Von

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