2015-03-05 11 views
11

पर पुल अनुरोधों के लिए सर्वोत्तम अभ्यास मैंने this और this चर्चाएं पढ़ी हैं लेकिन अभी भी गिटहब पर सहयोग करने का सबसे अच्छा तरीका समझने में परेशानी है।गिटहब

मान लीजिए कि मैंने एक रेपो फोर्क किया है और इसे स्वतंत्र रूप से विकसित किया है (मूल रेपो थोड़ी देर के लिए सक्रिय नहीं है)। तो मेरे पास अपनी खुद की develop शाखा है, जहां मैं सभी परिवर्तन करता हूं: feature से ब्रांचिंग, वहां विकसित करना और फिर develop पर विलय करना। समय-समय पर मैं पीआर को मूल रेपो में जमा करना चाहता हूं। लेकिन मैं feature से पीआर नहीं कर सकता, क्योंकि इसमें develop का सभी इतिहास शामिल होगा। तो है कि मुझे क्या करना:

  • चेकआउट master कि feature से से यह
  • चेरी ले मूल रेपो ट्रैक
  • brahnch और GitHub
  • को धक्का एक पीआर प्रस्तुत

जब उन पीआर को मूल रेपो के master में विलय कर दिया गया है, मैं इसे खींचता हूं और फिर master से develop विलय करता हूं।

यह ठीक काम करता है, लेकिन इसके परिणामस्वरूप मेरे अपने रेपो में समान कामों को गुणा करने में परिणाम होता है, इसलिए मुझे यकीन नहीं है कि चेरी-पिकिंग यहां सबसे अच्छा तरीका है या नहीं?

master से ब्रांचिंग शायद बेहतर होगा, लेकिन अक्सर ऐसी स्थिति होती है जब मैंने फीचर -2 किया है जो फीचर -1 पर निर्भर करता है; और फीचर -1 अभी भी पीआर के रूप में विलय होने की प्रतीक्षा कर रहा है, लेकिन master में अभी तक नहीं है।

मैं किसी भी सुझाव और उदाहरणों की सराहना करता हूं।

+0

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

उत्तर

5

सिद्धांत में यह हमेशा उस परियोजना पर निर्भर करता है जिस पर आप काम कर रहे हैं, और परियोजना के प्रमुख।

आम तौर पर जब आप रिलीज बिल्ड करते हैं, या कम से कम त्रुटियों के बिना संकलित हो सकता है तो आप केवल मास्टर को प्रतिबद्ध करते हैं। लेकिन कुछ परियोजना सिर्फ सब कुछ मास्टर में फेंक देते हैं।

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

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

यह 5 मिनट पढ़ने के लिए देखें: Understanding the GitHub Flow

+0

रायन, उत्तर के लिए धन्यवाद। शायद मैं पर्याप्त स्पष्ट नहीं था - मास्टर/अलगाव विकसित करना वास्तव में एक मुद्दा नहीं है - आमतौर पर मैं गिटफ्लो प्रतिमान का पालन करता हूं। मुझे क्या रूचि है - केवल ** फीचर-एक्स ** के लिए पुल-अनुरोध कैसे भेजें, यह देखते हुए कि मेरा ** विकसित ** मूल भंडार से आगे है? मैं चेरी-पिकिंग का उपयोग करता हूं, लेकिन क्या यह सबसे अच्छा तरीका है? – Vladimir

0

मैं रायन से सहमत हूं कि यह किस परियोजना पर निर्भर करता है।

मेरे काम पर हम एक बहुत अच्छी प्रणाली के साथ आए हैं कि हम सभी सहमत हैं।

  1. नवीनतम मास्टर पर प्रारंभ करें। अपने विकास या सुविधा काम पर
  2. कार्य
  3. Git -p जोड़ने (अपने परिवर्तन के लिए) या Git नए संयोजन के लिए
  4. Git चेकआउट जोड़ने -b नई शाखा-नाम
  5. Git प्रतिबद्ध मी "आप जो कुछ भी लग रहा है कहा जा सकता है "
  6. Git खींच -r मूल मास्टर
  7. Git धक्का मूल नई शाखा-नाम
  8. एक जनसंपर्क खोलने के लिए और 2 अनुमोदन के लिए इंतजार
  9. मास्टर
  10. ०१२३५१६४१०६ में विलय
  11. नई शाखा-नाम

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

