मैं केस-संवेदी परिवर्तन को केवल Git में कैसे बदला जा सकता है?


1300

मैंने पहले अक्षर को डी-कैपिटलाइज़ करके कुछ फ़ाइलों का नाम बदल दिया Name.jpgहै name.jpg। Git इस परिवर्तनों को नहीं पहचानता है और मुझे फ़ाइलों को हटाना और उन्हें फिर से अपलोड करना था। क्या कोई ऐसा तरीका है जो फ़ाइल नामों में परिवर्तन की जाँच करते समय Git केस-संवेदी हो सकता है? मैंने स्वयं फ़ाइल में कोई परिवर्तन नहीं किया है।


4
@ यह बिल्कुल सही नहीं है, Git में वास्तव में एक कॉन्फ़िगरेशन सेटिंग है जो नियंत्रित करती है कि क्या यह केस संवेदनशीलता को अनदेखा करता है या नहीं।


6
देखें stackoverflow.com/a/24979063/6309 : git 2.0.1 के बाद से, एक सरल git mvकाम करता है।
वॉन


इस पोस्ट को देखें। मैं प्रतिबद्ध था, लेकिन पैरामीटर के रूप में किसी भी फ़ाइल पथ के बिना सिर्फ git प्रतिबद्ध -m "msg" का उपयोग कर रहा था। इसने सूचकांक को अद्यतन किया और फ़ाइल में जाँच की। [लिंक] stackoverflow.com/questions/35790113/…
ARKS

जवाबों:


1513

आप git mv का उपयोग कर सकते हैं :

git mv -f OldFileNameCase newfilenamecase

12
यह मुझे देता है 'स्रोत निर्देशिका खाली है' जबकि यह नहीं है
समझदार स्ट्रॉबेरी

6
यहाँ MacOS का उपयोग करना (केस-असंवेदनशील FS) और -f ने काम किया! टिप के लिए धन्यवाद
caesarsol

49
हाल के संस्करणों में, आपको अब -fध्वज की आवश्यकता नहीं है ।
जोशुआ पिंटर

8
पूर्ण फ़ाइल पथ देने के लिए मत भूलना। जाहिर है, मुझे पता है, लेकिन मुझे थोड़ी देर के लिए मिला
rickrizzo

7
शीर्ष टिप्पणी मतदान करने के लिए: आप कर की जरूरत है -fनवीनतम Git (2.18) के साथ स्विच अन्यथा आप मिल सकता है fatal: destination existsत्रुटि।
डीपस्पेस101

1035

Git में एक कॉन्फ़िगरेशन सेटिंग है जो यह बताती है कि क्या मामला संवेदनशील या असंवेदनशील होना चाहिए core.ignorecase:। Git को केस-सेन्सटिव बताने के लिए, बस इस सेटिंग को falseनिम्न पर सेट करें :

git config core.ignorecase false

प्रलेखन

से git configप्रलेखन :

core.ignorecase

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

डिफ़ॉल्ट गलत है, सिवाय git-clone (1) या git-init (1) केcore.ignorecase जब रिपॉजिटरी बनाई जाएगी तो जांच करेगा और सही करेगा ।

केस-असंवेदनशील फ़ाइल-सिस्टम

दो सबसे लोकप्रिय ऑपरेटिंग सिस्टम में केस-असंवेदनशील फाइल सिस्टम हैं जो मुझे पता हैं

  • खिड़कियाँ
  • ओएस एक्स

9
एक साइड नोट पर, मुझे नहीं लगता कि मैक ओएस एक्स खुद केस-असंवेदनशील है। इसके बजाय, यह फाइलसिस्टम है जो केस-सेंसिटिविटी को निर्धारित करता है। एचएफएस + विभाजन को प्रारूपित करते समय, उपयोगकर्ता चुन सकते हैं कि यह केस-संवेदी है या असंवेदनशील। केस केस-असंवेदनशील डिफ़ॉल्ट है।
स्पाकार्की 21

