मौजूदा रेपो को एक नए और अलग रिमोट रेपो सर्वर पर धकेल दें?


494

मान लीजिए कि मेरे पास git.fedorahosted.org पर एक भंडार है और मैं इसे अपने खाते में जीथब पर अपने खाते में क्लोन करना चाहता हूं ताकि फेडोराहॉस्ट पर अधिक "आधिकारिक" रेपो से अलग हो। शुरू में उस ओवर को कॉपी करने के लिए क्या कदम उठाए जाएंगे? गितुब के भीतर यह अच्छा "कांटा" बटन है, लेकिन मैं स्पष्ट कारणों के लिए इसका उपयोग नहीं कर सकता।

और मैं महाप्रलयकारी रेपो में परिवर्तन को गीथूब में कैसे ट्रैक करूंगा?

जवाबों:


750
  1. गितुब में एक नया रेपो बनाएँ।
  2. फ़ेडराहॉस्ट से रेपो को अपने स्थानीय मशीन पर क्लोन करें।
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master

अब आप किसी अन्य गीथूब रेपो की तरह ही इसके साथ काम कर सकते हैं। अपस्ट्रीम से पैच में खींचने के लिए, बस चलाएं git pull upstream master && git push origin master


14
मूल उत्पत्ति का नाम बदलने का कोई कारण नहीं है, बस नए प्ले-ग्राउंड को कुछ और कहें।
tacaswell 3

34
@tcaswell तकनीकी रूप से नहीं, लेकिन यह एक मजबूत सम्मेलन है जो originविहित दूरस्थ स्थान की ओर इशारा करता है । इस मामले में, गिथूब स्थान संभवतः विहित होगा।
troelskn

1
मैं 'अपस्ट्रीम' को विहित स्थान मानूंगा, लेकिन मुझे लगता है कि यह बालों को विभाजित करने के लिए शुरू हुआ है।
tacaswell 15

3
शायद मुझे एक अलग प्रश्न पोस्ट करना चाहिए लेकिन मुझे लगता है कि आप लोग चर्चा कर रहे हैं कि मुझे क्या चाहिए। मैं एक नया रिमोट जोड़ना चाहता हूं, मौजूदा को प्रतिस्थापित नहीं करता, इसलिए मैं पुराने भंडार से खींचना जारी रख सकता हूं, लेकिन नए में कोई भी बदलाव ला सकता हूं।
ThatAintWorking 20

13
@ThatAintWorking आपको संभवतः एक नया प्रश्न खोलना चाहिए, लेकिन संक्षेप में - आप कमांड के साथ किसी भी संख्या में रीमोट जोड़ सकते हैं git remote add। फिर आप रिमोट को स्पष्ट रूप से बताते हुए उनमें से एक को धक्का दे सकते हैं git push। जैसे रिमोट पर git push foobar masterकरंट ब्रांच को पुश करने के लिए । masterfoobar
troelskn

108

इस प्रश्न पर एक हटाए गए उत्तर है जिसमें एक उपयोगी लिंक था: https://help.github.com/articles/duplicating-a-repository

जिस्ट है

0. create the new empty repository (say, on github)
1. make a bare clone of the repository in some temporary location
2. change to the temporary location
3. perform a mirror-push to the new repository
4. change to another location and delete the temporary location

ओपी का उदाहरण:

अपने स्थानीय मशीन पर

$ cd $HOME
$ git clone --bare https://git.fedorahosted.org/the/path/to/my_repo.git
$ cd my_repo.git
$ git push --mirror https://github.com/my_username/my_repo.git
$ cd ..
$ rm -rf my_repo.git

5
नंगे क्लोन और दर्पण को केवल दूसरे रिमोट से जोड़ने और धकेलने पर क्या लाभ होता है? क्या यह है कि सभी शाखाओं को धक्का दिया जाएगा और न केवल वर्तमान शाखा को? (यदि ऐसा है, तो यह स्वीकार किए गए उत्तर की एक सीमा की तरह लगता है जिसे नोट किया जाना चाहिए।)
योयो

3
यह वही जानकारी थी जिसकी मैं तलाश कर रहा था, Thebare / --mirror आमतौर पर लोग क्या प्रदर्शन करना चाहते हैं! यह एक महत्वपूर्ण उत्तर है! धन्यवाद
claf

1
महान! निश्चित रूप से विषय प्रश्न पर सबसे सही उत्तर। धन्यवाद! अगर मैं इसे इस तरह नहीं करता, तो मुझे हमेशा मिलता हैerror: failed to push some refs to 'https://github.com/username/testrep.git'
डेनिस बेबरीकिन

45

अपने मौजूदा रेपो को अलग-अलग करने के लिए, आपको निम्न की आवश्यकता है:

  1. पहले मूल रेपो पर क्लोन करें।

    git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
    
  2. अपने नए भंडार में क्लोन किए गए स्रोतों को पुश करें:

    cd rhq
    git push https://github.com/user/example master:master
    

आप शाखा master:masterमें बदल सकते हैं source:destination


यदि आप विशिष्ट प्रतिबद्ध (शाखा) को आगे बढ़ाना चाहते हैं, तो करें:

  1. मूल रेपो पर, एक नई शाखा बनाएं और देखें:

    git checkout -b new_branch
    
  2. उस बिंदु पर चुनें और रीसेट करें जिसे आप शुरू करना चाहते हैं:

    git log # Find the interesting hash
    git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
    

    वैकल्पिक रूप git cherry-pickसे मौजूदा HEAD में संलग्न करने के लिए प्रतिबद्ध का चयन करें ।

  3. फिर अपने नए रेपो में धकेलें:

    git push https://github.com/user/example new_branch:master
    

    यदि आप रिबास कर रहे हैं, तो -fबल पुश के लिए उपयोग करें (अनुशंसित नहीं)। git reflogपरिवर्तनों का इतिहास देखने के लिए चलाएँ ।