मुझे पता है कि मैंने इसे बरनी शैली से तोड़ दिया, लेकिन मैं कुछ याद नहीं करना चाहता था। इसका इस्तेमाल करने के लिए स्वतंत्र महसूस करें। यह हमारे लिए भी बहुत अच्छा काम करता है क्योंकि हम बहुत बात करते हैं और सहयोग करते हैं। जहां तक ​​फंसे हुए रेपो और पीआरएस, जब भी आप काम कर रहे हैं उससे खुश हैं, तो बस एक पीआर खोलें। मैं पूरी तरह से पूरी तरह से सहमत नहीं हूं, एक शाखा शाखा में मास्टर ऑफ ब्रांच, फिर उस से शाखा। मास्टर हर समय तैयार हो जाना चाहिए और फिर यदि आप उन पीआरएस पर चिपके रह रहे हैं तो आपको चिंता करने की आवश्यकता नहीं है। इसके अलावा यदि आप एक बड़े पीआर से डरते हैं तो बहुत से लोगों की समीक्षा करने के लिए स्वतंत्र महसूस करें, और यह केवल दो नहीं होना चाहिए। हमारे पास केवल 6 लोग हैं इसलिए हमारे लिए 2 काम करते हैं। उम्मीद है की वो मदद करदे।

0

टिप्पणी ओपी द्वारा Ryen नेल्सन के जवाब पर पोस्ट को देखते हुए:

... मास्टर/जुदाई का विकास नहीं वास्तव में एक मुद्दा है - आम तौर पर मैं gitflow प्रतिमान का पालन करें। मुझे क्या दिलचस्पी है - केवल फीचर-एक्स के लिए पुल-अनुरोध कैसे भेजना है, यह देखते हुए कि मेरा विकास मूल भंडार से आगे है? मैं चेरी-पिकिंग का उपयोग करता हूं, लेकिन क्या यह सबसे अच्छा तरीका है?

मैं पूछना होगा - तुम्हारा क्या मतलब है कि आपके develop शाखा तरह से मूल भंडार से आगे है (क्या मैं अब से master शाखा फोन करता हूँ)? आपकी develop शाखा में अन्य सभी चीजें क्या हैं?

ऐसा लगता है कि आप develop में महत्वपूर्ण विकास पूरा कर रहे हैं जो अल्पावधि में master में नहीं जा रहा है। इस स्थिति में, प्रत्येक पुल अनुरोध/समस्या/वृद्धि के लिए एक अलग सुविधा शाखा बनाएं जिसे आप काम कर रहे हैं master पर सबमिट किया जाएगा।

यदि आप सावधान हैं, तो आप उद्धरण में चर्चा की गई परस्पर निर्भरताओं सहित आपकी विभिन्न फीचर शाखाओं के बीच अंतर को कम कर सकते हैं। उदाहरण के लिए, मान लें कि आप develop बनाए रख रहे हैं और master पर fea1 और fea2 के लिए पुल अनुरोध सबमिट करने का प्रयास कर रहे हैं।

  • सेटअप 2 सुविधा शाखाओं मास्टर और चेरी चुन सकते हैं जहाँ के बंद या रिबेस से बाहरfea1 करने और fea2 विकसित जब तक वे आधार आप develop परिवर्तन मौजूदा अपनी फिक्स करने के लिए से की जरूरत है।
  • यदि परस्पर निर्भरताएं हैं, तो इसका मतलब है कि आप प्रत्येक फीचर शाखा में कुछ ही पसंद करेंगे, या नए कोड को विकसित करना समाप्त कर देंगे जो दो फीचर शाखाओं के बीच विलय या रिबाज हो जाएगा।
  • fea1 और fea2 के लिए नए फ़िक्स विकसित करें, और उचित होने पर develop पर विलय करें (या रीबेस/स्क्वैश)। इस संदर्भ में विलय, जहां आप इस रेपो में केवल एक ही विकास कर रहे हैं, सरल है - आप केवल develop, fea1, या fea2 पर एक समय पर काम करेंगे, इसलिए विलय वास्तव में उन संघर्षों को संभालने जा रहा है जो आपको करना है वैसे भी हल ...

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

एक बार पीआर स्वीकार किए जाने के बाद, आप अपने रेपो में संबंधित निजी फीचर शाखा पर जो कुछ भी चाहते हैं उसे साफ़ कर सकते हैं, और सुनिश्चित कर सकते हैं कि कोई भी अंतिम शाखा दूसरी शाखा में विलीन हो और develop पूर्ण हो।

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