2013-03-18 4 views
10

मैं विंडोज़ पर गिट के साथ काम कर रहा हूं, और मेरे पास मेरे रेपो में एक फाइल है, "foo.txt" कहें। आज मैं इस फ़ाइल को "Foo.txt" (अपरकेस) में बदलना चाहता था। जैसा कि this SO question में सुझाया गया है, मैंने git mv -f foo.txt Foo.txt का उपयोग किया, जिसने वांछित परिणाम उत्पन्न किया। मैं को मेरे रेपो में बदलाव करने के लिए आगे बढ़ गया।
संपादित करें: मैं इसे स्थायी परिवर्तन करना चाहता हूं, और फिर भी इस परिवर्तन को पूर्ववत करने वाले चेकआउट करने में सक्षम हूं। आसपास मैंने पाया मेरी .git/config फ़ाइल निम्न सेटिंग थी किविंडोज़ पर गिट: फ़ाइल का नाम बदलने के बाद शाखा स्विच नहीं कर सकता (केवल बदले गए मामले)

# I'm on branch1 
git checkout branch2 
Aborting 
error: The following untracked working tree files would be overwritten by checkout: 
Foo.txt 
Please move or remove them before you can switch branches. 

कुछ poking के बाद:

[core] 
    ignorecase=false 

को यह बदलने

हालांकि, उस के बाद मैं शाखा स्विच करने के लिए कोशिश कर रहा पर एक त्रुटि का सामना करना पड़ा सच इस मुद्दे को ठीक करने लगता है और मुझे शाखाओं के बीच सामान्य के रूप में बदलने की अनुमति देता है।

तो इस संबंध में, मैं जानना चाहूंगा:

  1. वहाँ इस सेटिंग का कोई प्रतिकूल प्रभाव है? क्या यह हमेशा विंडोज़ पर सच होना चाहिए? क्या होगा यदि मैं अन्य देवताओं के साथ काम कर रहा हूं और उनके पास समान मूल्य सेट नहीं है?
  2. क्या इस सेटिंग को बदलने के बिना फ़ाइल का नाम बदलने का कोई और तरीका है?
  3. यह पहली जगह क्यों होता है? जब मैंने परिवर्तन किया, तो गिट ने सही ढंग से पहचाना कि फाइल वास्तव में बदल दी गई थी (एक फ़ाइल को हटाया नहीं था और फिर एक और जोड़ें)। तो जब मैंने शाखाओं को स्विच करने की कोशिश की तो वास्तव में क्या हुआ?

धन्यवाद!

उत्तर

1

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

संपादित करें: जैसा कि अवीव ने इंगित किया है, मेरा प्रस्तावित कामकाज स्थायी रूप से समस्या को हल नहीं करता है। मैं अभी भी इस उत्तर को नहीं हटाऊंगा क्योंकि यह कुछ मामलों में एक अस्थायी हॉट-फ़िक्स के रूप में मदद कर सकता है।

+0

इसका मतलब यह होगा कि जब भी मैं शाखा को बदलना चाहता हूं, तब तक मैं फ़ाइल को हटाना चाहता था, अब तक हमेशा तक। सही? ऐसा लगता है कि असुविधाजनक ... – avivr

+0

क्या आपने वास्तव में इसे आजमाया था? मेरे मामले में यह काम करता था, लेकिन मैं दावा नहीं करूँगा कि मैं आपकी स्थिति को पूरी तरह से पुन: पेश कर सकता हूं – bigge

+0

हां, मैंने कम से कम यह मान लिया कि मैं आपको सही ढंग से समझ गया हूं। मैंने फ़ाइल को गिट के साथ बदल दिया, फिर परिवर्तन किया। फिर मैंने फ़ाइल को हटा दिया (बस 'आरएम' के साथ) और इसे पुनर्स्थापित करने के लिए' गिट चेकआउट 'का उपयोग किया। उसके बाद, शाखा बदलते समय एक ही त्रुटि। – avivr

2

जैसा कि "Unresolvable Git error: The following untracked working tree files would be overwritten by checkout" में उल्लिखित है, core.ignorecase से true सेटिंग चेकआउट को आगे बढ़ने की अनुमति देने का एक वैध तरीका है।

लेकिन मैं "GIT: The following untracked working tree files would be overwritten by checkout" के रूप में, पसंद करेंगे करने के लिए,:

  • git add मैं सिर्फ क्या संशोधित,
  • git stash (आपके मामले में, git mv हो सकता है पहले से ही सूचकांक में बदला गया फ़ाइल जोड़ा) सूचकांक
  • git checkout -b anotherBranch की बचत: अगर आपको लगता है कि नया सूचकांक पर मामले परिवर्तन पुनर्स्थापित करना चाहते हैं यह, के बाद से सूचकांक साफ है
  • git stash pop काम करना चाहिए।
+0

ठीक है, लेकिन मैं नाम बदलना चाहता हूं। समस्या यह है कि यदि मैं करता हूं, तो मैं उसके बाद शाखाएं नहीं बदल सकता। – avivr

+0

@avivr आप 'core.ignore' सेट के साथ 'झूठी' पर भी प्रतिबद्ध होने के बाद स्विच नहीं कर सकते हैं? – VonC

+0

नहीं, जैसा कि मैंने कहा था, अगर मैं सत्य पर सेट करता हूं तो मैं केवल शाखा स्विच कर सकता हूं। इसके अलावा, मैंने आपके जैसा नाम बदलने के बाद, मुझे स्टैश पॉप करने की कोशिश करते समय भी वही त्रुटि मिली। तो छेड़छाड़ "अप्राप्य" थी और मुझे इसे छोड़ना पड़ा। – avivr

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