क्या मामला संवेदनशील नहीं है?


96

मेरे आंशिक नाम की पहली प्रतिबद्धता में _Electronicsइसे बड़े अक्षरों से लिखा गया था, फिर मैंने इसे बदल दिया_electronics

साइबरविन के तहत गिट ने नए नाम को शुरू करने के बाद मामले को नजरअंदाज कर दिया, इसलिए मैंने लक्ष्य रेपो में हाथ से नाम बदल दिया।

अब यह कभी-कभी कमिटेड _electronicsआंशिक को बदल देता है_Electronics

मैंने क्या गल्त किया है?


9
आप किस ओएस पर हैं?
कीथ थॉम्पसन

10
आप किस फ़ाइल सिस्टम का उपयोग कर रहे हैं?
एंड्रयू मार्शल

साइबरविन के साथ विंडोज। मेरा सर्वर उबंटू लिनक्स चलाता है। फ़ाइल सिस्टम नहीं जानता, मुझे लगता है कि एक्स 3 या एक्सट 2 - मेरे प्रदाता ने न्यूनतम इंस्टॉलेशन को कॉन्फ़िगर किया था।
JAkk

क्या आपको खुशी नहीं हुई कि विंडोज ने केस-संवेदी नहीं होने का फैसला किया?
कैस्केबेल

4
विंडोज केस असंवेदनशील है, लेकिन कभी-कभी (अधिक बार आज) केस संरक्षण
एरफैंगियन

जवाबों:


73

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

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

यह उनके द्वारा किए गए परिवर्तन करने का एक स्पष्ट तरीका है, फिर कमिट्स को ढहाना। यह करने के लिए एक छोटा सा तरीका है कि सूचकांक और काम करने वाले फ़ोल्डर को एक में हेरफेर करना है:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

यह निर्देशिका के नामों को समायोजित करने से संबंधित है: git mv और केवल निर्देशिका के मामले में परिवर्तन


ऐसा लगता है कि यह सही था (सिवाय इसके कि मैं बड़े अक्षरों से नीचे की ओर बदल रहा था)
JAkk

मैंने इसे देखा, जब तक मैं
साइबरविन के

आप बस कर सकते हैं git mv file.txt File.txt। यकीन नहीं होता कि यह एक नया git फीचर है।
फिल

107

यह core.ignorecaseकॉन्फ़िगरेशन मान पर निर्भर करने जा रहा है , जो केस-संवेदी फाइलसिस्टम में झूठे और विंडोज पर एमएसआईजिट में सच है।

core.ignorecase

यदि यह सच है, तो यह विकल्प विभिन्न वर्कअराउंड को सक्षम बनाता है जो कि फाइल सिस्टम पर बेहतर काम करने में सक्षम बनाता है जो कि एफएटी की तरह संवेदनशील नहीं होते हैं। उदाहरण के लिए, यदि कोई निर्देशिका सूची "मेकफाइल" पाता है, जब git "मेकफाइल" की अपेक्षा करता है, तो git यह मान लेगा कि यह वास्तव में एक ही फाइल है, और इसे "मेकफाइल" के रूप में याद रखना जारी रखें।

डिफ़ॉल्ट गलत है, सिवाय गिट-क्लोन (1) या गिट-इनिट (1) की जांच करेगा और कोर सेट करेगा। यदि सही है तो रिपॉजिटरी बनाए जाने पर उपयुक्त।

इस उत्तर में अधिक विस्तार से गिट में फ़ाइलनामों के पूंजीकरण को बदलना


79
यह सही उत्तर imo है। मुझे भविष्य के लिए, git config --unset-all core.ignorecase && git config --system core.ignorecase falsesudo के साथ उपयोग करें ।
ज़र्नकस

2
ditto to James, @Znarkus ने OS X पर इस समस्या के लिए फिक्स की पहचान की है, धन्यवाद!
क्रेग नाकामोटो

1
@Znarkus विंडोज पर भी काम करता है। सुंदर।
ऑर्लेड

9
@Znarkus, OSX पर ऐसा करने में समस्या यह है कि जब आप खोजक के माध्यम से एक फ़ाइल का नाम बदलते हैं, और केवल मामले को बदलते हैं, तो git नाम बदला हुआ संस्करण पूरी तरह से नई फ़ाइल के रूप में देखेगा, लेकिन यह एक "डिलीट" उत्पन्न नहीं करता है फ़ाइल के पुराने संस्करण के लिए कार्रवाई। इसलिए यदि आप जिठब करने के लिए प्रतिबद्ध और धक्का देते हैं, तो जीथब के पास पुरानी-नामित और नई-नाम वाली दोनों तरह की फाइल होगी, लेकिन आपके स्थानीय सिस्टम में सिर्फ नई फाइल होगी, और गिट कोई भी समझदार नहीं होगा।
ivanreese

2
@spiralganglion OSX पर वेब देव के लिए मैं वास्तव में एक केस संवेदनशील विभाजन बनाने की सिफारिश कर सकता हूं और फिर इसे अपने www निर्देशिका के रूप में माउंट कर सकता हूं ।
ज़्नर्कस

23

यह बहुत आसान है:

git mv Electronics electronics -f
git commit -m "That was easy!"

1
क्या आपने एक असंवेदनशील फाइल सिस्टम पर यह कोशिश की थी?
एडवर्ड थॉमसन

1
मैंने शुरू में इसे मूल पोस्टर के रूप में पढ़ा था जो एक फ़ोल्डर के केस-बदलते नाम का प्रदर्शन करने की कोशिश कर रहा था, न कि एक फ़ाइल। अब जब मैंने इसे फिर से पढ़ा है, तो यह स्पष्ट नहीं है। दरअसल, mv -fएक फाइल के लिए काम करेगा।
एडवर्ड थॉमसन


0

मेरे परिदृश्य में मेरे पास दो फ़ोल्डर थे testsऔर Testsजो गिथब में दो अलग-अलग फ़ोल्डरों के रूप में दिखाया गया था लेकिन Testsविंडोज में एक एकल फ़ोल्डर। मेरा उद्देश्य उन दोनों को मिलाना था tests

मैंने निम्नलिखित दृष्टिकोण का उपयोग किया:

  1. एक नया फ़ोल्डर बनाएं temp
  2. से सभी सामग्री को कॉपी Testsकरने के लिएtemp
  3. हटाएं Tests
  4. निष्पादित git rm Tests -r
  5. नाम बदलें tempकरने के लिएtests

0

मैंने मुद्दे को हल करने की कोशिश की है और यह विंडोज 10 पर सफल रहा

मान लीजिए कि बिटबकेट टेस्ट और टेस्ट पर दो फोल्डर हैं, लेकिन जब मैं डिस्क पर रेपो क्लोन करता हूं तो यह केवल टेस्ट बनाता है और मैं टेस्ट को सिंगल फोल्डर के रूप में रखना चाहता हूं जिसमें सभी फाइलें होती हैं।

मुझे कमांड लाइन git mv TEST test1 -f git mv text1 test -f git कमिट "-नाम" ... जीआईटी पुश पर निम्नलिखित कमांड निष्पादित करने की आवश्यकता होगी

अब आप देखेंगे कि बिटकॉइन पर फ़ोल्डर पदानुक्रम को सही किया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.