जीथब से पठनीय क्लोन क्लोन को एक कांटे में कैसे परिवर्तित करें


79

समय-समय पर मैं इस मुद्दे का सामना करता हूं।

मान लीजिए कि मैंने रेल के स्रोत कोड को पढ़ने के लिए अनुसरण किया क्योंकि मैं कुछ मुद्दों पर चल रहा हूं।

git clone git://github.com/rails/rails.git

अनुसंधान के दौरान मैंने कुछ परीक्षण किया और अब मेरे पास एक फिक्स है जो मैं चाहता हूं कि रेल टीम को एक नज़र रखना चाहिए। मैं अपने परिवर्तनों को रेल के कांटे के संस्करण में कैसे धकेलूं।

याद रखें जब मैंने क्लोन किया था, तो मैं एक कांटेक्टेड संस्करण नहीं बल्कि केवल-पढ़ने वाला संस्करण क्लोन कर रहा था।

ऐसा नहीं है कि मैं फोर्किंग का विरोधी हूं। यह सिर्फ इतना है कि कभी-कभी मुझे लगता है कि मैं बस ब्राउज़ करने जा रहा हूं तो मैं कुछ जोड़ना चाहता हूं।


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

जवाबों:


112

जब आप एक रेपो क्लोन करते हैं, तो यह स्वचालित रूप से एक रिमोट सेट originकरता है, जिसे रेपो को संदर्भित करता है जिसे आपने क्लोन किया है। यह अब अपस्ट्रीम रेल परियोजना की ओर इशारा कर रहा है, लेकिन आपको अपनी खुद की कांटा बनाने की आवश्यकता है जिसे आप धक्का दे सकते हैं, और फिर एक रिमोट सेट करें जो वहां इंगित करता है ताकि आप इसे धक्का दे सकें।

पहला कदम अपस्ट्रीम GitHub प्रोजेक्ट पेज पर "Fork" बटन पर क्लिक करना है ( फोर्किंग पर GitHub निर्देशों से चित्र ):

गिटहब कांटा बटन

एक बार जब आप ऐसा कर लेते हैं, तो उस रेपो के लिए URL खोजें और कॉपी करें। सुनिश्चित करें कि आप SSH URL का उपयोग करते हैं, जिसने एक्सेस पढ़ा और लिखा है। यह कुछ ऐसा होना चाहिए git@github.com:nadal/rails.git, जैसे कि आपका उपयोगकर्ता नाम है nadal

अब आप रिमोट बना सकते हैं, जो Git को दूरस्थ रिपॉजिटरी का ट्रैक रखने की अनुमति देता है, जिससे आप इसे खींच सकते हैं या आपके पास पहुंच के आधार पर इसे आगे बढ़ा सकते हैं। आप या तो उस जगह से चुन सकते हैं originजिसे आप धक्का देंगे (जो कि कितने लोगों ने इसे स्थापित किया है), या originऊपर की ओर इशारा करते हुए छोड़ दें और इसके बजाय एक नया रिमोट बनाएं। मैं दिखाता हूँ कि पहला सेटअप कैसे करना है; दूसरे का पता लगाना आसान होना चाहिए।

परिवर्तन करने के लिए originGitHub पर अपने कांटा करने के लिए बात करने के लिए, तो आप शायद नदी के ऊपर शाखा रखने के लिए कहीं न कहीं आसपास है, इसलिए करने के लिए इसका नाम बदलना चाहते हैं upstream:

git remote rename origin upstream

अब अपने कांटे की ओर एक नया रिमोट बनाएं:

git remote add -f origin git@github.com:nadal/rails.git

और अब आपको अपने नए कांटे को आगे बढ़ाने में सक्षम होना चाहिए:

git push origin master

एक बार जब आप GitHub में आए बदलावों से खुश हो जाते हैं, और रेल टीम के किसी व्यक्ति को इसे देखना पसंद करेंगे, तो आपके पास दो विकल्प होंगे। एक GitHub का उपयोग करके एक पुल अनुरोध भेजने के लिए है; ऐसा करने के लिए डॉक्स वहां देखें। यदि आपके पास केवल एक या कुछ छोटे पैच हैं, तो, रेल्स टीम पसंद करेगी कि आप एक लाइटहाउस टिकट बनाएं और आपको पैच संलग्न करें; निर्देश देखेंअधिक जानकारी के लिए रेल में योगदान करने देखें।

यहाँ संपादित करें यह दर्शाता है कि क्या हो रहा है। आपने जो कुछ किया है, वह केवल ऊपर की ओर रेपो रेपो का क्लोन है; तो अब आपके पास अपनी मशीन पर अपना रेपो है, जिसका संदर्भ हैgit://github.com/rails/rails.git के रूप में origin:

जीथब: गिट: //github.com/rails/rails.git
                    ^
                    |
पद: मूल
                    |
आपकी मशीन: रेल /

यदि आपने कांटा लगाया है और फिर अपने कांटे को क्लोन किया है तो यह है:

गिथब: गिट: //github.com/rails/rails.git <- git@github.com: nadal / rails.git
                                                           ^
                                                           |
पद: मूल
                                                           |
आपकी मशीन: रेल /

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

गिथब: गिट: //github.com/rails/rails.git <- git@github.com: nadal / rails.git
                        ^ ^
                        | |
उपाय: अपस्ट्रीम मूल
                        | |
आपकी मशीन: \ ------------------------------- रेल /

