मूल रेपो के क्लोन से मैं अपने कांटे को कैसे धकेल सकता हूं?


123

मैंने GitHub पर myrepoएक अन्य रिपॉजिटरी (चलो इसे कॉल करें ) का एक कांटा बनाया (चलो इसे कॉल करें orirepo)। बाद में, मैंने क्लोन किया orirepo

git clone https://github.com/original/orirepo.git

मैंने लगभग 20 फ़ाइलों को संशोधित किया, फिर मैंने अपने बदलाव का मंचन किया और एक कमिट किया

git add
git commit

हालांकि, जब मैंने धक्का देने की कोशिश की

git push

मुझे यह त्रुटि मिली:

remote: Permission to original/orirepo.git denied to mylogin.
fatal: unable to access 'https://github.com/original/orirepo.git/': The requested URL returned error: 403

मुझे पता है कि मैंने एक गलती की है: मुझे अपने कांटे की बजाय क्लोन करना चाहिए था orirepo, लेकिन अब इसके लिए बहुत देर हो चुकी है। मैं अपने कांटे पर कैसे धकेल सकता था origin/orirepo, जिसकी मुझे पहुंच नहीं है?

जवाबों:


187

डिफ़ॉल्ट रूप से, जब आप एक रिपॉजिटरी क्लोन करते हैं

  • उस पर रहता है https://github.com/original/orirepo.git,
  • जिसकी वर्तमान शाखा कहा जाता है master,

फिर

  • जिसके परिणामस्वरूप क्लोन का स्थानीय विन्यास केवल एक रिमोट कॉल करता है origin, जो आपके द्वारा क्लोन किए गए रिपॉजिटरी के URL से जुड़ा होता है;
  • masterआपके क्लोन में स्थानीय शाखा को ट्रैक करने के लिए सेट किया गया हैorigin/master

इसलिए, यदि आप अपने क्लोन के विन्यास को संशोधित नहीं करते हैं, तो Git व्याख्या करता है

git push

जैसा

git push origin master:origin/master

दूसरे शब्दों में, git pushअपनी स्थानीय masterशाखा को उस masterशाखा पर धकेलने का प्रयास करता है जो दूरस्थ रिपॉजिटरी (आपके क्लोन द्वारा ज्ञात origin) पर रहती है। हालाँकि, आपको ऐसा करने की अनुमति नहीं है, क्योंकि आपके पास उस दूरस्थ रिपॉजिटरी तक पहुंच नहीं है।

आपको

  1. या तो originरिमोट को अपने कांटे के साथ जुड़े रहने के लिए, रनिंग द्वारा फिर से परिभाषित करें

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. या, यदि आप originरिमोट की मूल परिभाषा को संरक्षित करना चाहते हैं, तो एक नया रिमोट परिभाषित करें (जिसे myrepoयहां कहा गया है) जो आपके कांटे से जुड़ा है:

    git remote add myrepo https://github.com/RemiB/myrepo.git
    

    तब आपको masterदौड़कर अपनी स्थानीय शाखा को अपने कांटे पर धकेलने में सक्षम होना चाहिए

    git push myrepo master
    

    और अगर आप Git को बताना चाहते हैं कि अब से git pushधक्का देने के myrepoबजाय originआपको दौड़ना चाहिए

    git push -u myrepo master
    

बजाय।


क्या behaviorगित पुश -´´ भी ´git पुल-के डिफ़ॉल्ट व्यवहार को बदल देगा?
बेन्थ

1
हाँ यह होगा, इसलिए "पुश -यू" करने के बजाय, आपको पुशडिफॉल्ट विकल्प का उपयोग करना चाहिए: git config --add Remote.origin.pushdefault myrepo और यह केवल पुश करने को प्रभावित करेगा, और सभी मौजूदा नई शाखाओं पर लागू होता है।
मारियस के

1
किया git remote set-url origin http://github.com/myname/reponameऔर फिर git push origin mybranch। काम किया! धन्यवाद!
डेवलपर मारियस ėilėnas

1
यदि ऐड रिमोट का उपयोग किया जाता है, तो यह पुल को कैसे प्रभावित करता है? यह कहाँ से खींचता है? यह 2 रेपो के बीच भविष्य के विलय को कैसे संभालता है?
कोक हाउ तेह

1
@KokHowTeh एक अन्य रिमोट जोड़ने से यह प्रभावित नहीं होता है कि कौन सी स्थानीय शाखा ट्रैक (यदि कोई हो)। हालाँकि, git push -u myrepo masterआपके स्थानीय मास्टर को ट्रैक करना शुरू कर देता है myrepo/master। यदि, उसके बाद, आप git pullमास्टर पर चलते हैं , तो आप से खींच लेंगे myrepo, और अब से नहीं origin
जुब।

18

इसलिए, आपने किसी के रेपो पर बदलाव किया और फिर महसूस किया कि आप उस रेपो को धक्का नहीं दे सकते, लेकिन आप अपने खुद के टॉस्क को धक्का दे सकते हैं। तो, आप आगे बढ़े और मूल रेपो को त्याग दिया।

आपको बस इतना करना है कि अपने फोर्क्ड रेपो के URL के साथ अपने स्थानीय क्लोन में मूल URL को स्वैप करना है।

इसको ऐसे करो

git remote set-url origin https://github.com/fork/name.git

https://github.com/fork/name.gitमूल रेपो से आपके कांटे का URL कहां है।

उसके बाद, बस

git push

और आप अपने बदलावों को अपने कांटे पर धकेल सकते हैं :)


एक आकर्षण की तरह काम किया, धन्यवाद!
राफेल Ruales

7

ठीक है मैंने आखिरकार अपनी git config फाइल संपादित की:

$ nano .git/config

बदल रहा है:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<origin-project>/<origin-repo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

सेवा

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<mylogin>/<myrepo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

फिर,

$ git push

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

या, थियागो एफ मैसेडोनो जवाब के लिए धन्यवाद :

git remote set-url origin https://yourusername@github.com/user/repo.git

-5

आपको पहले अपने खाते में फोर्क्ड रेपो को क्लोन करना चाहिए।

git clone https://github.com/your_account/repo.git

आपके पास इस रेपो को धकेलने की अनुमति है। यदि आप अपने कोड को मूल रेपो में धकेलना चाहते हैं, तो आप एक पुल अनुरोध जारी कर सकते हैं।


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