मैं रेपो फोर्किंग के साथ आने वाले तत्वों को समझने/कल्पना करने की कोशिश कर रहा हूं। मेरा प्रारंभिक संदर्भ यह है सहायता पृष्ठ

पहला प्रश्न:

जब मैंने एक रेपो फोर्क किया उदा। गिटहब पर चम्मच-चाकू (यानी उनकी साइट पर फोर्क बटन पर क्लिक किया गया), क्या इसका मतलब यह है कि चम्मच-चाकू को मेरे गिटहब खाते में कॉपी किया गया है? क्या असली कॉपी वास्तव में हुई थी या यह सिर्फ एक अवधारणा है?

दूसरा प्रश्न:

सहायता पृष्ठ में अगला चरण एक क्लोन करना है:

$ git क्लोन git@github.com:username/Spoon-Knife.git

इस आदेश ने मेरी स्थानीय मशीन में स्रोत की एक प्रति बनाई। क्या यह मेरे गिटहब खाते में फोर्क/कॉपी किए गए रेपो से क्लोन किया गया था (कृपया मेरा पहला प्रश्न देखें)? या, मूल चम्मच-चाकू रेपो से?

तीसरा प्रश्न:

रिमोट कॉन्फ़िगर करने के बारे में चरण:

जब किसी रेपो को क्लोन किया जाता है, तो उसके पास origin नामक एक डिफ़ॉल्ट रिमोट होता है जो गिटहब पर आपके कांटे की ओर इशारा करता है, न कि उस मूल रेपो को जिससे इसे फोर्क किया गया था। मूल रेपो का ट्रैक रखने के लिए, आपको upstream नाम का एक और रिमोट जोड़ना होगा।

तो, क्या origin हमारी स्थानीय कॉपी और मेरे GitHub खाते की रेपो कॉपी के बीच किसी तरह का "प्रॉक्सी" है? और, upstream के बारे में क्या?

आपकी मदद के लिए पहले से धन्यवाद।

4
moey 12 नवम्बर 2011, 16:13

6 जवाब

सबसे बढ़िया उत्तर
  1. जब आप "कांटा" करते हैं तो आप केवल अपने गिट भंडार पर एक शाखा बनाना चाहते हैं जिसे आप चेक कर सकते हैं।

  2. आपकी स्थानीय प्रति जिसे आपने क्लोन किया है, वह सिर्फ उस शाखा से क्लोन और लिंक की गई है जिसे आपने गिट-हब पर बनाया है। याद रखें कि एक शाखा एक प्रतिबद्ध वस्तु के लिए सिर्फ एक सूचक है, इसलिए जब आप "कांटा" करते हैं तो आपने उनके रेपो पर एक शाखा का नाम जोड़ा जो उनके मास्टर के वर्तमान प्रमुख को इंगित करता है।

  3. गिट में रिमोट बाहरी पते पर भंडारों के नाम हैं। आपका डिफ़ॉल्ट "मूल" गिट द्वारा स्थापित किया गया है और यह केवल एक नामित रिमोट है। "अपस्ट्रीम" सिर्फ एक और नाम है और मूल मास्टर को इंगित करता है जिसे आपने मूल रूप से ब्रांच किया था ताकि आप मास्टर और अपनी शाखा के बीच परिवर्तन खींच सकें। आप अपने रिमोट को git remote -v के साथ देख सकते हैं और किसी भी बाहरी रूप से उपलब्ध गिट रेपो पर किसी भी शाखा को ट्रैक करने के लिए उन्हें आसानी से जोड़ सकते हैं।

4
Mark Fisher 12 नवम्बर 2011, 16:23

आपको कांटा और क्लोन की अवधारणाओं के बीच अंतर करना होगा।

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

  • fork एक GitHub कॉन्सेप्ट है जिसके बारे में कोर Git को जानकारी नहीं है। जब आप एक गिटहब प्रोजेक्ट फोर्क करते हैं, तो आप अपना खुद का गिटहब प्रोजेक्ट बना रहे हैं जो मूल के समान है, फोर्क ग्राफ जैसी सभी गिटहब सुविधाओं के साथ स्वचालित रूप से अपडेट किया जाता है। पर्दे के पीछे, कांटे में मूल प्रोजेक्ट में Git रिपॉजिटरी की क्लोनिंग और आपके नव-निर्मित प्रोजेक्ट में एक नया Git रिपॉजिटरी बनाना भी शामिल है।

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

4
Daniel Hershcovich 12 नवम्बर 2011, 16:23

पहला प्रश्न:

आपने इसे कॉपी किया। दरअसल यह एक तरह का क्लोन है। अब आपके पास अपने जीथब खाते में परियोजना की एक प्रति (वास्तव में इसकी शाखाओं में से एक) है।

दूसरा प्रश्न:

गिट क्लोन कमांड आपके द्वारा दिए गए रेपो को क्लोन करता है। तो $ git clone git@github.com:username/Spoon-Knife.git क्लोन चम्मच-चाकू username रेपो से। यदि यह आपका खाता है, तो यह आपके चम्मच-चाकू रेपो की प्रति की एक प्रति है :)