225
इस उत्तर में यह बहुत ही ध्यान देने योग्य है कि falseकेस-असंवेदनशील फाइल सिस्टम पर इस विकल्प को सेट करना एक बुरा विचार है । यह स्पष्ट रूप से स्पष्ट नहीं है। उदाहरण के लिए, मैं सिर्फ अपने Mac पर इस की कोशिश की, यह सोच कर कि यह मेरे समस्याओं को ठीक होगा, तो से एक फ़ाइल का नाम बदला productPageCtrl.jsकरने के लिए ProductPageCtrl.js। नामक git statusएक नई फ़ाइल देखी, ProductPageCtrl.jsलेकिन यह नहीं सोचा productPageCtrl.jsथा कि हटा दिया गया था। जब मैंने नई फाइलें जोड़ीं, तो प्रतिबद्ध, और GitHub को धक्का दिया, GitHub रेपो में अब दोनों फाइलें समाहित हैं, भले ही मेरी (आज तक) स्थानीय रेपो में केवल एक ही थी।
मार्क अमेरी

5
@MarkAmery जो आपके Git क्लाइंट में बग की तरह लगता है। क्या आपने रिपोर्ट दर्ज की?
डोमी

24
@ डमी यह बग नहीं है, यह अपेक्षित व्यवहार है। यह वास्तव में एक असंवेदनशील फाइलसिस्टम पर झूठे को स्थापित करने के लिए एक बुरा विचार है क्योंकि ऐसा होता है। निचले-मामले की फ़ाइल को हटाने के लिए git ने ऐसा क्यों नहीं देखा, इसका कारण यह है कि फ़ाइल सिस्टम इसे हटाए जाने की रिपोर्ट नहीं करता क्योंकि यह मामले को अनदेखा करता है जबकि git इस विकल्प को गलत के साथ सेट नहीं करता है। यह नहीं है कि फ़ाइल नाम ntfs पर कम बनाम ऊपरी मामले में नहीं है या इसके सिर्फ फ़ाइल नाम देखने के मामले को अनदेखा कर रहा है।
ओहसीबी

15
@ डमी गिट काफी स्मार्ट है। Thats क्यों आप इसे एक मामले असंवेदनशील फ़ाइल सिस्टम पर झूठे के लिए सेट नहीं करना चाहिए । git mvफ़ाइल को स्थानांतरित करने के लिए उपयोग करें और देखें कि यह कैसे प्रबंधित करता है। यदि आप फ़ाइल को बिना git के स्थानांतरित करते हैं, तो कुछ भी नहीं है git कर सकता है क्योंकि फ़ाइल सिस्टम सच्चाई को नहीं बता रहा है। यह ntfs / fat / hfs और इसी तरह का मुद्दा है न कि git / linux का।
ओहसीबी

157

SourceTree का उपयोग करके मैं UI से यह सब करने में सक्षम था

  1. नाम बदलें FILE.ext करने के लिएwhatever.ext
  2. उस फाइल को स्टेज करें
  3. अब नाम बदलने whatever.ext के लिएfile.ext
  4. उस फाइल को फिर से स्टेज करें

यह थोडा थकाऊ है, लेकिन अगर आपको इसे केवल कुछ ही फाइलों में करने की आवश्यकता है तो यह बहुत जल्दी है


5
गिट बैश के साथ भी ऐसा ही है
एलेक्स78191

3
"स्टेज कि फाइल" महत्वपूर्ण हिस्सा है - ऊपर दिए गए अन्य उत्तरों में से कोई भी मेरे लिए काम नहीं करता है। यह वास्तव में सादे पुराने विंडोज कमांड प्रॉम्प्ट के साथ काम करता था।
व्लाद सबेव

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

3
फ़ोल्डर नाम पर gitkraken के साथ भी काम करता है।
फिलिप मैट्रे

मैंने इस थकाऊ काम को करने के लिए एक पायथन 3 स्क्रिप्ट लिखी: stackoverflow.com/a/58159822/4934640
उपयोगकर्ता

126

यह मैंने ओएस एक्स पर किया है:

git mv File file.tmp
git mv file.tmp file

दो कदम क्योंकि अन्यथा मुझे "फ़ाइल मौजूद है" त्रुटि मिली। शायद इसे एक चरण में जोड़कर --cachedया ऐसे किया जा सकता है ।


21
जैसा कि शीर्ष उत्तर से पता चलता है, -f(बल) वह ध्वज है जिसकी आप तलाश कर रहे हैं
rperryng

5
@rperryng - नहीं, -fध्वज इस मामले में मदद नहीं करता है कि अंतर्निहित FS केस-असंवेदनशील है। हालांकि, दो-चरण समाधान ने मेरे लिए काम किया
HEKTO

केस-असंवेदनशील FS (मैक पर) का उपयोग करना और -fकाम करना! टिप के लिए धन्यवाद
18

इसने -fझंडे के बिना खिड़कियों पर एक फ़ोल्डर के साथ भी काम किया ।
nich

