2012-11-23 14 views
9

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

Source

  1. कैसे चेरी ले समस्या को हल करता है?
  2. मैं गिट एम या गिट का उपयोग क्यों नहीं करूं?

उत्तर

6

समस्या: आप एक विशेषता किसी विकसित की है परीक्षण करना चाहते हैं, लेकिन यह केवल एक दूरस्थ शाखा है जो खेदजनक रूप से पुराना है में मौजूद है।

यदि आप विलय या छूट प्राप्त करते हैं, तो संभवतः आप विरोधाभासी में पुराने परिवर्तनों का एक गुच्छा प्राप्त करेंगे।

चेरी चुनने के साथ, आप एक परिवर्तन सेट लेते हैं, और इसे दूसरी शाखा में एक नई प्रतिबद्धता के रूप में दोहराते हैं।

यह उपयोगी है अगर आप सिर्फ एक इतिहास के बिना किसी अन्य शाखा में प्रतिबद्ध होना चाहते हैं।

-x विकल्प का उपयोग करना उपयोगी है, इसलिए प्रतिबद्ध संदेश में एक नोट होता है जहां से चेरी को चुना गया था।

मैं गिट एम या गिट का उपयोग क्यों नहीं करूं?

क्योंकि गिट लागू पैच (फाइलें) लगाने के लिए है, और पैच की श्रृंखला लागू करने के लिए गिट है। गिट चेरी-पिक काम करता है - यानी, अपने खुद के रेपो से काम करता है, बनाम आप अन्य रिपोज़ से आयात करते हैं।

4

git help cherry-pick से:

Git-चेरी ले - परिवर्तन कुछ मौजूदा द्वारा शुरू की गई लागू करता है

[...]

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

इसलिए, जब आप cherry-pick एक प्रतिबद्ध, git लेता है कि प्रतिबद्ध परिवर्तन (अपने diff) और अपने वर्तमान कार्यशील निर्देशिका पर लागू करने के लिए कोशिश करता है, बनाने के लिए एक नया प्रतिबद्ध है कि एक के बराबर है आप cherry-pick आईएनजी कर रहे हैं।

यह एक अलग इतिहास रेखा पर एक और प्रतिबद्धता के बदलाव फिर से करने का एक तरीका है।

परिवर्तन लेने के अलावा, cherry-pick मूल प्रतिबद्धता की जानकारी लेखक और उसके जैसा भी संरक्षित करता है।

आखिरकार, cherry-pick आवेदन करने के लिए प्रतिबद्धताओं का एक समूह प्राप्त कर सकता है, इस मामले में यह cherry-pick को कालक्रम क्रम (पुराने पहले) में एक-एक करके कार्य करेगा।

1

समस्या:
आप एक विशेषता किसी विकसित की है परीक्षण करना चाहते हैं, लेकिन यह केवल एक दूरस्थ शाखा है जो खेदजनक रूप से पुराना है में मौजूद है।

यह समस्या का हल है क्योंकि:

  • आप नहीं करता जो अब विकास की अपनी वर्तमान स्थिति में प्रासंगिक
  • आप नहीं करना चाहते हैं सहित पुराने शाखा मर्ज करना चाहते हैं केवल एक प्रतिबद्धता प्राप्त करने के लिए अपनी शाखा को पुरानी शाखा के शीर्ष पर दोबारा दोहराएं।
  • आप क्योंकि चेरी पिकिंग के पहले दोष यह है कि यह परिचय duplicate commits है कि पुराने शाखा

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

अन्य दोष यह है कि आपके द्वारा चेरी-पिकिंग की प्रतिबद्धता functional dependencies पिछली प्रतिबद्धताओं (उस पुरानी शाखा के) के आधार पर हो सकती है।
दूसरे शब्दों में, इसका कोड केवल अन्य पुराने कामों के अन्य कोडों (जो चेरी-चुने हुए नहीं हैं) के कारण काम करता है।
यह पता लगाने के लिए मुश्किल हो सकता है।