2012-11-01 32 views
9

मैं एक svn क्लाइंट के रूप में git-svn का उपयोग कर रहा हूँ। समय-समय पर मुझे निम्नलिखित समस्या का सामना करना पड़ता है।"गिट रिबेस" मंच और संशोधित प्रति में संशोधनों के विपरीत सेट क्यों छोड़ता है?

  1. मैं अपनी स्थानीय गिट शाखा, एक खाली चरण और एक साफ काम करने वाली प्रति में कुछ काम करता हूं।

  2. मैं टीम के संशोधनों को लाने और डाल करने के लिए "Git SVN रिबेस" खिड़कियों कमांड लाइन में टाइप मेरी के बाद उन्हें एक रेखीय इतिहास रखने के लिए प्रतिबद्ध

  3. सब कुछ ठीक हो जाता है (इस Git-SVN का उपयोग करने की आवश्यकता है) , टीम की सामग्री प्राप्त की जाती है और उसके बाद मेरे कामों का पुन: विश्राम किया जाता है, लेकिन ...

    मैं कामकाजी प्रति में संशोधनों और मंच में संशोधित फ़ाइलों के साथ समाप्त होता हूं, और कार्यशील प्रतिलिपि में संशोधन सटीक oposite हैं मंच में संशोधन के।

मैं आम तौर पर सब कुछ मंच है, जो काम कर रहे प्रतिलिपि है, जो ठीक है में संशोधनों reverts में है कि unstaging इस पर काम है, लेकिन मैं वास्तव में समझने के लिए यहां क्या हो रहा है करना चाहते हैं।

प्रश्न: क्या यह एक बग है, या यह ऐसा कुछ है जिसे मैं गिट रिबेस के साथ समझ नहीं पा रहा हूं?

नोट: मुझे बाद में "गीट svn fetch" और "git rebase" का उपयोग करते समय समस्या थी।

नोट: मैं एक बड़े svn भंडार (10000+ फ़ाइलें, 150000+ संशोधन) के साथ विंडोज़ पर गिट का उपयोग करता हूं, और मैं गिट-एक्सटेंशन का भी उपयोग करता हूं। संपादित करें: मैं इसका उपयोग केवल भंडार और प्रतिबद्धता का पता लगाने के लिए करता हूं। मैं विंडोज कमांड लाइन से कुछ और करता हूं।

संपादित करें: जैसा कि टिप्पणी में से एक द्वारा अनुरोध किया गया है, समस्या को समझने में सहायता के लिए यहां दो स्क्रीनशॉट हैं। पहला कामकाजी प्रति की सामग्री है, दूसरा चरण की सामग्री है।

कार्य कॉपी: enter image description here

स्टेज आप आसानी से दोनों कर रहे हैं सटीक विपरीत देख सकते हैं (प्रति संशोधनों, बहुत दृश्य काम कर वापस: एक ही छवि, लाल और हरे रंग लगा दिया जाता था): enter image description here

संपादित करें: मैंने इस मुद्दे को एक बहुत ही साधारण मामले में पुन: उत्पन्न किया: मेरी प्रतिबद्धता केवल एक फ़ाइल को संशोधित करती है, "गीट svn rebase" के दौरान बहुत कम नए काम किए जाते थे, और उनमें से कोई भी संशोधित फ़ाइल को प्रभावित नहीं करता था। मैंने "gitk --all" के साथ चेक किया। यह गिट-एक्सटेंशन और "गिट स्थिति" की तुलना में बिल्कुल वही बात कहता है यहां गिट का आउटपुट है। हम नीचे से शीर्ष करने के लिए देखें:

  • पिछले 3 लाइनें हैं 3 करता था जब रिबेसिंग लाने थे। उनमें से कोई भी मेरी फाइल को छूता है।
  • शीर्ष से तीसरी पंक्ति रीबेज के बाद मेरी प्रतिबद्धता दिखाती है: यह सब अच्छा है, यह जोड़ता है कि इसे क्या जोड़ना है और इसे हटाने के लिए क्या जोड़ा जाना चाहिए।
  • 2 लाइन सूचकांक की सामग्री से पता चलता है: यह वही परिवर्तन मेरी प्रतिबद्ध है कि करता है, आईई reverts: यह संशोधनों कि वापस लौटने मेरी प्रतिबद्ध
  • 1 लाइन काम कर प्रतिलिपि की सामग्री से पता चलता शामिल सूचकांक में संशोधन।