git -c "core.ignorecase=false" add .उन फाइलों पर विचार करेंगे जिनके मामले को कमिट के लिए बदल दिया गया है।
नीतोनफिर

67

गीट की केस संवेदनशीलता को अस्थायी रूप से बदलने के लिए यह कभी-कभी उपयोगी होता है :

विधि # 1 - एकल आदेश के लिए केस संवेदनशीलता बदलें:

git -c core.ignorecase=true checkout mybranchएकल checkoutआदेश के लिए केस-संवेदनशीलता को बंद करना । या अधिक आम तौर पर :। (टिप्पणियों में यह सुझाव देने के लिए VonC को श्रेय।)git -c core.ignorecase= <<true or false>> <<command>>

विधि # 2 - कई आदेशों के लिए केस संवेदनशीलता बदलें:

सेटिंग को लंबे समय तक बदलने के लिए (जैसे कि कई कमांड को वापस बदलने से पहले चलाने की आवश्यकता है):

  1. git config core.ignorecase(यह वर्तमान सेटिंग लौटाता है, जैसे false)।
  2. git config core.ignorecase <<true or false>> - वांछित नई सेटिंग सेट करें।
  3. ... कई अन्य कमांड चलाएँ ...
  4. git config core.ignorecase <<false or true>> - अपने पिछले सेटिंग पर वापस कॉन्फ़िगर मान सेट करें।

1
सीधे क्यों नहीं git -c core.ignorecase=<true or false> checkout <<branch>>? बाद में रीसेट करने के लिए कुछ भी नहीं।
VonC

2
मेरे पास प्रस्तावित core.ignorecase का एक अजीब अनुभव था जब लोअरकेस से अपरकेस में बदल रहा था, लेकिन अपरकेस से लोअरकेस के लिए नहीं। लगता है कि एकमात्र विश्वसनीय समाधान एक ओएस का उपयोग बंद करना है जो फ़ाइल नाम के मामले को पहचानने में विफल रहता है।
आकांक्षीगुरु

क्या कोई कारण है कि यह एक अस्थायी परिवर्तन होना चाहिए? अगर मैं संवेदनशील मामलों में बदली गई सेटिंग्स को छोड़ दूं तो क्या इससे कोई समस्या होगी?
सायंटसनी २४'१

यह कुछ कारकों पर निर्भर हो सकता है, विशेष रूप से कि क्या लक्ष्य फाइल सिस्टम संवेदनशील है - en.wikipedia.org/wiki/Case_s संवेदनशीलता# In_filesystems देखें । अस्थायी परिवर्तन की आवश्यकता हो सकती है यदि परिनियोजन फ़ाइल सिस्टम में विकास के लिए उपयोग की गई फ़ाइल सिस्टम के लिए अलग-अलग केस संवेदनशीलता है। इसके अलावा मेरे मामले में मैं एक ऐसी टीम में काम करता हूं, जहां सभी से एक ही Git सेटिंग (यानी केस सेंसिटिव) होने की उम्मीद की जाती है, अगर मैं इसे बंद कर दूं तो इसे अस्थायी होना चाहिए।
स्टीव चैम्बर्स

44

OSX के तहत, इस समस्या से बचने और केस-असंवेदनशील फाइल सिस्टम पर विकसित होने के साथ अन्य समस्याओं से बचने के लिए, आप केस सेंसिटिव वर्चुअल ड्राइव / डिस्क इमेज बनाने के लिए डिस्क यूटिलिटी का उपयोग कर सकते हैं ।

डिस्क उपयोगिता को चलाएं, नई डिस्क छवि बनाएं, और निम्न सेटिंग्स का उपयोग करें (या जैसा चाहें बदल दें, लेकिन इसे संवेदनशील रखें):

मैक डिस्क उपयोगिता स्क्रीनशॉट

यह सुनिश्चित करने के लिए कि यह अब एक संवेदनशील एफएस केस पर है:

git config core.ignorecase false

15
नाह, परमाणु OSX पर पूरी तरह से केस-संवेदी बूट ड्राइव चला रहा है। आपको खराब लिखित (अहम, एडोब) ऐप्स के बिना रहना होगा, या उन पर अपने स्वयं के केस-बेवकूफ वीएम में चलना होगा, लेकिन यदि आप मुख्य रूप से * निक्स सिस्टम के लिए कोड करते हैं तो यह इसके लायक है।
माइक मारसैकी

