जीथब संगठन रिपोजिटरीज़, इश्यूज़, मल्टीपल डेवलपर्स और फोर्किंग - बेस्ट वर्कफ़्लो प्रैक्टिस


14

एक अजीब शीर्षक, हाँ, लेकिन मुझे लगता है कि मुझे लगता है कि कवर करने के लिए थोड़ा सा जमीन मिली है।

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

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

तो मुझे कुछ सवाल पूछने हैं:

  1. क्या इस मामले में कांटा-प्रति-डेवलपर दृष्टिकोण उचित है? ऐसा लगता है कि यह थोड़ा ओवरकिल हो सकता है। मुझे यकीन नहीं है कि हमें हर डेवलपर के लिए एक कांटा चाहिए, जब तक कि हम ऐसे डेवलपर्स को पेश न करें जिनके पास सीधे पुश एक्सेस नहीं है और उनके सभी कोड की समीक्षा की आवश्यकता है। किस मामले में, हम केवल उन डेवलपर्स के लिए, जैसी नीति बनाना चाहते हैं। तो, कौन सा बेहतर है? एक एकल भंडार में सभी डेवलपर्स, या सभी के लिए एक कांटा?
  2. क्या किसी के पास हब टूल के साथ अनुभव है, विशेष रूप से पुल-अनुरोध सुविधा? यदि हम एक फोर्क-प्रति-डेवलपर (या यहां तक ​​कि कम-विशेषाधिकार प्राप्त देवों के लिए) करते हैं, तो अपस्ट्रीम मास्टर रिपॉजिटरी (संगठन के रिपॉजिटरी?) से पुल अनुरोधों पर हब के पुल-अनुरोध सुविधा का संचालन होगा या क्या इसका अलग व्यवहार है?

EDIT
I ने मुद्दों, कांटों और अनुरोधों को खींचने के साथ कुछ परीक्षण किया और पाया। यदि आप अपने संगठन के भंडार पर एक मुद्दा बनाते हैं, तो अपने संगठन से अपने खुद के गीथूब खाते में भंडार काटा, कुछ बदलाव करें, अपने कांटे की मास्टर शाखा में विलय करें। जब आप चलाने का प्रयास hub -i <issue #>आप, कोई त्रुटि मिलती है User is not authorized to modify the issue। तो, जाहिर है कि काम का प्रवाह काम नहीं करेगा।

जवाबों:


6

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

आपकी टीम के पैमाने पर निर्भर करता है, मुझे लगता है। मैं एक छोटी सी टीम में काम करता था, जहाँ हमारे पास सिर्फ एक ही रेपो था और उस रेपो के अंदर अपनी शाखाएँ मिलती थीं। हमारे लिए यह ठीक है।

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


2

यदि आप कोड की समीक्षा और कोड गुणवत्ता को महत्व देते हैं, तो फोर्क-प्रति-डेवलपर दृष्टिकोण बहुत अच्छा तरीका है। पुल अनुरोधों का उपयोग करने के बारे में अच्छी बात यह है कि यह अनुरक्षक से डेवलपर को जिम्मेदारी सौंपता है।

डेवलपर अपने कोड को मुख्य शाखा में लाना चाहता है और इसे शामिल करने का अनुरोध करता है।

यह पुराने मॉडल की तुलना में बहुत अलग संदर्भ है जहां लोग प्रतिबद्ध हैं, और बाद में समीक्षक ने उन्हें बताया "ओह, यह बात आपने कुछ सप्ताह पहले की थी, यह इतना अच्छा नहीं था, अब इसे ठीक करें।"

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


1

मैं सब कुछ के लिए सभी forking और शाखाओं में बँटना नहीं होगा। यह गीथब पर ओपन सोर्स रत्नों के लिए एक अच्छा मॉडल है, लेकिन आपका मॉडल एक संगठन के भीतर है जो आम तौर पर परिवर्तनों के बारे में विश्वास का एक उच्च स्तर होगा।

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

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

मैं एक संगठन के भीतर बिल्कुल भी कांटा नहीं लगा सकता। यह मोड ओपन-सोर्स प्रोजेक्ट्स के लिए अधिक उपयुक्त लगता है जो इन-हाउस लोगों के लिए प्रकृति में भिन्न होते हैं।

मैं आपका ध्यान परीक्षण और कोड समीक्षाओं पर स्विच करूंगा। क्या लोग टेस्ट लिख रहे हैं? क्या वे अच्छे हैं? क्या कोड समीक्षाएं की गई हैं?


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

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

btw, व्यक्तिगत रूप से मैं git का उपयोग करता हूं और इस तथ्य को पाता हूं कि इसके पास एक स्थानीय भंडार है, जैसा कि svn का कहना है कि जहां आप सीधे रिमोट (कोई पुश / पुल) नहीं करते हैं, मुझे वैसे भी पहले स्थानीय स्तर पर काम करने में कुछ मदद मिलती है। यह आसान है 'क्योंकि मैं अभी भी अंतिम धक्का के बिना जोड़ सकता हूं और तैयार रह सकता हूं जब तक कि मैं तैयार नहीं हूं।
जंकी

जब तक आप ClearCase डायनेमिक दृश्य का उपयोग नहीं करते हैं (जो, यदि आपने कभी भी कोशिश की है, तो आप जानते हैं कि पीटा का उपयोग करना है), आप सब कुछ के लिए धन्यवाद कर रहे हैं, क्योंकि प्रत्येक चेकआउट वास्तव में एक कांटा है, बस केंद्रीकृत संस्करण नियंत्रण प्रणालियों में एक नहीं हो सकता कई संशोधन। विकेन्द्रीकृत और वितरित प्रणालियों में (गिट एक है) यह एक नियमित कांटा है।
Jan Hudec
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.