किसी अन्य निर्देशिका में git रिपॉजिटरी को कैसे स्थानांतरित करें और उस डायरेक्टरी को git रिपॉजिटरी बनाएं?


101

मेरे पास एक निर्देशिका gitrepo1 है । यह निर्देशिका एक गिट रिपॉजिटरी है।

  • मैं इस gitrepo1 को दूसरी निर्देशिका newrepo में स्थानांतरित करना चाहूंगा ।

  • डायरेक्टरी newrepo को git हिस्ट्री का कोई नुकसान नहीं होने के साथ नई git रिपॉजिटरी होनी चाहिए और इसमें डायरेक्टरी gitrepo1 होनी चाहिए ।

  • डायरेक्टरी gitrepo1 केवल एक निर्देशिका होनी चाहिए ( newrepo के अंदर ), बिना किसी .gitइंडेक्स के, यानी यह अब एक स्वतंत्र git रिपॉजिटरी या सबमॉड्यूल होना चाहिए।

मैं यह कैसे कर सकता हूँ?


9
mv girepo1 newrepo??
ddavison

जवाबों:


109

यह बहुत सरल है। Git को इस बात की परवाह नहीं है कि उसकी निर्देशिका का नाम क्या है। यह केवल परवाह करता है कि अंदर क्या है। तो आप बस कर सकते हैं:

# copy the directory into newrepo dir that exists already (else create it)
$ cp -r gitrepo1 newrepo

# remove .git from old repo to delete all history and anything git from it
$ rm -rf gitrepo1/.git

ध्यान दें कि प्रतिलिपि काफी महंगी है यदि भंडार बड़ा है और लंबे इतिहास के साथ है। आप इसे आसानी से भी टाल सकते हैं:

# move the directory instead
$ mv gitrepo1 newrepo

# make a copy of the latest version
# Either:
$ mkdir gitrepo1; cp -r newrepo/* gitrepo1/  # doesn't copy .gitignore (and other hidden files)

# Or:
$ git clone --depth 1 newrepo gitrepo1; rm -rf gitrepo1/.git

# Or (look further here: http://stackoverflow.com/q/1209999/912144)
$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

एक बार जब आप बना लेते हैं newrepo, तो गंतव्य को gitrepo1कहीं भी रखा जा सकता है, भले newrepoही आप इसे चाहें। यह प्रक्रिया को परिवर्तित नहीं करता है, बस जिस पथ को आप gitrepo1वापस लिख रहे हैं ।


6
+1। यह शायद git संस्करण 1.7.8 या 1.7.9 के साथ बनाई गई रिपॉजिटरी को प्रभावित करने वाले इस गोचा का उल्लेख करने योग्य है - जिसका अर्थ है कि git रेपो को स्थानांतरित करना इसे अनुपयोगी बनाता है (हालांकि जैसा कि संकेत दिया गया है कि यह आसानी से सही हो गया है)।
AD7six

1
मैं wndows मशीन पर हूँ और कमांड प्रॉम्प्ट का उपयोग कर रहा हूँ। मुझे "cp" कमांड नहीं मिली। क्या "cp" कमांड अन्य OS के लिए विशिष्ट है?
एलपी

1
@ user3862378, cpलगभग हर कमांड या फ़ंक्शन की तरह अन्य OSes के लिए विशिष्ट है। वास्तव में, यह हर ओएस के लिए विशिष्ट है जो विंडोज़ नहीं है। Microsoft को कॉल करने का प्रयास करें और उनसे पूछें कि वे POSIX क्यों नहीं हैं। वैसे भी, cpनकल का मतलब है। mvका मतलब है। rmमतलब निकालो। आप विंडोज़ समकक्ष पा सकते हैं।
शहबाज

@ शहाबजाद धन्यवाद, ऊपर दिया गया समाधान निम्नलिखित संरचना "newrepo ->। Git" और "newrepo-> अन्य सभी फाइलें gitrepo1 से बनाता है ..." इसके "grerepo1" फ़ोल्डर को "newrepo" के अंदर नहीं डाल रहा है .. अगर मैं उत्सुक हूं तो। मैन्युअल रूप से विंडोज़ में फ़ोल्डर बनाना और रूट फ़ोल्डर के तहत ".it" फ़ोल्डर को स्थानांतरित करना..इतिहास को प्रभावित किए बिना काम करना?
एलपी

2
@ user3862378, ऐसा नहीं होने का कोई कारण नहीं है। .git/इसमें सभी इतिहास शामिल हैं, जिसमें आपकी नवीनतम प्रतिबद्धता शामिल है। जहां भी आप इसे डालते हैं, आपके पास सारा इतिहास है। वास्तव में, अगर उस निर्देशिका की सभी फाइलें मूल रेपो से भिन्न होती हैं, जहां से आप ले .git/गए थे, केवल एक चीज यह होगी कि यह बताता है कि कुछ फाइलें हटा दी गई हैं और कुछ अनट्रैक मौजूद हैं। एक के साथ git reset --hard, हटाए गए फ़ाइलों को स्वचालित रूप से पुनर्प्राप्त किया जाएगा! केवल ध्यान देने योग्य बात यह है कि सिर्फ नकल करके .git/आप अनकांशस किए गए परिवर्तनों को पुनर्प्राप्त नहीं कर सकते हैं।
शाहबाज़

4

यह थोड़ा देर से है और इस सवाल का जवाब पहले से ही है, लेकिन इसे बिना किसी सिरदर्द के करने के लिए:

  1. यह देखें कि आपके द्वारा पुराने git फ़ोल्डर में वर्तमान शाखा क्या है git status, चलो शाखा विकास कहते हैं
  2. निर्देशिका को नए गिट फ़ोल्डर में बदलें, फिर git cloneरेपो से नए फ़ोल्डर में प्रोजेक्ट करें
  3. अपने नए फ़ोल्डर में वर्तमान शाखा की जाँच करें: git checkout development
  4. अपने नए फ़ोल्डर को पुराने के साथ समन्वयित करेंrsync , .गित फ़ोल्डर को छोड़कर , उपयोग करके :rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1

फिर आप जारी रखने के लिए अच्छे हैं जहां आपने छोड़ा था


1

यह उससे भी सरल है। बस यह किया (विंडोज पर, लेकिन यह अन्य ओएस पर काम करना चाहिए):

  1. Newrepo बनाएँ ।
  2. ले जाएँ gitrepo1 में newrepo
  3. ले जाएँ .git से gitrepo1 को newrepo (एक स्तर ऊपर)।
  4. परिवर्तन करें (आवश्यकतानुसार ट्रैकिंग ठीक करें)।

Git सिर्फ आपको एक निर्देशिका जोड़कर देखता है और फ़ाइलों का एक गुच्छा बदला है। कोई बड़ी बात नहीं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.