enter image description here

संपादित करें: यहाँ की विषय-वस्तु है मेरी .git dir एक "Git SVN रिबेस" जहां समस्या आई के बाद:

17/02/2012 04:57     0 ArmuazEm5Z 
05/04/2012 02:28     0 BeMzRLwWcu 
06/11/2012 14:37    90 COMMIT_EDITMSG 
01/11/2012 15:42    628 config 
15/02/2012 04:21    73 description 
16/02/2012 13:22     0 fuMhUevkYu 
05/11/2012 15:53   1 703 279 gitk.cache 
05/07/2012 03:49     0 gJfUbdRuG9 
06/11/2012 14:42    23 HEAD 
11/07/2012 03:14 <DIR>   hooks 
21/02/2012 03:22     0 II5HPacSJd 
06/11/2012 14:42   5 439 960 index 
15/10/2012 13:18 <DIR>   info 
16/02/2012 08:16     0 jerS1GtBYS 
17/02/2012 04:57     0 Kg64sq9pzS 
15/02/2012 23:36     0 lbe0yALJYy 
15/10/2012 13:17 <DIR>   logs 
19/10/2012 16:58 <DIR>   objects 
06/11/2012 14:42    41 ORIG_HEAD 
25/10/2012 11:02    2 795 packed-refs 
05/07/2012 03:49     0 PpxYa5z0Hc 
02/11/2012 10:00 <DIR>   refs 
15/02/2012 23:36     0 sm6ociDGGF 
06/11/2012 14:42 <DIR>   svn 
21/02/2012 03:22     0 vEqtL0Yiqd 
05/04/2012 02:28     0 VFwn3laTEV 
16/02/2012 13:22     0 XYoiLqY5BM 
16/02/2012 08:16     0 z9vL8lRT7t 
       22 File(s)  7 146 889 bytes 
       6 Dir(s) 54 105 219 072 bytes free 

संपादित करें: आप रुचि रखते हैं इस मुद्दे को ट्रैक करने में, मैंने इस विषय में "git svn rebase" के बाद अजीब स्थिति में "[git-svn] [बग रिपोर्ट] इंडेक्स" के साथ [email protected] मेलिंग सूची पर एक बग की सूचना दी।

+0

एक दुःस्वप्न की तरह लगता है।वैसे भी एसवीएन से छुटकारा पाने के लिए? –

+0

@AdamDymitruk यह 500+ लोगों की कंपनी में एक लंबी प्रक्रिया है ... परिवर्तन के इंतजार के दौरान मैं गिट-एसवीएन का उपयोग करता हूं। मैं इसके साथ काफी खुश हूं: त्वरित शाखा बनाने, तेजी से शाखा स्विचिंग, कई काम करने वाली प्रतियां, महान विलय क्षमताओं ... कभी-कभी कुछ समस्याएं भी होती हैं। –

+0

क्या आप गिटक का एक स्क्रीनशॉट पोस्ट कर सकते हैं जो दिखाता है कि क्या हो रहा है? शाखाओं और diff और संवेदनशील सामान खाली के साथ आदि। मुझे संदेह है कि आपका कामकाजी पेड़ रिबेस के पहले भी साफ नहीं है (आप 'गिट स्थिति' द्वारा जांच सकते हैं) – prusswan

उत्तर

3

