git - डुमरी पुल का गाना



क्या गिथब में आश्रित पुल अनुरोध संभव हैं? (1)

वर्तमान में मैं एक बहुत बड़े पुल अनुरोध पर काम कर रहा हूं। कोड-समीक्षाओं को किसी भी तरह से प्रबंधित करने के लिए विचार को अलग हिस्सों में पूर्ण पुल अनुरोध को विभाजित करना था, जो हालांकि एक दूसरे पर निर्भर करते हैं।

एक उदाहरण होगा:

  • अनुरोध अनुरोध 1 : इंटरफ़ेस बनाएँ: इंटरफ़ेस A & B और पुनर्गठन कोड
  • अनुरोध 2 खींचें : इंटरफ़ेस ए कार्यान्वयन और टेस्ट ( पुल अनुरोध 1 पर निर्भर करता है)
  • पुल अनुरोध 3 : इंटरफ़ेस बी कार्यान्वयन और परीक्षण ( पुल अनुरोध 2 पर निर्भर करता है)
  • पुल अनुरोध 4 : कार्यान्वयन का मिश्रित परीक्षण (2 + 3 पर निर्भर करता है)

क्या गिथब में निर्भरता के साथ एक ही समय में सभी चार पुल अनुरोधों को दर्ज करने का एक तरीका है?


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

यह ध्यान रखना अच्छा है कि कई तरीके हैं जो लोग GitHub PRs का उपयोग करते हैं। सामान्य ओपन सोर्स सहयोग तरीका एक रेपो को फोर्क करने और क्रॉस-रेपो पुल अनुरोध सबमिट करने के लिए है, लेकिन अन्य मामलों में (जैसे कि एक संगठन के भीतर), आप सभी रिपॉजिटरी के भीतर सभी के लिए पुल अनुरोध सबमिट कर सकते हैं। मुझे लगता है कि एक एकल रिपॉजिटरी के भीतर निर्भर पुल अनुरोधों की तर्ज पर कुछ प्राप्त करना अधिक उचित है, क्योंकि आप उस रेपो के भीतर प्रतिबद्ध / शाखा संरचना स्थापित कर सकते हैं।

यहाँ एक ब्लॉग पोस्ट है जिसमें बताया गया है कि निर्भर पुल अनुरोधों के कुछ फायदे कैसे प्राप्त किए जा सकते हैं, जो मुझे लगता है कि सभी प्रतिनिधि को एक ही रेपो में होना चाहिए: http://graysonkoonce.com/stacked-pull-requests-keeping-github-diffs-small/

एक सारांश:

  • 5 आश्रित पुल अनुरोधों को प्रस्तुत करने के लिए, 5-स्तरीय-गहरी शाखा पदानुक्रम बनाएं और प्रत्येक पीआर को पिछली शाखा के आधार पर उस शाखा के रूप में प्रस्तुत करें।
  • 5 की समीक्षा 2 को अपडेट करने के लिए, एक अपडेट को शाखा 2 पर धकेलें, फिर 3, 4 और 5 समीक्षाओं में परिवर्तन को एकीकृत करने के लिए 3 मर्ज ऑपरेशन करें।
  • आपको सभी परिवर्तनों को एक बार में करने की आवश्यकता है, क्योंकि GitHub पीआरएस की लक्ष्य शाखा को अपडेट करने का समर्थन नहीं करता है। उदाहरण में, सभी 5 कोड समीक्षाओं को एक ही प्रतिबद्ध के रूप में उतारा गया। GitHub अब एक PR की आधार शाखा को अपडेट करने का समर्थन करता है, इसलिए PR को एक बार में एक लैंड किया जा सकता है।

यह दृष्टिकोण उन विशाल परिवर्तनों के लिए ठीक काम करता है जो छोटे टुकड़ों में सबसे अच्छी समीक्षा करते हैं (हालांकि एन-लेवल-डीप ब्रांच पदानुक्रम को बनाए रखना git rebase -i जैसी किसी चीज़ के साथ तुलना में दर्द है), लेकिन यह वास्तव में " कोड समीक्षा पाइपलाइन "जहां आप निर्भर हो सकते हैं समीक्षा के विभिन्न चरणों में भिन्नता हो सकती है और वे पहले की समीक्षा के अनुसार जमीन पर उतर सकते हैं।

कुछ अन्य इंटरनेट संसाधन जो सीमा भी कहते हैं:

https://www.quora.com/Is-there-a-good-system-for-adding-multiple-pull-requests-to-GitHub

https://muffinresearch.co.uk/how-do-you-deal-with-dependent-branches-on-github/

मेरी समझ यह है कि GitHub PRs का उपयोग करने वाले लोग आम तौर पर अपने वर्कफ़्लो की संरचना करने की कोशिश करते हैं जो कि डिपेंडेंट कोड समीक्षाओं पर निर्भर न हों। कुछ उदाहरण:

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




pull-request