विंडोज पर फ़ाइल का मामला बदलें?


209

हमारे गिट-नियंत्रित कोडबेस में कुछ फाइलें हैं जिनका मैं नाम बदलना चाहूंगा। विशेष रूप से, मैं केवल फ़ाइल के मामले को बदलना चाहता हूं, इसलिए वह उदाहरण के लिए, sourceCode.javaबन जाता है SourceCode.java। पकड़: मैं एक विंडोज बॉक्स पर हूं, और फाइलसिस्टम को लगता है कि वे एक ही फाइल नाम हैं।

उस परिवर्तन को पहचानने और उसमें जाँच करने के लिए मुझे विंडोज और गिट कैसे मिल सकते हैं?


3
Git 2.0.1+ (जून 2014) के बाद से, एक साधारण git mvको काम करना चाहिए ( stackoverflow.com/a/24979063/6309 )। विंडोज पर भी।
वॉनक

जवाबों:


337

इसे करने के तरीके के बारे में अधिक संकेत के लिए यहां एक नज़र डालें:

मामले में परिवर्तन को कैसे अनदेखा करें?

या:

git mv -f name.java Name.java

8
एक तरफ के रूप में यह एक FAT फाइल सिस्टम पर काम नहीं करता है। मैं कुछ प्रोजेक्ट कोड को एक अंगूठे ड्राइव पर ले जाता हूं और मामले में बदलाव एक वास्तविक दर्द है।
एएसएम

1
यह मेरे लिए NTFS सिस्टम और विंडोज 10
रोबोब्लोब

1
यह निश्चित रूप से इसे करने का सही तरीका है लेकिन, यदि आपको बहुत सारी फ़ाइलों का नाम बदलने की आवश्यकता है, तो यह थकाऊ हो सकता है। यदि आप पहले से ही उन्हें फ़ाइल सिस्टम में किसी भी तरह से नया नाम दे चुके हैं और आप केवल उन परिवर्तनों को कम करना चाहते हैं, तो आप कुछ मूल फ़ोल्डर का नाम बदल सकते हैं, git addउस नए नामांकित फ़ोल्डर का एक ऐसा कर सकते हैं , क्या नहीं करें, फ़ोल्डर का नाम वापस बदल दें, जो यह होना चाहिए , git addयह फिर से और फिर प्रतिबद्ध।
ओकोनोमियाकी 3000

NTFS और विंडोज 7 पर काम करता है
हंस गोल्डमैन

क्या थोक में ऐसा करना संभव है? Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
शक्तियां के

49

यदि आप एक FAT फाइल सिस्टम पर हैं, तो आपका एकमात्र विकल्प दो चरण का नाम बदलना है:

  1. नाम बदलें sourceCode.javaकरने के लिएanything.you.like
  2. नाम बदलें anything.you.likeकरने के लिएSourceCode.java

उन दिनों में जब हमने पेरफोर्स का इस्तेमाल किया था, तब हमारे पास यह समस्या थी और यह एकमात्र समाधान था जिसके साथ हम आ सकते थे।


13
बस दूसरों के लिए एक नोट: यह बीच में करने के लिए आवश्यक नहीं है, लेकिन परिवर्तन को नोटिस करने के लिए सूचकांक में जोड़ना आवश्यक है
arberg

29

निम्न चरणों ने मुझे विंडोज पर केस बदलने की अनुमति दी:

  • जोड़े ignorecase = falseको [core]में .git/config;
  • उन फ़ाइलों को स्थानांतरित करें जिन्हें आप अपनी परियोजना निर्देशिका से बाहर करने जा रहे हैं;
  • इंडेक्स में डिलीट जोड़ें;
  • सभी फ़ाइलों को उनके मूल स्थान पर वापस ले जाएं और फ़ाइलों और / या निर्देशिकाओं के मामले को बदल दें;
  • सूचकांक में सभी "नई" फाइलें जोड़ें;
  • ignorecase = falseपहले चरण में जोड़ा गया निकालें ।

इस तरह आपके पास एक एकल प्रतिबद्ध है जिसमें नाम शामिल है और यह पूरी निर्देशिका को बदलना आसान बनाता है।


5
स्नान वैश्विक और स्थानीय सेटिंग के लिए करें: $ gti config --global core.ignorecase false $ gti config core.ignorecase false
रोमन इवानोव

6

सावधान रहे। ऐसा करने से वे परिवर्तन हो सकते हैं जो विलय के लिए असंभव हैं। विंडोज पर विलय होने पर Git भ्रमित हो जाता है क्योंकि यह तय नहीं कर सकता है कि पुराना अपरकेस नाम और नया लोअरकेस नाम एक ही फाइल है या नहीं (Git के लिए वे नहीं हैं, लेकिन फाइलसिस्टम के लिए वे हैं)। मर्ज करने के लिए आपको कुछ मैनुअल वर्कअराउंड करना होगा जैसे कि मर्ज करने से पहले फाइल को डिलीट करना।

एक ही नाम की फ़ाइलों के साथ Git रिबास समस्या देखें, लेकिन अलग मामला

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


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

3

मेरी राय में एक सरल तरीका याद आ रहा है। आप इसे एकल फ़ाइल, एक विशिष्ट निर्देशिका या संपूर्ण रिपॉजिटरी के लिए भी कर सकते हैं:

git rm --cached <file name or directory>
git add <file name or directory>

यदि आप उप-निर्देशिकाओं को भी प्रभावित करना चाहते हैं, तो आपको -rध्वज का उपयोग करना होगा :

git rm -r --cached <directory>
git add <directory>

सचमुच सबसे सरल।
रानू

यह फ़ाइल के पूरे इतिहास को खो देता है, क्योंकि यह पूरी तरह से नए के रूप में git द्वारा सेट किया गया है।
अलेजांद्रो

@ एलेजैंड्रो जो आप कहते हैं वह गलत है। मैंने सिर्फ इसका परीक्षण किया और बिना किसी समस्या के नाम बदलने को मान्यता दी। जैसा कि अन्य मामलों में फ़ाइल को इंडेक्स में हटाए गए / नए के रूप में दिखाया गया है, लेकिन कमिट करते समय, नोटिस, कि इसे अभी नाम दिया गया है।
नेल्स-ओ-मैट

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