2
git push ... old_branch_name:new_branch_nameआपको नई रिपॉजिटरी में मुख्य शाखा के रूप में पुरानी रिपॉजिटरी से एक सुविधा शाखा को पुश करने की अनुमति देता है। उपयोगी!
गोरंजन

यह मेरे लिए सबसे आसान तरीका था।
एडम

15

क्या आप वास्तव में अपनी स्थानीय रिपॉजिटरी (इसकी स्थानीय शाखाओं, आदि के साथ) को नए रिमोट पर धकेलना चाहते हैं या क्या आप वास्तव में पुराने रिमोट (इसकी सभी शाखाओं, टैग्स आदि) को नए रिमोट पर मिरर करना चाहते हैं? यदि उत्तरार्द्ध यहाँ एक महान ब्लॉग है, तो ठीक प्रकार से एक गिट रिपॉजिटरी को कैसे दिखाया जाए

मैं आपको कुछ महत्वपूर्ण विवरणों के लिए ब्लॉग पढ़ने के लिए दृढ़ता से प्रोत्साहित करता हूं, लेकिन संक्षिप्त संस्करण यह है:

एक नई निर्देशिका में इन कमांडों को चलाएं:

git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git

मुझे लगता है कि यह लिंक है: blog.plataformatec.com.br/2013/05/…
डेविड

11

यह कोशिश करें कि एक पूर्ण गिट रिपॉजिटरी को कैसे स्थानांतरित किया जाए

  1. का उपयोग कर अस्थायी निर्देशिका निर्देशिका में एक स्थानीय भंडार बनाएँ:

    git क्लोन टेम्प-डायर

  2. अस्थायी-निर्देशिका निर्देशिका में जाएं।

  3. ORI में विभिन्न शाखाओं की सूची देखने के लिए:

    git branch -a
    
  4. उन सभी शाखाओं की जाँच करें जिन्हें आप ORI से NEW में कॉपी करना चाहते हैं:

    git checkout branch-name
    
  5. अब ORI से सभी टैग प्राप्त करें:

    git fetch --tags
    
  6. अगला चरण करने से पहले अपने स्थानीय टैग और शाखाओं को निम्न कमांड का उपयोग करके जांचना सुनिश्चित करें:

    git tag
    
    
    git branch -a
    
  7. अब ORI रिपॉजिटरी के लिंक को निम्न कमांड से क्लियर करें:

    git remote rm origin
    
  8. अब निम्नलिखित कमांड का उपयोग करके अपने स्थानीय रिपॉजिटरी को अपने नए बनाए गए नए रिपॉजिटरी से लिंक करें:

    git remote add origin <url to NEW repo>
    
  9. अब अपनी सभी शाखाओं और टैगों को इन कमांड्स के साथ धकेलें:

    git push origin --all
    
    
    git push --tags
    
  10. अब आपके पास अपने ORI रेपो से पूरी कॉपी है।


9

मुझे सेट-यूआरएल का उपयोग करके एक समाधान मिला जो संक्षिप्त और समझने में काफी आसान है :

  1. गितुब में एक नया रेपो बनाएँ
  2. cd अपने स्थानीय मशीन पर मौजूदा भंडार में (यदि आपने इसे अभी तक क्लोन नहीं किया है, तो पहले ऐसा करें)
  3. git remote set-url origin https://github.com/user/example.git
  4. git push -u origin master

9

यदि आपके पास मौजूदा गिट रिपॉजिटरी है:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.com/newproject
git push -u origin --all
git push -u origin --tags

1
बस स्पष्ट करने के लिए, --all सभी शाखाओं को धक्का देगा
गिलकोल

7

इस कमांड के साथ GIT रेपो URL को बदलकर बस नए रेपो को इंगित करें:

git remote set-url origin [new repo URL]

उदाहरण: git remote set-url origin git@bitbucket.org:Batman/batmanRepoName.git

अब, धक्का और खींच नए REPO से जुड़े हुए हैं।

फिर सामान्य रूप से धक्का दें:

git push -u origin master

2

मेरी भी यही समस्या थी।

मेरे मामले में, चूंकि मेरी स्थानीय मशीन में मूल भंडार है, इसलिए मैंने किसी नए फ़ोल्डर में एक छिपी हुई फ़ाइल (। अगस्त, .ignignore) के बिना प्रतिलिपि बनाई है।

अंत में मैंने नए निर्मित फ़ोल्डर में .gitignore फ़ाइल जोड़ी है।

फिर मैंने स्थानीय पथ (मेरे मामले में GitHub डेस्कटॉप का उपयोग करके) से नया रिपॉजिटरी बनाया और जोड़ा है।


1

यहाँ एक मैनुअल तरीका है git remote set-url origin [new repo URL]:

  1. भंडार का क्लोन: git clone <old remote>
  2. एक GitHub रिपॉजिटरी बनाएँ
  3. खुला हुआ <repository>/.git/config

    $ git config -e
    
    [core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
    [remote "origin"]
        url = <old remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    

    और रिमोट बदलें (url विकल्प)

    [remote "origin"]
        url = <new remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    
  4. GitHub के भंडार को पुश करें: git push

आप दोनों / कई रीमोट का उपयोग भी कर सकते हैं ।


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