2012-04-22 7 views
9

मेरे पास एक अच्छी तरह से स्थापित सॉफ्टवेयर टूलकिट है, लेकिन जिसे अक्सर छोटे बदलावों की आवश्यकता होती है (मुख्य रूप से तृतीय पक्ष उत्पादों से संगत मुद्दों का सामना करने के लिए)। अब मैं एक "नया" संस्करण (बेहतर एपीआई) तैयार करना चाहता हूं, जो मूल पर आधारित होगा - यह समय के साथ मौजूदा शाखा से अलग हो जाएगा, लेकिन कुछ सालों तक, मुझे मूल "लाइव" रखने की आवश्यकता होगी मौजूदा ग्राहकों को जो अनुकूलता के लिए इसकी आवश्यकता है। बेशक, मैं भी यह सुनिश्चित करने की आवश्यकता है कि "tweaks" "नए" संस्करण पर भी लागू हो जाएं, क्योंकि ऐसे मुद्दे (में मामले होंगे!) "नए" संस्करण पर भी लागू होते हैं।गिट में समांतर संस्करणों को प्रबंधित करने का सबसे अच्छा तरीका क्या है?

तो - मेरे आदर्श (सरल) कार्यप्रवाह होगा:

  1. जब 'नई' संस्करण पर काम कर - परिवर्तन केवल उस संस्करण के लिए लागू होते हैं।
  2. "पुराने" संस्करण पर काम करते समय, सभी परिणामी परिवर्तन (जितनी जल्दी हो सके!) दोनों संस्करणों पर लागू हो जाते हैं एक बार जब मैं उनसे खुश हूं (जब मैं प्रतिबद्ध करता हूं, जमा करता हूं या जो कुछ भी)।

मुझे एहसास है कि कभी-कभी मैन्युअल हस्तक्षेप की आवश्यकता होगी, जहां विलय विरोधाभासी होते हैं, लेकिन मैं अतीत में मैन्युअल परिवर्तनों के अनुभव के आधार पर दुर्लभ होने की अपेक्षा करता हूं।

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

  • क्या मुझे यहां कुछ याद आ रही है?
  • क्या ऐसा करने के लिए कोई आसान, सही ढंग से परिभाषित तरीका है?
  • क्या मैं गिट के बजाय एक अलग स्रोत नियंत्रण प्रणाली के साथ बेहतर होगा?

सभी विचारों की बहुत सराहना की!

+0

मुझे लगता है कि आप यहां कुछ खो रहे हैं, क्योंकि 'रीबेस' को आपके उपयोग के मामले में * बिल्कुल * डिज़ाइन किया गया था। यह इतिहास को फिर से लिखता है क्योंकि यह * माना जाता है *। यदि आप इसे सही तरीके से कर रहे हैं, तो यह केवल एक विशिष्ट स्थानीय शाखा में इतिहास को फिर से लिखता है, इसलिए केंद्रीय रिपो में कोई इतिहास पुनः लिखा नहीं जाता है। –

+1

चीजों को आसान बनाने के लिए आप सीधा-अप विलय भी कर सकते हैं, लेकिन रीबेस एक बेहतर समाधान है। –

+0

संबंधित: http://stackoverflow.com/questions/457927/git-workflow-and-rebase-vs-merge-questions –

उत्तर

5

आप बस अपनी पुरानी शाखा से नए संस्करण में परिवर्तनों को मर्ज कर सकते हैं।

मुझे पुन: विस्तार पर विस्तृत करने दें: जब तक कि आपके द्वारा केवल एक ही डेवलपर कोडबेज पर काम नहीं कर रहा है, मैं अनुशंसा नहीं करता कि आप इस विशेष समस्या के लिए रीबेस का उपयोग करें। याद रखें कि निजी शाखाओं के उपयोग के लिए के साथ रीब्राइज़ की सिफारिश की जाती है, इस प्रकार आपके पुन: लेखन इतिहास के बाद से और इस प्रकार किसी पूर्वजों के रूप में एक रिश्तेदार प्रतिबद्धता को अमान्य कर दिया जाता है।

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

0

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

+1

हालांकि एक महान वर्कफ़्लो गिट-प्रवाह इस कणिका समस्या को हल नहीं करता है – CharlesB

संबंधित मुद्दे

 संबंधित मुद्दे