यह एक बग प्रतीत होता है। यदि आपकी कार्यशील निर्देशिका और अनुक्रमणिका रीबेस से पहले साफ हैं, तो उन्हें रीबेस के बाद साफ होना चाहिए; या आपको एक विलय संघर्ष और इसे साफ करने और पुन: जारी रखने का अवसर प्राप्त करना चाहिए।

ऐसा कुछ कारणों से दिखता है, आपकी अनुक्रमणिका को स्थानीय परिवर्तनों को लागू करने के बाद बासी छोड़ी जा रही है।

असल में, भंडार की वर्तमान स्थिति के तीन मुख्य दृश्य हैं। हेड प्रतिबद्धता है, जो अंतिम प्रतिबद्धता के रूप में भंडार की स्थिति है, और आपकी अगली प्रतिबद्धता का बच्चा क्या होगा। यह आपके रिबेस के दौरान ठीक से अपडेट किया जा रहा है; हेड अब आपकी स्थानीय प्रतिबद्धता है, जो आपको अपस्ट्रीम रिपोजिटरी से मिली है।

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

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

कुछ बातें की जांच करने के:

  1. आप इस तरह के एक समस्याग्रस्त रिबेस के बाद हमें अपने .git निर्देशिका की सामग्री दिखा सकते हैं? .git के शीर्ष स्तर पर फ़ाइलों की एक सूची उपयोगी होगी। असल में, फ़ाइल नाम, संशोधन तिथियां और अनुमतियों सहित एक पूर्ण सूची कुछ और जानकारी दे सकती है।
  2. क्या आप इसे किसी भी प्रकार की नेटवर्क वाली फाइल सिस्टम पर उपयोग कर रहे हैं, या कुछ और अजीब है? नेटवर्क किए गए फाइल सिस्टम में कभी-कभी ऐसे मुद्दे होते हैं जिनमें फाइलें बाएं रहेंगी; मुझे आश्चर्य है कि यह आपके साथ हो रहा है।
  3. आप किस गिट का उपयोग कर रहे हैं?
+1

आपके ध्यान के लिए बहुत बहुत धन्यवाद। *** 1 *** अगली बार जब मुझे समस्या मिल जाएगी तो मैं पोस्ट करूंगा। *** 2 *** मेरा गिट रिपोजिटरी सी: \ पर एक अच्छी पुरानी एनटीएफएस फाइल सिस्टम पर है, लेकिन मेरे उपयोगकर्ता की होम निर्देशिका, जिसमें .gitconfig शामिल है नेटवर्क ड्राइव (कॉर्पोरेट कंप्यूटर कॉन्फ़िगरेशन) *** 3 *** गिट --वर्जन आउटपुट "गिट संस्करण 1.7.10.msysgit.1" मैंने गिट-एक्सटेंशन साइट से गिट-एक्सटेंशन और गिट युक्त एक बंडल स्थापित किया। मुझे नहीं पता था कि उन्होंने गिट के अपने संस्करण को पैक किया है। मुझे अभी एहसास हुआ कि संस्करण की जांच करते समय। मैं गिट का एक नियमित संस्करण स्थापित करने की कोशिश करूंगा और देख सकता हूं कि मुझे अभी भी समस्या है या नहीं। –

+0

@ सैमुएलरोसेल गिट एक्सटेंशन सिर्फ विंडोज़ (msysgit) के लिए मानक गिट पैकेज करता है, इसलिए यह एक जैसा है, आप मैन्युअल रूप से इंस्टॉल करेंगे। – poke

+0

समस्या उत्पन्न होने पर .git निर्देशिका की सामग्री जोड़ने के लिए मैंने प्रश्न संपादित किया। मैं गंभीरता से सोच रहा हूं कि यह एक बग है, लेकिन मुझे गिट मेलिंग सूची संग्रह में नहीं मिल रहा है। मुझे लगता है कि मैं इसकी रिपोर्ट करूंगा। –