2009-01-08 9 views
18

मेरे पास git svn clone के साथ बनाया गया एक स्थानीय गिट भंडार है। मैं एक स्थानीय शाखा बना देता हूं, कुछ बदलाव करता हूं, मास्टर पर वापस स्विच करता हूं, git svn rebase और यदि यह सब अच्छा है, तो मैं अपनी शाखा को वापस मास्टर में मिला देता हूं।गिट svn dcommit स्थानीय शाखाओं के लिए मर्ज काम का इतिहास क्यों खो देता है?

alt text http://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg

कभी कभी, बाद में जब मैं फिर से git svn rebase और कुछ दूरदराज के परिवर्तन प्राप्त है, यह सच है कि a_branch मुख्य लाइन में विलय हो गया खो देता है और पेड़ इस तरह दिखता है:

फिर पेड़ कुछ इस तरह दिखता

alt text http://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg

वह क्यों है? क्या मैं इसे रोक सकता हूँ? क्या यह बताने का कोई आसान तरीका है कि एक शाखा विलय हो गई थी, या जब मैं कर रहा हूं तो मैं अपनी शाखाओं को हटा दूं, इसलिए मुझे नहीं भूलना चाहिए कि क्या मिला है और क्या विलय नहीं हुआ है?

उत्तर

22

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

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

+1

+1 गिट रीबेस मास्टर के लिए +1 – JoaoHornburg

0

क्योंकि आप svn के माध्यम से जा रहे हैं। जब आप ऐसा करते हैं तो आप बहुत सारी जानकारी खोने जा रहे हैं (उदाहरण के लिए, आप लेखक को भी खो देते हैं)।

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