1
यह एकमात्र विकल्प है जो ठीक से काम करता है। मैंने बाकी की कोशिश की है और आप एक अचार या किसी अन्य तरीके से समाप्त करते हैं। ऐसा करके समस्या को ठीक से हल करें।
जॉन हंट

2
ध्यान दें कि डिस्क उपयोगिता में एक बग OS X 10.11 है - यह केस संवेदी चित्र नहीं बनाएगा। आपको कमांड लाइन टूल हडुतिल का उपयोग करने की आवश्यकता है। Apple.stackexchange.com/questions/217915/…
dellsala

7
उच्च सिएरा में APFS के साथ यह और भी आसान है। प्लस के साथ ड्राइव के आइकन पर क्लिक करें और आकार के मामले में कोई सीमा नहीं के साथ केस-संवेदी वॉल्यूम जोड़ें। यह केवल मुख्य वॉल्यूम के साथ स्थान साझा करता है और / वॉल्यूम / वॉल्यूम-नाम पर माउंट करता है।
माइकल फॉक्स

21

मैंने अन्य उत्तरों से निम्नलिखित समाधानों की कोशिश की और उन्होंने काम नहीं किया:

यदि आपकी रिपॉजिटरी को दूरस्थ रूप से होस्ट किया जाता है (GitHub, GitLab, BitBucket), तो आप फ़ाइल को मूल (GitHub.com) पर पुनर्नामित कर सकते हैं और फ़ाइल का नाम ऊपर-नीचे तरीके से बाध्य कर सकते हैं।

GitHub से संबंधित निर्देश नीचे दिए गए हैं, हालांकि उनके पीछे सामान्य विचार किसी भी दूरस्थ रिपॉजिटरी-होस्टिंग प्लेटफ़ॉर्म पर लागू होना चाहिए। इस बात का ध्यान रखें कि आप जिस फ़ाइल के मामलों का नाम बदलने का प्रयास कर रहे हैं, वह यह है कि क्या वह फ़ाइल प्रकार है जो GitHub ब्राउज़र के भीतर संपादन योग्य (कोड, पाठ, आदि) या uneditable (छवि, बाइनरी, आदि) के रूप में है।

  1. GitHub.com पर जाएं
  2. GitHub.com पर अपनी रिपॉजिटरी पर नेविगेट करें और उस शाखा का चयन करें जिसमें आप काम कर रहे हैं
  3. साइट के फ़ाइल नेविगेशन टूल का उपयोग करके, उस फ़ाइल पर नेविगेट करें जिसे आप नाम बदलना चाहते हैं
  4. क्या GitHub आपको ब्राउज़र के भीतर फ़ाइल को संपादित करने की अनुमति देता है?
    • a।) संपादन योग्य
      1. "इस फ़ाइल को संपादित करें" आइकन पर क्लिक करें (यह एक पेंसिल की तरह दिखता है)
      2. फ़ाइल नाम पाठ इनपुट में फ़ाइल नाम बदलें
    • बी।) अप्राप्य
      1. एक नए टैब में "डाउनलोड" बटन खोलें और फ़ाइल को अपने कंप्यूटर पर सहेजें
      2. डाउनलोड की गई फ़ाइल का नाम बदलें
      3. GitHub.com के पिछले टैब में, "इस फ़ाइल को हटाएं" आइकन पर क्लिक करें (यह ट्रैशकेन जैसा दिखता है)
      4. " branchnameशाखा में सीधे प्रतिबद्ध करें" सुनिश्चित करें कि रेडियो बटन चयनित है और "प्रतिबद्ध परिवर्तन" बटन पर क्लिक करें
      5. GitHub.com पर उसी निर्देशिका के भीतर, "फ़ाइलें अपलोड करें" बटन पर क्लिक करें
      6. अपने कंप्यूटर से नाम बदला हुआ फ़ाइल अपलोड करें
  5. " branchnameशाखा में सीधे प्रतिबद्ध करें" सुनिश्चित करें कि रेडियो बटन चयनित है और "प्रतिबद्ध परिवर्तन" बटन पर क्लिक करें
  6. स्थानीय रूप से, चेकआउट / ब्रांच / ब्रांच को खींचें
  7. किया हुआ

मैंने सीधे BitBucket का नाम बदला और इसने काम किया। धन्यवाद।
rsc

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

उन फ़ाइलों के लिए काम नहीं करता है जो ब्राउज़र में संपादित नहीं की जा सकती हैं, जैसे चित्र या पीडीएफ; कोई संपादन विकल्प नहीं है, जाहिर है।
अभिजीत सरकार

