मैं एक डायरेक्टरी के कैपिटलाइज़ेशन को बदल देता हूं और Git उस पर नहीं लगता है


139

मैं OS X शेर पर एक परियोजना विकसित कर रहा हूं जो Git संस्करण नियंत्रण में है। मेरे पास ये लोअरकेस निर्देशिकाएं थीं और फिर बाद में उन्हें कैपिटल किया गया (उदाहरण के लिए emailaddresses => EmailAddresses), लेकिन Git परिवर्तन को पहचानता नहीं है। यह अभी भी सोचता है कि जब मैं चलता हूं तो निर्देशिकाएं कम होती हैंgit ls-files और अन्य कमांड ।

क्या यह हानिरहित है, या मुझे इस बदलाव को लेने के लिए कुछ और करना चाहिए?



इसने 2 दिनों के लिए मेरे लिए भ्रम पैदा कर दिया। अब मैं समझ गया। इस प्रश्न के लिए Thnx
945

जवाबों:


199

आप शायद केस असंवेदनशील (लेकिन केस संरक्षण) HFS + का उपयोग कर रहे हैं। मैं आमतौर पर इस तरह काम करता हूं:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
यह वही मुद्दा है जो मेरे पास है, और यही मैं करता हूं।
fernferret

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

9
या यह एक आदेश में कार्य करें: Git mv --force SomeName SomeName (से stackoverflow.com/a/16071375/217866 )
jackocnr

1
दूरस्थ रेपो में परिलक्षित होने वाले परिवर्तनों के लिए भी आपको इसकी आवश्यकता है git push origin master। अगर git रिमोट को अपडेट करने से इंकार करता है तो आपको डमी फ़ाइल (जैसे touch stam) जोड़ने और पुश करने की आवश्यकता हो सकती है । बाद में स्टैम को हटाकर फिर से पुश करें।
राहव

2
ध्यान देने वाली एक बात यह है कि आपको उस फ़ोल्डर में रहना होगा जहाँ फ़ाइल काम करने के लिए है। यह मेरे लिए पहले स्पष्ट नहीं था और मैं >>> खराब स्रोत, स्रोत = somename, गंतव्य = tmpname <<< प्राप्त करता रहा क्योंकि मैं रेपो की जड़ से कमांड को चलाने की कोशिश कर रहा था।
पार्थ तामने

280

आप चलकर मामले का हिसाब लेने की बात कह सकते हैं

git config core.ignorecase false


4
यदि आप पहले से ही git mv --force या कुछ अन्य CL स्क्रिप्ट का उपयोग किए बिना फ़ाइल नाम बदल चुके हैं तो वास्तव में बहुत अच्छा जवाब। धन्यवाद!
मीनमाट

4
यह श्रेष्ठ उत्तर है क्योंकि मुझे विशेष रूप से 200 नाम वाली फाइलों को मैन्युअल रूप से git mv'ing की तरह महसूस नहीं हुआ था!
एडम रीस

1
सहमत थे कि यह शीर्ष उत्तर होना चाहिए। धन्यवाद।
होमरपालाटा

1
किसी कारण से इसने सभी फाइलों को डुप्लिकेट कर दिया, अब मेरे पास मूल संस्करण हैं और पूंजीकरण वाले दोनों बदल गए हैं ...
सलाटील

1
जब आप पहले से ही फ़ाइल ट्रैक कर रहे हैं, तो @ मुझे लगता है कि यह उन्हें डुप्लिकेट करता है।
Iggy

36

मैक केस-सेंसिटिवली पर gv mv कैसे करें

यह इसलिए हो रहा है क्योंकि मैक ओएस एक्स लागू करने के मामले में संरक्षण और असंवेदनशीलता के मामले हैं जो आपकी मदद करने के लिए अभिप्रेत हैं।

यद्यपि अन्य उत्तर में दोहराए गए सुझाव काम करेंगे, मैं एक सर्वोत्तम अभ्यास परिणाम के लिए '--फोर्स' के उपयोग की सलाह देता हूं:

$ git mv --force somename SomeName


