जीआईटी रिपॉजिटरी को एक सर्वर से एक नए पर कैसे स्थानांतरित करें


263

मेरे पास एक सर्वर है जिसे मैं नीचे ले जा रहा हूं। केवल एक चीज जो मैंने प्रवास के लिए छोड़ी है, वह मेरा भंडार है। यह सर्वर मेरी एक परियोजना के लिए मूल (मास्टर) के रूप में सूचीबद्ध है। इतिहास रखने के लिए भंडार को स्थानांतरित करने का उचित तरीका क्या है।


रिपॉजिटरी के बारे में सभी जानकारी (ओर्गिन, ट्रंक, इत्यादि) '.itit' नामक एक फ़ोल्डर में संग्रहीत की जाती है, जहाँ आप रिपॉजिटरी को आरम्भ कर रहे हैं। इसलिए, आपको यहां
मानस उप्पल

1
बस git config Remote.origin.url newurl देखें stackoverflow.com/questions/3011402/…
नील्स

1
यदि आप अपने रेपो को माइग्रेट करना चाहते हैं और सभी शाखाएं स्वीकृत उत्तर के बजाय जेज्विनर या रॉबर्टो द्वारा उत्तर का उपयोग करती हैं।
14

जवाबों:


246

नया रेपो स्थान जोड़ने के लिए,

git remote add new_repo_name new_repo_url

फिर सामग्री को नए स्थान पर धकेलें

git push new_repo_name master

अंत में पुराने को हटा दें

git remote rm origin

उसके बाद आप कर सकते हैं कि बोल्डलन ने क्या कहा और new_repo_name को मूल में बदलने के लिए .it / config फाइल को संपादित करें। यदि आप मूल (मूल दूरस्थ रिपॉजिटरी) को नहीं हटाते हैं, तो आप बस नए रेपो में परिवर्तन को धकेल सकते हैं

git push new_repo_name master

8
क्या यह केवल पुरानी रिपॉजिटरी से नई एक एकल शाखा की नकल करेगा?
एंड्रयू ग्रिम

34
सभी शाखाओं को स्थानांतरित करने का क्या उपाय है?
एमएम

49
आपको एक बार में सभी शाखाओं को पुश करने में सक्षम होना चाहिए git push -u new_repo_name --all
rmarscher

10
सभी शाखाओं का माइग्रेशन stackoverflow.com/a/18336145/923599
jzwiener

10
Git-config फ़ाइल को संपादित करने के बजाय, इस कमांड ने मेरे लिए काम किया:git remote rename new_repo_name origin
सलीम

210

यदि आप सभी शाखाओं और टैगों को माइग्रेट करना चाहते हैं, तो आपको निम्नलिखित कमांड का उपयोग करना चाहिए:

git clone --mirror [oldUrl]

सभी शाखाओं के साथ पुराने रेपो को क्लोन करने के लिए

cd the_repo
git remote add remoteName newRepoUrl

एक नया रिमोट सेटअप करने के लिए

