जीथब पर कांटा और शाखा के बीच अंतर


127

अगर मैं एक परियोजना कांटा है कि github पर होस्ट किया गया है। क्या मैंने सभी शाखाओं को कांटा है? मुझे कैसे पता चलेगा कि मेरा कांटा किस शाखा पर आधारित है? दूसरे शब्दों में मेरे पीसी पर कौन सी शाखा डाउनलोड की जाएगी?


1
सरल अंग्रेजी स्पष्टीकरण: एक शाखा एक कांटे की तरह है जो एक माता-पिता के कांटे से है। कांटा एक शाखा की तरह होता है जिसमें मूल शाखा का अभाव होता है।
केन किन

जवाबों:


41

GitHub पर सभी शाखाओं को एक कांटा में कॉपी किया जाएगा। (जाहिर है, इसमें वे शाखाएँ शामिल नहीं हैं जिन्हें पहली बार में GitHub में धकेल दिया गया था।)

लेकिन एक कांटा एक GitHub-to-GitHub ऑपरेशन है; आपके पीसी में कुछ भी कॉपी नहीं किया गया है। यह एक Git क्लोन के समान नहीं है । यदि आप यह पूछना चाहते हैं कि "जब मैंने किसी प्रोजेक्ट की क्लोनिंग की तो क्या कॉपी की है?", के लिए मैनुअल देखें git-clone(1)


153

इस पर इस तरीके से विचार करें:

रेपो [सिटोरी] एक या कई शाखाओं में टीम के सहयोग से काम करता है। सभी योगदानकर्ताओं की अपनी प्रति है।

प्रत्येक कांटामुख्य रेपो का एक योगदानकर्ता के काम से मेल खाता है। एक कांटा वास्तव में एक Github है (Git नहीं) अपने उपयोगकर्ता खाते में रेपो के क्लोन को संग्रहीत करने के लिए निर्माण करता है। एक क्लोन के रूप में, यह उस समय मुख्य रेपो में सभी शाखाओं को समाहित करेगा, जब आपने कांटा बनाया था।

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

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

एक प्रतिबद्ध कोड में परिवर्तन का एक सेट है। यह गिट के बारे में सबसे दिलचस्प चीजों में से एक है। आप फ़ाइलों को स्थानांतरित नहीं करते हैं, आप परिवर्तनों के लॉग को स्थानांतरित करते हैं।


4
पसंद आया कि कैसे आपने सभी संबंधित संबंधित बिट्स जैसे पुल अनुरोध मानचित्रण को कांटा / शाखा को समझाया। "आप फ़ाइलों को स्थानांतरित नहीं करते हैं, आप परिवर्तनों के लॉग्स को स्थानांतरित करते हैं" ... मुझे पहले से ही पता था कि लेकिन यह वाक्यांश एकदम सही है!
harshvchawla

2
प्लस-एक यह स्पष्ट करने के लिए कि कांटा एक गिटब है, गिट नहीं। धन्यवाद!
एमरी

10

कांटा GitHub पक्ष पर एक क्लोन है (यह सब कुछ क्लोन करता है)।
जब आप एक रेपो का क्लोन बना रहे होते हैं, तो आप अपनी सभी शाखाओं के साथ, रेपो के पूरे इतिहास को प्राप्त कर रहे होते हैं।

भले ही आप सिद्धांत में दूरस्थ रेपो की डिफ़ॉल्ट शाखा को बदल सकते हैं, लेकिन GitHub रेपो से एक क्लोन मुख्य रूप से मास्टर शाखा की तलाश में है। "डिफ़ॉल्ट" शाखा को बदलने के लिए अर्थ एक GitHub क्लोन मिलेगा, आपको मास्टर शाखा का नाम बदलने की आवश्यकता है।


इसलिए जब मैंने कांटे हुए रेपो (इसे अपने पीसी पर प्रभावी ढंग से डाउनलोड किया) को क्लोन किया, तो अल मेरे पीसी पर शाखाएं हैं? लेकिन एक शाखा में अतिरिक्त फाइलें जोड़ी गई हैं। तो क्या मेरे पीसी में वो फाइलें होंगी या नहीं?
जोनाथन।

