2016-10-28 2 views
14

मैं लिनक्स का उपयोग कर अपनी मशीन पर एक संपूर्ण भंडार क्लोन करने की कोशिश कर रहा हूं। मैंगिट हब क्लोन सभी शाखाएं एक बार में

git clone <url> 

इस्तेमाल किया जहां यह डाउनलोड किया गया था मैं तो फ़ोल्डर में चला गया और टर्मिनल में टाइप

git branch 

। यह केवल मुझे मास्टर दिखा रहा है न कि अन्य शाखाओं जो रिमोट रिपोजिटरी में थे। मैं सभी शाखाओं को कैसे क्लोन कर सकता हूं?

मुझे पता है कि दूरदराज के में प्रत्येक शाखा के लिए मैं अलग से

git checkout -b <name of local branch> origin/<name of remote branch> 

उपयोग कर सकते हैं लेकिन वहाँ किसी भी तरह से है कि अन्य की तुलना में है?

+4

'गिट शाखा-ए 'सभी शाखाओं को सूचीबद्ध करता है। यह भी देखें 'गिट शाखा --help' –

+0

देखें http://stackoverflow.com/a/10312587/166339 – Asaph

+1

[गिट में सभी रिमोट शाखाओं को क्लोन कैसे करें?] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/ 67699/कैसे-से-क्लोन-ऑल-रिमोट-शाखा-इन-गिट) –

उत्तर

18

(1) Git स्थानीय repostitory के अंदर, एक नया श फ़ाइल बनाने

touch getAllBranches.sh 
vi getAllBranches.sh 

(2) डालें getAllBranches.sh फाइल करने के लिए नीचे दी गई सामग्री:

for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do 
    git branch --track ${branch#remotes/origin/} $branch 
done 

(3) सभी शाखाओं प्राप्त करें:

chmod +x getAllBranches.sh  
sh getAllBranches.sh 

(4) स्थानीय भंडार पर परिणाम की जांच करें:

git branch 

उदाहरण के लिए, मैं का उपयोग भंडार: https://github.com/donhuvy/spring-boot

आप देख सकते हैं, मैं स्थानीय मशीन सभी शाखाओं दिलवाया गया है:

enter image description here

+0

समझ में नहीं आता कि कोई भी इस जवाब को कैसे वोट दे सकता है! –

+0

दो टिप्पणियां: यदि किसी ने पहले से ही समस्याएं अपस्ट्रीम जोड़ दी हैं, तो सोचें कि स्क्रिप्ट "गिट शाखा-ए | grep remotes | grep -v HEAD | grep -v master | grep -v upstream" (अपस्ट्रीम शाखाओं को हटाएं) होना चाहिए। इसके अलावा, क्यों --track? क्या यह उस विकल्प का उपयोग न करने के लिए और अधिक संगत नहीं होगा, अर्थात, अपस्ट्रीम fetches और मास्टर के विलय किसी भी शाखा के समान होगा? –

+0

सबसे अच्छा जवाब कभी! बहुत बहुत धन्यवाद! – MewX

9

यह केवल मुझे मास्टर दिखा रहा है और अन्य शाखाएं जो रिमोट रिपोजिटरी में नहीं थीं। मैं सभी शाखाओं को कैसे क्लोन कर सकता हूं?

शाखाएं अनिवार्य रूप से काम करने के लिए संकेतक हैं। जब आप git clone (या git fetch) करते हैं, तो आप रिमोट रिपोजिटरी और इसकी सभी शाखाओं से भी सभी कामों को पुनर्प्राप्त करते हैं।

हालांकि, git branch डिफ़ॉल्ट रूप से दूरस्थ शाखाएं नहीं दिखाता है। इसके बजाए, यह आपको स्थानीय शाखाएं दिखाता है, जो रिमोट पर मौजूद शाखाओं से संबंधित हो सकता है या नहीं। यदि आप git branch --all चलाते हैं, तो गिट स्थानीय और रिमोट दोनों की सभी शाखाओं की रिपोर्ट करेगा।

यह ध्यान देने योग्य है कि टैग इस तरह से संचालित नहीं होते हैं, और स्थानीय और दूरस्थ टैग के बीच कोई अंतर नहीं है।

+1

आपका उत्तर समझने में सहायक है, लेकिन नहीं; सभी शाखाओं को कैसे प्राप्त करें, इस बारे में वास्तविक प्रश्न का उत्तर दें कि आप उनके बीच स्विच कर सकते हैं (हमारे लिए गिट शुरुआती)। चयनित उत्तर ऐसा प्रतीत होता है, लेकिन यदि आपके पास एक बेहतर विचार है तो इसे सुनना अच्छा लगेगा। –

+2

@ डेविड एच आम तौर पर ऐसा कुछ भी नहीं है जिसे आपको करने की ज़रूरत है; 'गिट शाखा-ए 'रिमोट शाखाएं दिखाएगी, और यदि आप एक शाखा का नाम देखें जो स्थानीय रूप से मौजूद नहीं है, लेकिन रिमोट पर करता है, तो गिट स्वचालित रूप से आपके लिए एक स्थानीय शाखा बना देगा। –

+0

मैं अभी परीक्षण करने के लिए एक अच्छी जगह पर नहीं हूं - मुझे लगता है कि अगर मुझे "रिमोट्स/मूल/प्रयोगात्मक" जैसी शाखाएं दिखाई देती हैं, तो मैं बस "गिट चेकआउट प्रायोगिक" कर सकता हूं और जैसा कि आप उपरोक्त कहते हैं, वैसे ही करेंगे? –

21

यह बहुत जटिल, बहुत ही सरल और सीधे आगे चरणों इस प्रकार हैं नहीं है:

रेपो क्लोनिंग के बाद, चलाने $ cd myproject

git branch -a यह आपको सभी दूरस्थ शाखाओं में दिखाई देंगे।

$ git branch -a 
* master 
    remotes/origin/HEAD 
    remotes/origin/master 
    remotes/origin/v1.0-stable 
    remotes/origin/experimental 

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

$ git checkout -b experimental origin/experimental 

सत्यापित करें कि क्या आप निम्न आदेश द्वारा वांछित शाखा में कर रहे हैं;

$ git branch 

आउटपुट इस तरह होगा;

*experimental 
master 
some branch2 
some branch3 

* उस हस्ताक्षर पर ध्यान दें जो वर्तमान शाखा को दर्शाता है।

+1

यह स्वीकार्य उत्तर होना चाहिए। – Vicky

7
git clone --bare <repository url goes here> .git 

तब के बाद रेपो है अपनी सभी शाखाओं के साथ क्लोन करें तो निम्नलिखित

git config --bool core.bare false 

git reset --hard 
+2

यह मेरे लिए काम करता था लेकिन '--bare' के बजाय' --mirror' के साथ। रिमोट्स का उपयोग करके बहाल किया जा सकता है: '$ में शाखा के लिए (गिट शाखा-ए | sed's /^..// '); गिट चेकआउट $ शाखा करें; गिट शाखा - सेट-अपस्ट्रीम-टू = $ शाखा $ शाखा; '(किसी कारण से' $ (गिट शाखा-ए) 'मौजूदा निर्देशिका में फ़ाइलों को सूची में भी जोड़ता है, इसलिए sed) – mechalynx

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