हम हमारी टीम में इस प्रकार के रूप में काम में bugfixes backport रहे हैं:Git रणनीति बड़े शाखाओं (चेरी ले बनाम मर्ज)
- हम अपने GitHub रेपो में केवल एक
master
शाखा है, यह स्थिर नहीं है - सोचता है कि मिल हर दिन वहां धक्का दिया; स्थिर रिलीज के लिए हम टैग का उपयोग करते हैं (विकास के लिए, हम गिटहब पर निजी कांटे का उपयोग करते हैं) - हम हर 3 सप्ताह में एक नया मामूली संस्करण जारी करते हैं, जिसमें बगफिक्स और नई विशेषताएं होती हैं (1.2.4, 1.2.5, 1.2.6 कहें। ..)
- हमें प्रत्येक मामूली पुराने संस्करण को सीमित समय (कुछ महीनों) के लिए भी बनाए रखना है, इसलिए जब कोई 1.2.4 का उपयोग करता है, जबकि नवीनतम संस्करण 1.2.7 है, और उन्हें एक बग मिलती है, तो वे एक बग पा सकते हैं हमारे द्वारा उपयोग की जाने वाली शाखा पर बग को ठीक करने का अनुरोध करें। फिर हम पैच संस्करण, 1.2.4 ए जारी करते हैं।
- पैच बल्कि असाधारण हैं। हम आम तौर पर मामूली रिलीज के लिए 1-2 से अधिक पैच नहीं करते हैं। अधिकांश रिलीज के लिए हम पैच नहीं करते हैं।
सवाल यह है कि, मास्टर और पुरानी शाखा पर एक ही समय में बग को ठीक करने की सबसे अच्छी रणनीति क्या है?
मैं दो मुख्य रणनीतियों के बारे में सोच सकते हैं:
master
पर बग को ठीक करें, तो चेकआउटv1.2.4
, तो चेरी लेने उचित बग सुधार के लिए प्रतिबद्ध (मान लीजिए एक प्रतिबद्ध जो हमेशा रखती है) और परिणामी प्रतिबद्धता कोv1.2.4A
के रूप में टैग करें।चेकआउट
v1.2.4
,, बग को ठीक करें और पुष्टि को टैगv1.2.4A
के रूप में प्रतिबद्ध है, औरmaster
करने के लिए इसे शामिल करने के लिए, एक मर्ज है।
मैं पहले संस्करण (चेरी-पिकिंग) के पक्ष में हूं, लेकिन मैं पेशेवरों और विपक्ष के बारे में अन्य टिप्पणियां सुनना चाहता हूं।
बेशक, चीजें जटिल हो सकती हैं जब मध्य में काम करता है कुछ बड़े बदलावों को पेश करता है जिसके परिणामस्वरूप कोई भी प्रतिबद्धता नहीं बना सकता है जो 1.2.4 और मास्टर में काम करेगा उदाहरण के लिए जब कुछ फ़ंक्शन नाम बदल जाते हैं या अधिक जटिल चीजें हैं)। लेकिन अधिक आम स्थिति यह है कि फिक्स बिना किसी समस्या के पोर्ट किया जा सकता है। गुरु से चेरी पिकिंग की
लाभ:
मुझे लगता है कि इतिहास अधिक चेरी पिकिंग के साथ "खाने योग्य है।" इस पर विचार करें:
| <- bugfix done on master | | | <- v1.2.7 ... | | | | | | | | | | - <- v.1.2.4A (cherry-picked from master) |/ | <- v1.2.4
इस बनाम:
| <- bugfix merged to master |\ | \ | | | | <- v1.2.7 ... | | | | | | | | | | | | | | | | | | | - <- v.1.2.4A (direct bugfix) |/ | <- v1.2.4
के बीच में प्रतिबद्ध के दर्जनों होने के Think। समानांतर में इस तरह के कई पैच लागू करने पर विचार करें। स्क्रीन का आधा प्रदूषित हो जाएगा।
मान लें कि मैंने
v1.2.4
पर कोई समस्या तय की है, लेकिन कुछ दिनों में कोई मुझेv1.2.3
पर पैच के लिए पूछता है। चेरी-पिक इसे करने का सबसे समझदार तरीका है।
क्या हमारे मामले में विलय करने के कोई फायदे हैं जिन्हें मैंने अनदेखा किया? मैं समझ सकता हूं कि यह दोनों चेरी-पिकिंग से बेहतर काम करता है, लेकिन हम रिलीज के दस्तावेज रखते हैं और यह सब भी वहां ट्रैक किया जाता है।
चेरी-पिकिंग दोनों दिशाओं में किया जा सकता है। – madth3
हाँ, सच है, मैं मुख्य रूप से चेरी-पिक बनाम विलय के लाभों के बारे में पूछता हूं। इस बारे में कि क्या पुराने से बैकपोर्ट के रूप में मास्टर से चेरी-चुनना है, या पुराने से मास्टर तक, दूसरी कहानी है। मुझे लगता है कि बैकपोर्टिंग अधिक तार्किक है और इस तरह मैंने इसे विभिन्न परियोजनाओं में किया है। लेकिन यह दार्शनिक सवाल है। '-x' के लिए –