1
@ जोनाथन: आपके पीसी को सभी फाइलों के साथ सभी शाखाएँ मिलेंगी। लेकिन आपकी कार्यशील निर्देशिका (वह स्थान जहाँ आप उन शाखाओं में से किसी एक को चेकआउट करते हैं) वास्तव में एकमात्र स्थान है जहाँ आप उन फ़ाइलों को देखेंगे।
VONC

SO wherre अन्य फ़ाइलों को वास्तव में .it फ़ोल्डर में संग्रहीत किया जाएगा?
जोनाथन।

@ जोनाथन : ढीली या पैक की गई वस्तुओं के रूप में, book.git-scm.com/7_how_git_stores_objects.html (ऑब्जेक्ट एक बूँद (आपकी "फ़ाइलें"), एक पेड़, एक कमिट या एक टैग देखें: book.git-scm.com/ देखें) 1_the_git_object_model.html )
VonC

4

यदि आप किसी प्रोजेक्ट को कांटा करते हैं, तो आप पूरे प्रोजेक्ट की प्रतिलिपि अपने git हब खाते में बना रहे हैं। आप अपने पीसी के लिए कुछ भी मुकाबला नहीं कर रहे हैं

अपने पीसी में एक प्रतिलिपि बनाने के लिए आपको इसे क्लोन करना होगा और सभी सामान खींचना होगा और आपको उस परियोजना की सभी शाखाएँ और कोड मिल जाएंगे


2

यदि आप Github वेबसाइट से किसी प्रोजेक्ट का कांटा बनाते हैं, तो आपको अपस्ट्रीम प्रोजेक्ट से सभी शाखाएँ मिलती हैं।

यदि आप अपने स्थानीय पीसी पर अपने नए खनन कांटे से क्लोन करते हैं, तो आपके पास originआपके पीसी पर रिमोट होगा जो आपके कांटे की मास्टर शाखा को इंगित करता है।


Help.GitHub पेज के अनुसार , एक परियोजना को बनाना, upstreamशाखा बनाना कुछ ऐसा है जो आपको करना है; और वे आपको बताते हैं कि कैसे करना है।
जेसी सालोमन

2
वह रिमोट है, ब्रांच नहीं है।
एरोमास्टर

1

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

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


1

मैं एक वास्तविक जीवन उदाहरण साझा करना चाहता हूं जब हम शाखाओं का उपयोग करते हैं और जब हम कांटे का उपयोग करते हैं

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

मान लीजिए कि हमारी परियोजना स्थित है

https://github.com/yardpenalty/mainproject.git

शाखा का उपयोग:

कहते हैं कि शाखा को कहा जाता है It_doesnt_matter

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

मर्ज से It_doesnt_matter शाखा अब मास्टर परियोजना को धक्का दे

पर https://github.com/yardpenalty/mainproject.git

मान लीजिए कि पैकेज प्रोजेक्ट स्थित है

https://github.com/yardpenalty/mypackage.git

ध्यान रखें कि मेनप्रोजेक्ट उत्पादन में इस पैकेज का उपयोग करता है इसलिए हम केवल उन्हें इस पैकेज में (अन्य कारणों के साथ) धकेल कर बदलाव नहीं कर सकते हैं। मान लीजिए कि उत्पादन पर बदलाव करने के लिए एक वेब देव को इस पैकेज को संपादित करना है।

एक साधारण शाखा अभ्यस्त काम करती है क्योंकि हम पैकेज आदि को प्रकाशित किए बिना अपने बदलाव नहीं देख सकते हैं।

कांटा उपयोग: अब जब हमें अपने पैकेज के साथ थोड़ी सी चालबाजी करनी होती है, तो हम एक कांटा के माध्यम से उत्पादन पैकेज का एक क्लोन बनाते हैं। कंपोज़र.जॉन फाइलों को फोर्क को इंगित करने के लिए अपडेट किया जा सकता है जो अब उपयोगकर्ता या समूह पथ पर स्थित है

इसलिए हम एक कांटा बनाएंगे https://github.com/yardpenalty/mypackage.git

और इसे कॉल करें https://github.com/yardpenalty/yards/mypackage.git

अब हम अपनी "रिपॉजिटरी" में इस पैकेज की ओर इशारा करने के लिए अपनी कंपोजर.जॉसन फाइल को अपडेट कर सकते हैं : [इस तरह के एरे को इस तरह से देखें और चले जाएं!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

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