2010-02-12 17 views
19

बनाने के बिना एक भंडार क्लोनिंग मैं एक कंप्यूटर से एक गिट भंडार क्लोन कर रहा हूं जो मिटाया जा रहा है।मूल रिमोट

क्या मूल भंडार origin/master के बिना एक भंडार क्लोन करना संभव है? या मुझे इसे क्लोन करने की आवश्यकता है, और फिर दूरस्थ शाखा को हटाएं (जो git remote rm origin के साथ किया जाता है)?

संपादित करें: भंडार में केवल एक शाखा है, और कोई टैग नहीं है।

उत्तर

18

मूल भंडार को "मूल" रिमोट को मास्टर शाखा क्लोन करने के लिए आवश्यक नहीं है।

git init foo 

फिर एक दूरस्थ बनाए बिना, नया एक में पुराने भंडार खींच:

नई मशीन पर, एक नया भंडार बनाने

cd foo 
git pull <reference to old repository> 

हालांकि, यह ध्यान दिया जाना चाहिए कि एक भंडार को बचाने का सबसे आसान तरीका सिर्फ भंडार की निर्देशिका को ज़िप करना होगा और फ़ाइलों को एक नई मशीन पर ले जाना होगा। यह किसी भी और सभी रिमोट्स, टैग इत्यादि को सुरक्षित रखेगा

जैसा कि नीचे बताया गया है, भंडार की प्रतिलिपि करते समय, केस-संवेदी फ़ाइल सिस्टम (जैसे लिनक्स, मैक, एनटीएफएस) से गैर-केस संवेदनशील (उदाहरण के लिए Fat32)।

+1

यह अच्छा है, मुझे नहीं पता था कि आप ऐसा कर सकते हैं। क्या आप गैर-मास्टर शाखाओं को भी इस तरह से क्लोन कर सकते हैं? – ebneter

+0

बाद वाले को लागू करने पर, किसी गैर-FAT32 से किसी FAT32 विभाजन में कॉपी न करें और फिर से वापस न करें। http://stackoverflow.com/questions/1754108/i-backed-up-a-git-project-and-got-fatal-not-a-git-repository –

+0

क्या आप पूर्व में या बिना फ़ाइल के पूर्व करेंगे:/// ', यानी 'गिट पुल/होम/उपयोगकर्ता नाम/ब्लाह' बनाम 'गिट पुल फ़ाइल: /// घर/उपयोगकर्ता नाम/ब्लाह' का उपयोग करना? –

1

मुझे विश्वास है कि आपको दूरस्थ शाखा को हटाना होगा।

+0

यदि आप इसे कुछ और नाम देना चाहते हैं, तो आप गिट क्लोन -o not_origin –

+0

कर सकते हैं समस्या यह है कि जब आप रिमोट (रिमोट शाखा नहीं) हटाते हैं, तो आप सभी रिमोट/ शाखाओं को भी हटा देते हैं। – ebneter

+0

@ एबनेटर: रिमोट को हटाएं (रिमोट शाखा नहीं) "से आपका क्या मतलब है? –

1

क्या रिमोट रेपो में मास्टर की तुलना में अधिक शाखाएं हैं? अगर यह करता है तो यह मुश्किल है; आपको सभी शाखाओं की स्थानीय प्रतियों को भी बनाना होगा क्योंकि जब आप रिमोट को हटाते हैं, तो सभी रिमोट/मूल शाखाएं चली जाएंगी। (मैं सिर्फ यह कोशिश की!)

तो, आप कुछ इस तरह कर सकते हैं:

git clone <remote_url> 
cd <repo> 
for b in $(git branch -r | grep -v HEAD | grep -v master);do 
    git branch $(basename $b) $b 
done 
git remote rm origin 
बेशक

, के रूप में जेस बोवर्स ने कहा, यह और भी आसान सिर्फ टार करने के लिए या इसे फ़ाइलें ज़िप और ले जाते हैं, अगर आपके पास ऐसा करने के लिए मशीन तक पहुंच है।

तुम भी सिर्फ एक नंगे क्लोन बना सकते हैं:

git clone --bare <remote_url> 

और फिर उस से नए क्लोन बनाते हैं।

2

ऐसे ट्रैसर को संभालने का सामान्य तरीका git bundle होगा। Backup of github repo देखें।

अपने दूसरे (नया) डेस्कटॉप से:

git bundle create file:///\\oldDesktop/share/myGitRepo --all 

एक स्थानीय फ़ाइल जिसमें से आप एक स्थानीय Git रेपो क्लोन करने के लिए सक्षम हो जाएगा बनाने के लिए।

नोट:file:/// प्रोटोकॉल पथ '\' के स्थान पर '/' का उपयोग कर के बाकी के साथ यूएनसी (यूनिवर्सल नामकरण कन्वेंशन) विंडोज पथ, का समर्थन करेंगे। Git on a Windows Lan देखें।

6

सबसे पहले, आप के git clone

--origin < नाम >--origin <name> विकल्प, -ओ < नाम का उपयोग कर सकते >

इसके बजाय के दूरदराज के नाम मूल का उपयोग कर अपस्ट्रीम रिपोजिटरी का ट्रैक रखने के लिए, 0 का उपयोग करेंनाम >

दूसरे, आप git remote add का उपयोग डेटा संग्रह स्थान जुड़ कर सकते हैं मौजूदा भंडार से लाने के लिए (ताकि आप git init, तो git remote add <name> <url> उपयोग कर सकते हैं)।


आप refs/heads/* क्लोन में refs/heads/* में जाने के साथ, भंडार का एक दर्पण बनाने के लिए चाहते हैं, तो आप कर सकते हैं init भंडार, सेटअप उचित refspec, और फिर fetch ...

या आप git clone --mirror उपयोग कर सकते हैं, जो ओपी प्रश्न के वर्तमान संस्करण का उत्तर देना चाहिए।

हालांकि यह कॉन्फ़िगरेशन (रिमोट सहित), वर्कट्री स्टेट, रीफ्लॉग इत्यादि को संरक्षित नहीं करेगा। इसके लिए आपको Jess Bowers said के रूप में रिपोजिटरी को कॉपी करने की आवश्यकता होगी।

+0

'--origin' का उपयोग करने में समस्या यह है कि *** आपको मूल रिमोट *** निर्दिष्ट करना है, सही? मैं क्लोन (या प्रभावी रूप से क्लोन) के लिए एक आसान तरीका खोजने की कोशिश कर रहा हूं जैसे कि क्लोन में कोई रिमोट उपनाम कॉन्फ़िगर नहीं किया गया है। बेशक आप हमेशा 'गिट रिमोट आरएम मूल' कर सकते थे, लेकिन मैं ऐसा कुछ ढूंढने की उम्मीद कर रहा था जो इसके बजाय एक कदम में करेगा। –

+2

@ कूपकेक: दुर्भाग्य से वहां (जहां तक ​​मुझे पता है) कोई एक-चरण समाधान नहीं है। आप या तो क्लोन (1) कर सकते हैं, फिर 'मूल' दूरस्थ जानकारी (2) को हटा दें, या रिपोजिटरी (1) प्रारंभ करें और रिमोट नाम (2) के बजाय यूआरएल का उपयोग करके सभी शाखाओं और टैग लाएं। –

+0

आपका उत्तर एक पूछे गए प्रश्न से अलग प्रश्न के लिए है। –

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