git push -f --tags remoteName refs/heads/*:refs/heads/*

रेफरी / प्रमुखों के तहत सभी रिफ को आगे बढ़ाने के लिए (जो शायद आप चाहते हैं)


5
गिट शिकायत कर रहे थे कि --tagsऔर refs/heads/*:refs/heads/*संगत नहीं हैं --mirrorstackoverflow.com/a/26552740/1484831 ने अच्छा काम किया।
अवीजीत

3
मैंने इसका इस्तेमाल किया और इसने मेरे लिए काम किया। संभवतः निर्वाचित उत्तर होना चाहिए। ध्यान दें कि स्थानीय रूप से आपको मिलने वाला "कोड" मेटा डेटा पर भारी पड़ता है, जो कुछ गलत हो जाने पर इसे newbies के लिए अस्पष्ट बना देता है।
निक

3
यह स्वीकृत उत्तर होना चाहिए। अन्य समाधानों की तुलना में बहुत बेहतर
ट्रैविस ग्रिग्स

15
मैंने अपने नए रिमोट रिपॉजिटरी की सभी शाखाओं के साथ उपसर्ग समाप्त refs/heads/refs/headsकर लिया, git push -f --tags remoteName refs/heads/*:refs/heads/*इसलिए मैंने इसका उपयोग कियाgit push remoteName --mirror
dumbledad

1
pushभी समर्थन करता है --mirrorgit clone --mirror; cd repo; git push --mirror new_remoteचाल करना चाहिए
knittl

143

यह मेरे लिए त्रुटिपूर्ण है

git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin

मुझे हालांकि यह उल्लेख करना है कि यह आपके वर्तमान रेपो का दर्पण बनाता है और फिर नए स्थान पर धकेलता है। इसलिए, बड़े रेपो या धीमे कनेक्शन के लिए कुछ समय लग सकता है


15
*** यह एक ***
पॉल लॉकवुड

1
यह अच्छा समाधान है git दूरस्थ सेट-url उत्पत्ति <URL to my NEW repo location> (नए सर्वर / स्थान पर पुराने मूल rsync'ed होने के बाद)
टोनी होम्स I Saun

2
यह एक महान जागता है। कोई भ्रामक कई
उपाय

16
पसंद करते हैं git push --mirror originअधिक -f
इदियाकापी

78

इसे कॉपी करें। यह वास्तव में इतना आसान है। :)

क्लाइंट पक्ष पर, नए URL के लिए आवश्यक के रूप में अपने रीमोट को इंगित करने के लिए ग्राहक के स्थानीय रेपो में सिर्फ .it / config संपादित करें।


6
आप बस इसे क्लोन भी कर सकते हैं। इसके अलावा, .it / config फाइल को सीधे संपादित करने के बजाय, आप git रिमोट आरएम मूल का उपयोग कर सकते हैं; git रिमोट ऐड ओरिजिन <नया रिपॉजिटरी>।
ईबेनेट

4
रिमोट को रैंप करना, कॉन्फ़िगरेशन के उस भाग के तहत किसी भी कॉन्फ़िगरेशन को खो देगा - और बिना किसी अतिरिक्त कदम के इसे क्लोन करना ट्रंक के अलावा अन्य शाखाओं को खो देगा। इन समस्याओं से निपटना संभव है, लेकिन, वास्तव में - बस इसे rsync करें।
बोल्डन

1
कार्य करने के लिए केवल git का उपयोग करने से क्या हल होता है? rsync को अतिरिक्त प्रशासनिक हुप्स की आवश्यकता होती है जो मुश्किल से कूदते हैं
एमएमबी

2
यह भी उदाहरण के लिए हुक और अन्य विन्यास को संरक्षित करता है, इसलिए मैं इसे शुद्ध git समाधानों के लिए पसंद करता
हूं

65

यह कुछ अन्य उत्तरों में भागों में किया गया है।

git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new

6
यह वास्तव में, सबसे पूर्ण, सीधे-आगे का उत्तर है।
लॉरेंस डोल

3
--mirrorधक्का में बहुत महत्वपूर्ण है: यह सही जवाब होना चाहिए
पाओलोका

जब आप नए सर्वर पर नए रिपॉजिटरी को इनिशियलाइज़ करते हैं, तो नंगे init करना याद रखें या पुश सफल नहीं होगा:git init --bare
marco

35

मैं सिर्फ़ निर्देशों की सूची का पालन करने के लिए दूसरों द्वारा कही गई बातों को दोहरा रहा हूं।

  1. रिपॉजिटरी को स्थानांतरित करें: नए सर्वर पर बस cdउस मूल निर्देशिका में लॉगिन करें, जहां आप अब रिपॉजिटरी को रखना चाहते हैं, और rsyncपुराने सर्वर से कॉपी करने के लिए उपयोग करें:

    new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
    
  2. क्लाइंट को नए रिपॉजिटरी की ओर इंगित करें: अब रिपॉजिटरी का उपयोग करने वाले प्रत्येक क्लाइंट पर, बस पुराने मूल को पॉइंटर को हटा दें, और एक को नए में जोड़ें।

    client> git remote rm origin
    client> git remote add origin user@new.server.com:path/to/repository.git
    

सरल और प्रभावी। यदि आप सर्वर के बीच ट्रैफ़िक को सीमित करना चाहते हैं, तो आप फ्लैग --bwlimit = XXX को जोड़ सकते हैं, जहां XXX प्रति सेकंड KBytes में बैंडविड्थ के बराबर होता है।
ग्रेग ग्लनर

7
हटाने और जोड़ने की तुलना में थोड़ा बेहतर:git remote set-url origin user@new.server.com:path/to/repository.git
क्रिस केएल

Git + capistrano का उपयोग करते हुए सर्वर पर तैनाती करने वालों के लिए, ध्यान दें कि मुझे 2 स्थानों में सेट-यूआरएल मूल का उपयोग करना था: स्थानीयहोस्ट पर और सर्वर पर कैश्ड-कॉपी पर।
अनंदविले

15

GitHub की इस रेसिपी पर नज़र डालें: https://help.github.com/articles/importing-an-external-git-repository

मैंने खोज करने से पहले कई तरीकों की कोशिश की git push --mirror

एक जादू की तरह काम किया!


तो बुनियादी तौर पर git clone --mirror ..., git remote add ...,git push --mirror ...
mwfearnley

10

मैंने BitBucket के निर्देशों का पालन करते हुए अपनी सभी शाखाओं के साथ एक रेपो स्थानांतरित किया। यहाँ #चरित्र के बाद स्पष्टीकरण के साथ कदम आते हैं :

cd path/to/local/repo
git remote remove origin # to get rid of the old setting, this was not in the BitBucket instructions
git remote add origin ssh://git@bitbucket.org/<username>/<newrepo> # modify URL as needed
git push -u origin --all # pushes _ALL_ branches in one go
git push -u origin --tags # pushes _ALL_ tags in one go

मेरे लिए अच्छी तरह से काम किया।


8

कृपया चरणों का पालन करें:

  • git रिमोट नया-मूल जोड़ते हैं
  • git पुश - बिलकुल नया-मूल
  • git push --tags नया-मूल
  • git सुदूर rm उत्पत्ति
  • git दूरस्थ नाम नया-मूल उत्पत्ति

5

यह इस उत्तर पर एक भिन्नता है , वर्तमान में gitlab द्वारा एक सर्वर से दूसरे सर्वर पर git रिपॉजिटरी को "माइग्रेट" करने का सुझाव दिया गया है ।

  1. चलिए हम मान लेते हैं कि आपके पुराने प्रोजेक्ट को फोल्डर existing_repoमें स्टोर किया जाता है existing_repo

  2. अपने नए सर्वर पर एक रेपो बनाएं। हम मान लेंगे कि उस नए प्रोजेक्ट का यूआरएल क्या हैgit@newserver:newproject.git

  3. एक कमांड-लाइन इंटरफ़ेस खोलें, और निम्नलिखित दर्ज करें:

    cd existing_repo
    git remote rename origin old-origin
    git remote add origin git@newserver:newproject.git
    git push -u origin --all
    git push -u origin --tags
    

इस दृष्टिकोण का लाभ यह है कि आप उस शाखा को नहीं हटाते हैं जो आपके पुराने सर्वर से मेल खाती है।


4

आप निम्न आदेश का उपयोग कर सकते हैं:

git remote set-url --push origin new_repo_url

Http://gitref.org/remotes/ से उदाहरण

$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/github/git-reference.git (push)
$ git remote set-url --push origin git://github.com/pjhyett/hw.git
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/pjhyett/hw.git (push)

4

के रूप में सरल होना चाहिए:

git remote set-url origin git://new.url.here

इस तरह आप originअपने नए रेपो के लिए नाम रखते हैं - फिर नए रेपो को पुराने के रूप में अन्य उत्तरों में विस्तृत करें। मान लें कि आप अकेले काम करते हैं और आपके पास एक स्थानीय रेपो है जिसमें आप अपने सभी क्रॉफ्ट के साथ दर्पण करना चाहते हैं, तो आप भी (अपने स्थानीय रेपो के अंदर से) हो सकते हैं

git push origin --mirror # origin points to your new repo

लेकिन देखते हैं कि "रिप पुश - मिरर" मेरी रिपॉजिटरी का समर्थन करने के लिए पर्याप्त है? (सभी --mirrorएक बार उपयोग नहीं करते हैं )।


3

इन निर्देशों का पालन करें यदि आप पुराने से नए रेपो में सभी कमिट और शाखाएं रखना चाहते हैं

git clone --bare <old-repo-url>
cd <old-repo-directory>
git push --mirror <new-repo-url>

1

आप सभी इतिहास के साथ रेपो की नकल करने के लिए git-copy का उपयोग कर सकते हैं ।

git copy http://a.com/old.git http://a.com/new.git

1

यदि आप एक मूल से दूसरे स्थान पर जाना चाहते हैं और अपने स्थानीय मशीन पर अपने वर्तमान मूल का बैकअप भी रखते हैं, तो आप इन चरणों का उपयोग कर सकते हैं:

  1. पहले स्थानीय रूप से (गिट) फ़ोल्डर पर जाएं जिसे आप स्थानांतरित करना चाहते हैं
  2. नया रिपॉजिटरी ऑनलाइन बनाएं यह कदम एक रिपॉजिटरी बनाता है जहां हम कोड को पुश कर सकते हैं

अब फोल्डर में करें

git remote get-url origin

उपरोक्त कमांड वर्तमान दूरस्थ मूल url देता है, मूल को अंतिम चरण में वापस सेट करने के लिए उपयोगी है

git remote set-url origin git@github.newlocation:folder/newrepo.git

उपरोक्त कमांड दूरस्थ स्थान को नए स्थान पर सेट करता है

git push --set-upstream origin develop

उपर्युक्त आदेश वर्तमान सक्रिय स्थानीय शाखा को दूरस्थ रूप से ब्रांचनाम विकास के साथ धकेलता है। बेशक यह सभी इतिहास को संरक्षित करता है क्योंकि जीआईटी के साथ सभी इतिहास को भी धक्का दिया जाता है।

git remote set-url origin <original old origin>

उपरोक्त आदेश आपके वर्तमान मूल में दूरस्थ मूल को वापस सेट करता है: आप ऐसा इसलिए चाहते हैं क्योंकि आप अपने मौजूदा फ़ोल्डर में हैं और आप संभवतः अपने वर्तमान स्थानीय फ़ोल्डर का नाम नए फ़ोल्डर के साथ नहीं जोड़ना चाहते हैं जिसे आप रेपो क्लोन करने के लिए बनाने जा रहे हैं। आपने अभी धक्का दिया।

उम्मीद है की यह मदद करेगा,


0

अगर आप एक सर्वर से एक नए नंबर पर एक # बिट रिपॉजिटरी को माइग्रेट करना चाहते हैं तो आप इसे इस तरह कर सकते हैं:

git clone OLD_REPOSITORY_PATH
cd OLD_REPOSITORY_DIR
git remote add NEW_REPOSITORY_ALIAS  NEW_REPOSITORY_PATH
#check out all remote branches 
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
git push --mirror NEW_REPOSITORY_PATH
git push NEW_REPOSITORY_ALIAS --tags

पुरानी रिपॉजिटरी से सभी दूरस्थ शाखाओं और टैग को नए रिपॉजिटरी में कॉपी किया जाएगा।

इस कमांड को अकेले चलाना:

git push NEW_REPOSITORY_ALIAS

नई रिपॉजिटरी में केवल एक मास्टर ब्रांच (केवल ट्रैकिंग ब्रांच) की नकल कर सकते हैं।

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