जो सिर्फ उस संस्करण की तरह है जिसे आप फोर्क करके प्राप्त करते हैं, सिवाय इसके कि इसमें एक upstreamरिमोट भी हो ताकि आप आधिकारिक बदलावों को ट्रैक कर सकें और उन्हें अपने कोड में मिला सकें (यदि आपने कांटा संस्करण बनाया था, तो आप संभवतः upstreamरिमोट जोड़ना चाहेंगे कुंआ)।


हो सकता है कि आप वास्तव में कांटा नहीं लगाना चाहते हों, जैसा कि मूल पोस्टर कहता है, वह कभी-कभी मूल के किसी भी लिंक के बिना कुछ काम को सहेजना चाहता हो सकता है।
एडम डाइमिट्रुक 21

1
@adymitruk नहीं, ओपी ने उल्लेख किया कि वह कभी-कभी फोर्किंग के बिना अपस्ट्रीम रेपो क्लोन करता है, लेकिन फिर पीछे की ओर योगदान करना चाहता है। उन्होंने विशेष रूप से उल्लेख किया कि वह अपने बदलावों को रेल के एक कांटेक्टेड संस्करण में धकेलना चाहेंगे। उन्होंने कहा कि मूल के लिए किसी भी लिंक के बिना काम बचाने के बारे में कुछ भी नहीं कहा।
ब्रायन कैंपबेल

वह वास्तविक परियोजना के लिए एक योगदानकर्ता बनना चाहता है, अगर वह कांटा नहीं चाहता है ... जितना संभव नहीं है।
एडम डायमिट्रुक 23

जवाब के लिए धन्यवाद और मेरी ओर से देरी के लिए खेद है। जैसा कि मैंने उल्लेख किया है कि मैंने रेल को कांटा नहीं। मेरे पास सिर्फ रेल का क्लोन है। हालाँकि आपका जवाब मानता है कि मैंने सबसे पहले रेल को रोका था। क्या मैने इसे सही समझा?
निक वेंडरबिल्ट

4
@ नयाल मेरा जवाब यह नहीं मानता है कि आपने पहले ही एक कांटा बनाया है। मेरा उत्तर बताता है कि ऐसी स्थिति को कैसे परिवर्तित किया जाए जिसमें आपने सिर्फ एक रेपो का क्लोन बनाया है, जिसमें आप अपने स्थानीय रेपो से अपने परिवर्तनों को एक कांटे में धकेल सकते हैं। GitHub पर एक रेपो फोर्क करने से बस उस सर्वर पर एक प्रतिलिपि बनती है जिसे आप पुश कर सकते हैं; एक बार जब आप ऐसा कर लेते हैं, तो मेरे निर्देश आपको दिखाते हैं कि आपके द्वारा बनाए गए स्थानीय रेपो को कैसे इंगित किया जाए, जो कि अभी आधिकारिक रेल रेपो को इंगित करता है, बजाय आपके कांटे को इंगित करने के। मैंने यह बताने के लिए एक आरेख जोड़ा है कि क्या हो रहा है; मुझे आशा है कि मदद करता है, मुझे बताएं कि क्या आपके पास कोई और प्रश्न हैं।
ब्रायन कैंपबेल

3

क्लोन किए गए फोर्कड मोड से स्विच करने का एक बहुत आसान तरीका http://hub.github.com/hub से आवरण का उपयोग करना है ।

जब यह स्थापित है, तो बस चलाएं

hub fork

आपके केवल-पढ़ने वाले क्लोन के भीतर से।


अच्छी तरह से काम करता है। कांटा आपके github उपयोगकर्ता नाम के समान दूरस्थ नाम से बनाया जाएगा।
ज़िट्रैक्स

1

यह मायने नहीं रखना चाहिए। यदि आप चाहें, तो आप अपने नॉन-फोर्क्ड रेपो को निर्दिष्ट करते हुए एक और रिमोट जोड़ सकते हैं। उस में अपने परिवर्तन पुश करें।


मैं एक और रिमोट कैसे जोड़ूं। माफ़ करना। नौसिखिया दुनिया के लिए।
निक वेंडरबिल्ट

1
बाद में आप कांटा लगा सकते हैं और फिर अपने कांटे वाले रेपो को धक्का दे सकते हैं ... यदि आपने अभी तक कांटा नहीं लगाया है। फोर्किंग आपको अपनी स्वयं की "प्रति" बनाता है जिसमें आप रुचि रखते हैं।
एडम डाइमिट्रुक

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

1
git Remote add myrepo git: //github.com/myid/mynotforkedrepo.git
एडम डाइमिट्रुक

क्या तुमने अपने आप को अभी तक (या कहीं और) गितुब पर रेपो बनाया?
एडम डिमिट्रुक 22

0

या, यदि आप कांटा नहीं करना चाहते हैं, और रखरखाव टीम के आधार पर, आप उन्हें एक पैच बना और जमा कर सकते हैं। आम तौर पर यद्यपि आप अपने रेपो को या तो गिथब पर लिखकर उपलब्ध कराएंगे, जैसा कि अन्य टिप्पणियों में बताया गया है, या अपने स्वयं के गिट रेपो में है और आप अपने रेपो और शाखा को जानकारी के साथ मूल रेपो के अनुरक्षकों को प्रदान करते हैं जो आप उन्हें मर्ज करना चाहते हैं।


1
मुझे समझ में नहीं आता है कि कोई भी वैसे भी क्यों नहीं बनना चाहेगा, क्योंकि यह एक साधारण कांटा है! यह परियोजना का एक नया संस्करण नहीं है - स्रोत कोड की आपकी प्रतिलिपि जो आपको आशा है कि विलय में है। बस एक पैच श्रृंखला की तरह।
वैकल्पिक

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