2014-08-28 8 views
63

मैंने गिटहब पर एक फोर्क बनाया है (चलो इसे 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 के बजाय मैं अपने कांटा को कैसे दबा सकता हूं, जिसके पास मेरे पास लेखन पहुंच नहीं है?

उत्तर

89

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

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

फिर

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

इसलिए, यदि आप अपने क्लोन की config को संशोधित नहीं, 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 
    

    तो फिर तुम और अगर आप Git बताने के लिए कि git push अब से myrepo बजाय origin करने के लिए धक्का चाहिए चाहते हैं, आप

    चलाना चाहिए

    git push myrepo master 
    

    चलाकर अपने कांटा करने के लिए अपने स्थानीय master शाखा पुश करने के लिए सक्षम होना चाहिए

    git push -u myrepo master 
    
बजाय

+0

-u' धक्का'git होगा भी'git pull' के डिफ़ॉल्ट व्यवहार को बदलने के लिए अपने परिवर्तनों को पुश करने के लिए सक्षम हो जाएगा ? – benroth

+0

हाँ, यह है, तो बजाय कर रही है "-u धक्का" की होगी, तो आप pushDefault विकल्प का उपयोग करना चाहिए: Git config --add remote.origin.pushdefault myrepo और यह केवल धक्का प्रभावित करेगा, और सभी मौजूदा एक नया पर लागू होता है शाखाओं। –

+1

क्या गिट रिमोट सेट-यूआरएल मूल http: // github.com/myname/reponame' और फिर 'गिट पुश मूल mybranch' था। काम किया! धन्यवाद! – Willmore

4

ठीक है, मैं अंत में मेरी Git कॉन्फ़िग फ़ाइल संपादित:

$ 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 

एक आकर्षण की तरह काम किया।

या, Thiago F Macedo answer करने के लिए धन्यवाद:

git remote set-url origin https://[email protected]/user/repo.git 
-4

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

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

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

+0

वे कांटा क्लोन करने के लिए नहीं कह रहे हैं। कृपया, प्रश्न फिर से पढ़ें। –

+0

@ अहमदवाइज़ पोस्टर से उद्धरण: "मुझे पता है कि मैंने गलती की है: मुझे ऑररेपो की बजाय अपने कांटा को क्लोन करना चाहिए था, लेकिन अब इसके लिए बहुत देर हो चुकी है। मैं मूल/ओरीरेपो की बजाय अपने कांटा को कैसे दबा सकता हूं, जिसे मैं लिखने के लिए उपयोग नहीं है? "। मैंने समस्या की ओर इशारा किया। आपको फिर से प्रश्न पढ़ना चाहिए। – LeonF

6

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

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

यह इस

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

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

उसके बाद, बस

git push 

और आप अपने कांटा :)

+0

मैंने जो जवाब स्वीकार कर लिया है वह पहले से ही कहता है, और मैं अपने स्वयं के उत्तर के अंत में इस समाधान का भी उल्लेख करता हूं ... मुझे खेद है लेकिन आपका उत्तर कुछ नया नहीं कहता .. –

+4

मेरा उत्तर बिंदु पर अधिक है। कभी-कभी लोगों को सिर्फ बिंदु के जवाब की आवश्यकता होती है। अधिक विस्तृत संस्करण के लिए वे हमेशा आपके उत्तर की तलाश कर सकते हैं। मुझे लगता है कि स्पष्टीकरण की कोई आवश्यकता नहीं है। –

+0

ठीक है, आपका विचार मुझे विश्वास दिलाता है। अपने उत्तर को ऊपर उठाने के लिए विचार किया। अहमद धन्यवाद –

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

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