@अभिजीतसरकर अच्छी बात। मैंने उन मामलों के लिए अपना जवाब अपडेट किया। मैंने इन निर्देशों का परीक्षण किया और सत्यापित किया।
गमबेन

किसी को इस तरह एक निर्देशिका का नाम बदलने का प्रबंधन?
सोलविटिग

20

@ सिजमैन के जवाब के समान, यह वही है जो ओएसएक्स पर मेरे लिए काम करता है जब एक निर्देशिका का नाम बदल कर ( इस पोस्ट से इस उत्तर से प्रेरित ):

git mv CSS CSS2
git mv CSS2 css

बस git mv CSS cssअवैध तर्क त्रुटि दे रहा है : fatal: renaming '/static/CSS' failed: Invalid argumentशायद क्योंकि OSX की फाइल सिस्टम असंवेदनशील है

Ps BTW यदि आप Django का उपयोग कर रहे हैं, तो सामूहिक भी मामले के अंतर को नहीं पहचान पाएंगे और आपको स्टैटिक रूट डायरेक्टरी में भी उपरोक्त, मैन्युअल रूप से करना होगा।


18

1) फ़ाइल Name.jpgका नाम बदलेंname1.jpg

2) प्रतिबद्ध फ़ाइल को हटा दें Name.jpg

3) फ़ाइल name1.jpgका नाम बदलेंname.jpg

4) name.jpgपिछले प्रतिबद्ध करने के लिए फ़ाइल जोड़ा गया

git add
git commit --amend

2
मुझे यह fatal: bad source, source=name1.jpg, destination=name.jpgचरण 3 पर मिल रहा है । क्या आपके पास सुझाव है? Thx
एंथनी काँग

1
आप कमिट नहीं कर सकते, बस git add
1778 में एलेक्स78191

बहुत हैकी लगता है, है ना? या बंदर-पेटिंग।
जेरोमेज

18

मैंने निम्नलिखित चरणों का उपयोग किया:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning untracked files"
git push origin master

मेरे लिए एक सरल उपाय है


इसका उपाय है। और दूसरे उत्तरों के विपरीत जब आप बैच का नाम बदल रहे हैं तो यह अच्छी तरह से काम करता है। Glamourphilly.org पर हमें प्रत्येक .Jpg से .jpg को बदलने की आवश्यकता थी। खोजक में आप इस तरह से बैच का नाम बदल सकते हैं और यह उत्तर आपको इसकी जांच करने देता है।
विलियम एंट्रीकेन

11

हम git mv कमांड का उपयोग कर सकते हैं। नीचे दिए गए उदाहरण, अगर हमने फ़ाइल का नाम बदलकर abcDEF.js को abcdef.js कर दिया है, तो हम टर्मिनल से निम्न कमांड चला सकते हैं

git mv -f .\abcDEF.js  .\abcdef.js

8

मैक OSX हाई सिएरा 10.13 इसे कुछ हद तक ठीक करता है। बस अपनी git परियोजनाओं के लिए एक वर्चुअल APFS विभाजन बनाएं, डिफ़ॉल्ट रूप से इसकी कोई आकार सीमा नहीं है और इसमें कोई स्थान नहीं है।

  1. डिस्क उपयोगिता में, कंटेनर डिस्क का चयन करते समय + बटन पर क्लिक करें
  2. प्रारूप के तहत APFS (केस-सेंसिटिव) का चयन करें
  3. नाम दें Sensitive
  4. फायदा
  5. वैकल्पिक: संवेदी नामक एक फ़ोल्डर बनाएं gitऔरln -s /Volumes/Sensitive/git /Users/johndoe/git

आपकी ड्राइव अंदर होगी /Volumes/Sensitive/

यहां छवि विवरण दर्ज करें

मैं केस-संवेदी परिवर्तन को केवल Git में कैसे बदला जा सकता है?


मुझे यह सुझाव बहुत पसंद है, यह बदसूरत और दर्द रहित रूप से समस्या का हल करता है बिना बदसूरत वर्कअराउंड के। धन्यवाद!
फिल गिलेहॉर्न

4

मैं इस मुद्दे पर कई बार MacOS का सामना कर चुका हूं। Git केस सेंसिटिव है लेकिन Mac केवल केस प्रोटेक्टिंग है।

