2012-11-02 19 views
8

जब मैं git status टाइप करें, मैं देख रहा हूँ:अंक = सच

# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: DIR/a 
# 

हालांकि, मेरे कार्य निर्देशिका में मैं देख रहा हूँ (लोअरकेस नोट करें कि यह फ़ाइल वास्तव में dir/a कहा जाता है के बजाय dir)।

प्रश्न: मैं इस मचान क्षेत्र को a फ़ाइल को संशोधित और प्रतिबद्ध जोड़ना चाहते हैं, लेकिन मैं के रूप में यह मेरे कार्य निर्देशिका में है (जो dir/a दिखाता है) यह होना चाहते हैं - के रूप में जिस तरह से Git करने का विरोध किया है इसे DIR/a के रूप में देख रहा है। मैं यह कैसे कर सकता हूँ?

महत्वपूर्ण नोट:

दुर्भाग्य से, मैं बस git mv DIR/a dir/a क्योंकि DIR/a वास्तव में काम कर पेड़ में मौजूद नहीं है नहीं कर सकते।

वर्तमान में मेरी .git/config फ़ाइल ingorecase = true दिखाती है, इसलिए मुझे पता है कि मुझे इसे गलत के बराबर सेट करना है। हालांकि, कुछ नहीं कर रहे हैं, लेकिन इस ध्वज को बदलने के बाद, इस का एक git status अब पता चलता है:

# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: DIR/a 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# dir/ 

मैं उम्मीद इस Git के बाद से ही सामग्री ट्रैक करता है, और स्विचिंग ignorecase Git लगता है एक नई फ़ाइल जोड़ दिया गया होगा। दुर्भाग्यवश, गिट अब सोचता है कि मेरे पास दो फाइलें हैं जो संशोधित हैं, जब वास्तव में मेरे पास केवल एक है। मैं के बजाय (जैसा कि यह मेरी कामकाजी निर्देशिका में है) को दिखाने के लिए के समान अंतर के साथ git status को बस हाल ही में बनाया गया था।

अतिरिक्त नोट

आप कैसे इस तरह के एक अनिश्चित स्थिति पहली जगह में पैदा हुई के रूप में उत्सुक हैं, मैं मूर्ख गलतियों मैं जब मूल रूप से DIR से मेरी निर्देशिका के मामले का नाम बदलने की थी दोहराने में कामयाब है dir पर। अगर आपको लगता है कि इससे इस समस्या के समाधान में मदद मिलेगी, तो मुझे एक संपादन करने में खुशी होगी जो बताएगा कि मैंने गलती से गिट को इतनी उलझन में कैसे बनाया। (इसमें git mv के बजाय मुझे mv पर गलती से मारना शामिल है, और ignorecase ध्वज से अनजान है और इसे ignorecase=true के रूप में छोड़कर)।

+0

नहीं! मुझे यह वही मुद्दा रहा है। – dinkelk

उत्तर

16

मुझे एक कामकाज मिला है। मुझे यकीन नहीं है कि क्या एक और अधिक सुरुचिपूर्ण समाधान है, लेकिन मैंने इसका परीक्षण किया है और यह काम करता है। क्योंकि गिट यह सोचने के लिए जारी है कि केवल दो फाइलें मौजूद हैं, मुझे वास्तव में केवल निर्देशिका को कॉपी करना होगा, फ़ाइल को कौन सी गिट ट्रैक कर रहा है, और उसके बाद प्रतिलिपि निर्देशिका को वापस मूल में हटा दें।

(1) dir में किसी भी फाइल को प्रतिबद्ध करने की आवश्यकता है।

(2) cp -r dir tempDir

(3) git add tempDir/

(4) git rm -r dir Dir

(5) git commit -m "Temporary rename of dir to tempDir"

(6) git mv tempDir mms

(7) git commit -m "Full rename from DIR to dir complete"

+0

यह काम करता है, लेकिन अगर किसी को सरल या क्लीनर समाधान के बारे में पता है तो मैं इसे थोड़ी देर के लिए उत्तर के रूप में चुनने पर रोक दूंगा। – smaccoun

19

उदाहरण: यदि आप कर रहे हैं कम आवरण mydir

git mv src/Mydir src/mydirs 

git mv src/mydirs src/mydir 

git commit -m "Rename folder Mydir to mydir" 
+0

निश्चित रूप से एक और अधिक सुरुचिपूर्ण समाधान –

+0

सरल और तेज़, इस समाधान की तरह! – NBoymanns

+1

यह स्वीकार्य उत्तर होना चाहिए। धन्यवाद एड! – NikosKeyz