तीसरा प्रश्न:

origin प्रॉक्सी नहीं है, यह सिर्फ दूसरे रेपो का नाम है। उदाहरण के लिए निम्न आदेश local_srv नाम का एक रेपो जोड़ें:

git remote add local_srv /path/to/local/srv

upstream एक और रिमोट है। आप इसे इससे खींचने के लिए कॉन्फ़िगर कर सकते हैं (यानी अपडेट प्राप्त करें)।

आपके मामले में origin आपका जीथब रेपो है (मैं रिमोट को github कहता हूं) और आप upstream रिमोट को मूल स्पून-नाइफ रिपॉजिटरी में जोड़ सकते हैं। इसलिए आप अपने प्रोजेक्ट में लोकल में काम करें, अपने जीथब अकाउंट (जैसे git push origin master) पर पुश करें और git pull upstream master का उपयोग करके स्पून-नाइफ प्रोजेक्ट के नए अपडेट प्राप्त करें।

नोट: यहां मैंने केवल मास्टर का उपयोग किया है, लेकिन आप इसे अपनी पसंद की शाखा से बदल सकते हैं।

2
Geoffroy 12 नवम्बर 2011, 16:23

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

तो आपके पास तीन भंडार हैं: मूल डेवलपर भंडार, गिट हब पर एक क्लोन (वे इसे एक कांटा कहते हैं), और इस क्लोन का एक स्थानीय क्लोन। नाम origin गिट हब (आपका पहला क्लोन) पर आपके भंडार को संदर्भित करने के लिए केवल एक शॉर्टहैंड नाम है। इस शॉर्टहैंड के बिना, आपको प्रत्येक चरण में पूर्ण यूआरआई रिपोजिटरी को देना होगा।

एक रिपॉजिटरी में अन्य रिपॉजिटरी के लिए ऐसे कई शॉर्टहैंड नाम हो सकते हैं। यह अनुशंसा की जाती है कि वे सभी एक ही मूल भंडार के क्लोन हों ताकि इतिहास एक ही रूट के साथ एक सरल निर्देशित चक्रीय ग्राफ हो।

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

1
Sylvain Defresne 12 नवम्बर 2011, 16:25

जब मैंने एक रेपो फोर्क किया उदा। गिटहब पर चम्मच-चाकू, क्या इसका मतलब यह है कि चम्मच-चाकू को मेरे गिटहब खाते में कॉपी किया गया है?

हां।

क्या असली कॉपी वास्तव में हुई थी या यह सिर्फ एक अवधारणा है?

यह गीथूब के अंत में एक कार्यान्वयन विवरण है। आपके लिए मायने नहीं रखना चाहिए। (मुझे पूरा यकीन है कि वे भंडारण साझा करते हैं)।

क्या यह मेरे गिटहब खाते में फोर्कड/कॉपी किए गए रेपो से क्लोन किया गया था? या, मूल चम्मच-चाकू रेपो से

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

तो, क्या हमारी स्थानीय प्रति और मेरे GitHub खाते पर रेपो प्रति के बीच किसी प्रकार का "प्रॉक्सी" है? और, अपस्ट्रीम के बारे में कैसे?

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

1
Thilo 12 नवम्बर 2011, 16:28

3 रिपोज

original - {GitHub}/octocat/Spoon-Knife  
forked   - {GitHub}/   mine/Spoon-Knife  
local    -  {local}        /Spoon-Knife
  1. जब आप "कांटा" करते हैं, तो आपके पास वास्तविक प्रतिलिपि इस अर्थ में होती है कि आपने इसे पढ़ने/लिखने की पहुंच प्राप्त की है। हालांकि, इसे प्रभावी ढंग से "मूल गिट भंडार पर एक शाखा बनाने के लिए जिसे आप लिख सकते हैं" के तरीके के रूप में सबसे अच्छा सोचा जा सकता है।

  2. "कांटा" क्रिया ने original को आपके GitHub खाते में कॉपी कर दिया। आप सीधे local क्लोन से forked (original नहीं) पर पुश कर सकते हैं।

  3. सीधे शब्दों में कहें, एक remote एक बाहरी पते पर भंडार का नाम है .
    "मूल" - forked की ओर इशारा करता है ("मूल" डिफ़ॉल्ट remote नाम है)
    "अपस्ट्रीम" - original की ओर इशारा करता है ताकि आप अपने रेपो में बदलाव ला सकें

आप अपने रिमोट को git remote -v के साथ देख सकते हैं और किसी भी बाहरी रूप से उपलब्ध गिट रेपो पर किसी भी शाखा को ट्रैक करने के लिए उन्हें आसानी से जोड़ सकते हैं।

आंशिक रूप से मार्क के उत्तर से लिया गया है।

1
Jake Berger 25 जुलाई 2012, 07:57