कोई व्यक्ति एक फ़ाइल करता है: Foobar.javaऔर कुछ दिनों के बाद इसका नाम बदलने का फैसला करता है FooBar.java। जब आप नवीनतम कोड खींचते हैं तो यह विफल हो जाता हैThe following untracked working tree files would be overwritten by checkout...

एकमात्र विश्वसनीय तरीका जो मैंने देखा है कि यह ठीक करता है:

  1. git rm Foobar.java
  2. इसे एक संदेश के साथ प्रतिबद्ध करें जिसे आप मिस नहीं कर सकते git commit -m 'TEMP COMMIT!!'
  3. खींचें
  4. यह संघर्ष को मर्ज करने के लिए आपको एक संघर्ष पैदा करेगा - क्योंकि आपके परिवर्तन ने इसे हटा दिया, लेकिन अन्य परिवर्तन का नाम बदल दिया गया (इसलिए समस्या)
    1. अपना परिवर्तन स्वीकार करें जो 'विलोपन' है
    2. git rebase --continue
  5. अब आप अपने तरीके को छोड़ git rebase -i HEAD~2औरdropTEMP COMMIT!!
  6. पुष्टि करें कि फ़ाइल अब कहा जाता है FooBar.java

3

जब आपने बहुत सारे फ़ाइल का नामकरण किया है और इसमें से कुछ सिर्फ आवरण का एक परिवर्तन है, तो यह याद रखना मुश्किल है कि कौन सा है। फ़ाइल को मैन्युअल रूप से "जिट मूविंग" करना कुछ काम हो सकता है। तो मैं अपने फ़ाइल नाम परिवर्तन कार्यों के दौरान क्या करूंगा:

  1. सभी गैर-गिट फ़ाइलों और फ़ोल्डर को एक अलग फ़ोल्डर / रिपॉजिटरी में हटा दें।
  2. वर्तमान खाली git फ़ोल्डर को कम करें (यह डिलीट की गई सभी फाइलों के रूप में दिखाई देगा।)
  3. सभी फ़ाइलों को मूल गिट फ़ोल्डर / रिपॉजिटरी में वापस जोड़ें।
  4. वर्तमान गैर-खाली git फ़ोल्डर।

यह उन सभी मामलों को ठीक कर देगा जो यह पता लगाने की कोशिश किए बिना कि आपने कौन सी फ़ाइलों या फ़ोल्डरों का नाम बदला है।


git commmit --amendपैरा 4 में क्यों नहीं ? अन्यथा, सभी फ़ाइलों को हटाने के साथ एक अतिरिक्त प्रतिबद्ध होगा। या आप git rebase -iस्क्वैश के साथ उपयोग कर सकते हैं ।
1778 में एलेक्स78191

1

अगर कुछ भी काम नहीं किया डिस्क से फ़ाइल को हटाने और इसे वापस जोड़ने के लिए git rm फ़ाइल नाम का उपयोग करें।


0

मैंने @CBarr का उत्तर लिया और एक पायथन 3 स्क्रिप्ट लिखी जो इसे फाइलों की सूची के साथ करने के लिए है:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import os
import shlex
import subprocess

def run_command(absolute_path, command_name):
    print( "Running", command_name, absolute_path )

    command = shlex.split( command_name )
    command_line_interface = subprocess.Popen( 
          command, stdout=subprocess.PIPE, cwd=absolute_path )

    output = command_line_interface.communicate()[0]
    print( output )

    if command_line_interface.returncode != 0:
        raise RuntimeError( "A process exited with the error '%s'..." % ( 
              command_line_interface.returncode ) )

def main():
    FILENAMES_MAPPING = \
    [
        (r"F:\\SublimeText\\Data", r"README.MD", r"README.md"),
        (r"F:\\SublimeText\\Data\\Packages\\Alignment", r"readme.md", r"README.md"),
        (r"F:\\SublimeText\\Data\\Packages\\AmxxEditor", r"README.MD", r"README.md"),
    ]

    for absolute_path, oldname, newname in FILENAMES_MAPPING:
        run_command( absolute_path, "git mv '%s' '%s1'" % ( oldname, newname ) )
        run_command( absolute_path, "git add '%s1'" % ( newname ) )
        run_command( absolute_path, 
             "git commit -m 'Normalized the \'%s\' with case-sensitive name'" % (
              newname ) )

        run_command( absolute_path, "git mv '%s1' '%s'" % ( newname, newname ) )
        run_command( absolute_path, "git add '%s'" % ( newname ) )
        run_command( absolute_path, "git commit --amend --no-edit" )

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