ध्यान दें: यदि आप बल विकल्प के बिना प्रयास करते हैं, तो git इस तरह से आपके ऊपर रोक देगा:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

उपरोक्त उदाहरण में, git कमांड विफल रहता है और कोई फाइल फाइल सिस्टम में या git के इंडेक्स में नहीं बदली जाती है।


पहले आदेश पर, मुझे मिलता है fatal: not under version control
2040625

उस घातक त्रुटि का मतलब है कि आपके पास उस स्थान पर GIT रिपॉजिटरी नहीं है। gitGIT रिपॉजिटरी के साथ निर्देशिकाओं में केवल काम करता है।
डेविड मैनपेल

लेकिन मैं अपने गिट रेपो के एक उपनिर्देशिका में था ... अंत में, मैंने इसे तरन के जवाब , बीटीडब्ल्यू के माध्यम से हल किया । धन्यवाद।
2540625

19

अपनी .gitconfig फ़ाइल में git config विकल्प core.ignorecase को असत्य में बदलने का प्रयास करें।


4
या लिखनाgit config core.ignorecase false
iforgotmypassword

2
@iforgotmypassword = आप इसका उत्तर दिया जाना चाहिए था - मैं वास्तव में आप के लिए वोट दिया है |
Abdeali Chandanwala

4

निम्नलिखित चरणों ने मुझे समस्या को हल करने में मदद की:

  1. फ़ोल्डर का नाम बदलें temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. मंच और प्रतिबद्ध:

    git add .
    git commit -m "Temp"
    
  3. tempअपनी पसंद के अनुसार फ़ोल्डर का नाम बदलें :

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

हो गया - अब आप धक्का दे सकते हैं।


1

यदि आप करते हैं git mv AAA aaaया git mv -f AAA aaa, यह काम नहीं करेगा और आपको त्रुटि होगीfatal: renaming 'AAA' failed: Invalid argument

क्योंकि AAAऔर aaaकर रहे हैं एक ही फ़ोल्डर / केस-संवेदी फाइल सिस्टम पर फ़ाइल, इस कदम AAAके लिए aaaसाधन के लिए कदम AAAके रूप में aaa/AAA

तो आपको करना चाहिए

git mv AAA aaa.1
git mv aaa.1 aaa

मुझे उम्मीद है कि यह आपके लिए उपयोगी होगा।


1

इसका कारण यह है कि LINUX- आधारित OS या macOS फ़ाइल / फ़ोल्डर नाम के लिए संवेदनशील केस को अनदेखा करता है। हमें नीचे दिए चरणों द्वारा इस समस्या को हल करने की आवश्यकता है

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

इनमें से किसी भी समाधान ने मेरे लिए काम नहीं किया। SourceTree हमेशा से अपनी शाखा बना रहा था कि मैं क्या चाहता था। तो मैंने इसे कैसे हल किया:

1 - खोजक पर अपनी git फ़ाइलों को देखें। आप इसे टर्मिनल पर टाइप करके कर सकते हैं:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - खोजक को फिर से लॉन्च करें और अपनी परियोजना निर्देशिका पर जाएं

3 - अब बस अपने फोल्डर का नाम बदल दें, आइए फीचर से फीचर तक कहते हैं। और वहां तुम जाओ।


0

आप इसे जीआईटी कमांड का उपयोग किए बिना मैन्युअल रूप से भी कर सकते हैं। .gitफ़ोल्डर के अंदर , बस फ़ोल्डर को उस नाम से हटा दें जिसे आप चाहते हैं SomeName। और फिर फ़ोल्डर somenameका नाम बदलें SomeName। अधिक विवरण: कैसे अपरकेस पर सेट फ़ोल्डर नाम को ठीक करें और लोअरकेस में बदलें


0

मेरे पास एक ही मुद्दा था और नीचे दिए गए समाधान का उपयोग करें। मैं बैच, निर्देशिका और फ़ाइल नाम आदि के लिए इसका उपयोग करता हूं:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

जैसा यहाँ विस्तृत है।


0

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

जिस तरह से मैं इसे ठीक कर सकता था वह मेरी स्थानीय शाखा को हटा रहा था और रिमोट की जाँच कर रहा था।

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