git - गिटहब में फोर्किंग बनाम ब्रांचिंग




branch github (3)

मैं एक जिथब परियोजना बनाम बनाने के फायदे और नुकसान के बारे में और जानना चाहता हूं।

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


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

गिटहब सर्वर पक्ष पर क्लोनिंग क्लोन से ज्यादा कुछ नहीं है:

  • सीधे वापस धक्का देने की संभावना के बिना
  • विलय अनुरोध का प्रबंधन करने के लिए फोर्क कतार सुविधा के साथ जोड़ा गया

आप मूल परियोजना के साथ सिंक में एक कांटा रखते हैं:

  • रिमोट के रूप में मूल परियोजना को जोड़ना
  • उस मूल परियोजना से नियमित रूप से लाना
  • उस ब्याज की शाखा के शीर्ष पर अपने वर्तमान विकास को पुन: प्राप्त करें जिसे आपने उस fetch से अपडेट किया था।

रिबेस आपको यह सुनिश्चित करने की अनुमति देता है कि आपके परिवर्तन सरल हैं (संभालने के लिए कोई विलय विवाद नहीं), जिससे आप अपने प्रोजेक्ट में अपने पैच को शामिल करने के लिए मूल प्रोजेक्ट के रखरखाव को अधिक आसान बनाते हैं।

लक्ष्य वास्तव में सहयोग की अनुमति देना है भले ही प्रत्यक्ष भागीदारी हमेशा संभव न हो।

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

विलय अनुभव वही होगा, लेकिन एक अतिरिक्त स्तर के संकेत के साथ (कांटे पर पहले धक्का दें, फिर मूल पुल पर विकास के जोखिम के साथ, एक पुल के लिए पूछें, जिससे आपका फास्ट-फॉरवर्ड विलय अब तेजी से आगे नहीं बढ़ता है) ।
इसका मतलब यह है कि सही वर्कफ़्लो git pull --rebase upstream ( git pull --rebase upstream से नए कामों के शीर्ष पर अपने काम को git pull --rebase upstream ), और उसके बाद इतिहास को फिर से लिखने के लिए git push --force origin , इस तरह से आपके स्वयं के काम हमेशा होते हैं मूल (अपस्ट्रीम) रेपो से काम करने के शीर्ष पर।

यह भी देखें:

  • गिट कांटा गिट क्लोन है?
  • मूल गीथब भंडार से फोर्क किए गए गिथब भंडार में नए अपडेट खींचें

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

सामान्य पैटर्न निम्नानुसार है:

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

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


फोर्किंग मौजूदा भंडार से पूरी तरह से नया भंडार बनाता है (बस गिटहब / बिटबकेट पर गिट क्लोन कर रहा है)

फोर्क्स का सबसे अच्छा उपयोग किया जाता है: जब 'विभाजन' का इरादा एक तर्कसंगत स्वतंत्र परियोजना बनाना है, जो कभी भी अपने माता-पिता के साथ एकजुट नहीं हो सकता है।

शाखा रणनीति मौजूदा / कामकाजी भंडार पर एक नई शाखा बनाती है

शाखाओं का सबसे अच्छा उपयोग किया जाता है: जब वे मूल के साथ शाखा को मर्ज करने के इरादे से, सुविधा के माध्यम से काम करने के लिए अस्थायी स्थानों के रूप में बनाए जाते हैं।

अधिक विशिष्ट: - ओपन सोर्स प्रोजेक्ट्स में यह रिपोजिटरी का मालिक है जो निर्णय लेता है कि कौन भंडार को दबा सकता है। हालांकि, ओपन सोर्स का विचार यह है कि हर कोई इस परियोजना में योगदान दे सकता है।

यह समस्या कांटे द्वारा हल की जाती है: जब भी कोई डेवलपर ओपन सोर्स प्रोजेक्ट में कुछ बदलना चाहता है, तो वे सीधे आधिकारिक भंडार को क्लोन नहीं करते हैं। इसके बजाए, उन्होंने इसे एक प्रतिलिपि बनाने के लिए मजबूर किया। जब काम समाप्त हो जाता है, तो वे एक पुल अनुरोध करते हैं ताकि रिपोजिटरी के मालिक परिवर्तनों की समीक्षा कर सकें और तय कर सकें कि उन्हें अपनी परियोजना में विलय करना है या नहीं।

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

नीचे दिए गए लिंक एक अच्छी तरह से समझाया गया तरीके में अंतर प्रदान करते हैं:

https://blog.gitprime.com/the-definitive-guide-to-forks-and-branches-in-git/

https://buddy.works/blog/5-types-of-git-workflows

http://www.continuousagile.com/unblock/branching.html





github