Git रिपॉजिटरी में, किसी डायरेक्टरी का नाम ठीक से कैसे बदला जाए?


652

मुझे लगता है कि वांछित नाम के साथ नई निर्देशिका में नाम बदलने के लिए निर्देशिका को कॉपी करने के लिए काम करना चाहिए, और पुरानी निर्देशिका को हटाना होगा , और git add, git commitऔर pushसब कुछ। लेकिन क्या यह सबसे अच्छा तरीका है?



5
जहां तक ​​गिट की बात है, एक कॉपी और डिलीट एक ही चीज है। गिट एक ही तरह से (कॉपी + डिलीट) और (मूव) दोनों को रिकॉर्ड करेगा।
डायट्रीच एप्प

जवाबों:


1178

मूल नाम (या चाल):

git mv <old name> <new name>

केस संवेदी नाम- उदा। से casesensitiveकरने के लिए CaseSensitive-आप एक दो चरणों का उपयोग करना चाहिए:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Git में केस सेंसिटिविटी के बारे में ... )

... इसके बाद कमिट और पुश एक रीपो गिट में डायरेक्टरी का नाम बदलने का सबसे सरल तरीका होगा।


231
लेकिन अगर आप से नाम बदलना चाहते हैं casesensitiveके लिए CaseSensitive: आप इस तरह से कर सकते हैं git mv casesensitive Tempऔर फिर git mv Temp CaseSensitive
ViliusK

3
क्या यह सभी लॉग और आँकड़ों को बचाता है?
orezvani

23
@ViliusK अगर आप केस सेंसिटिव डाइरेक्टरीज़ के साथ काम कर रहे हैं, तो जो भी आसान तरीका मुझे मिल गया है, git rm -rf --cached path/to/your/directoriesउसे फिर से जोड़ें और कमिट करें
dtothefp

1
लेकिन पैकेज / निर्देशिका के लिए नाम परिवर्तन के लिए GIT को उचित समर्थन क्यों नहीं है? मुझे एक अलग फ़ोल्डर बनाने की आवश्यकता क्यों है। जब मैं पैकेज का नाम बदल देता हूँ तो इसे एक अंतर के रूप में लेना चाहिए और कमिट और पुश के समय इसका ध्यान रखना चाहिए?
अहमद

1
इसके लिए बहुत - बहुत धन्यवाद। मेरे लिए, मुझे पहले निष्पादित करना था git config core.ignorecase falseऔर फिर उत्तराधिकार में कमांड चलाना होगा या फिर, दूसरे भाग के लिए मुझे एक source is emptyत्रुटि मिलेगी ।
रीका

106

यदि आपको यह त्रुटि मिलती है: घातक: 'फ़ोल्डरनाम' का नाम बदलना विफल: अमान्य तर्क

इसे इस्तेमाल करे:

git mv foldername tempname && git mv tempname folderName


8
यह वही है जो मुझे एक निर्देशिका में केस-परिवर्तन करने के लिए आवश्यक था।
cjserio

इस संस्करण में टोकन '&&' एक मान्य स्टेटमेंट सेपरेटर नहीं है। git संस्करण 2.11.0.windows।
टिम हार्डी

@ हार्डी इसे दो अलग-अलग कमांड के रूप में भी चलाया जा सकता है, git mv foldername tempnameऔर git mv tempname folderName, जिसे विंडोज पर काम करना चाहिए।
लार्किथ

यह काम नहीं करता ! अंतिम परिणाम 'tempname' फ़ोल्डर के अंदर नया 'folderName' फ़ोल्डर डाल देगा
शर्त

61

1. एक फ़ोल्डर का नाम पुराने फ़ोल्डर से newfolder में बदलें

git mv oldfolder newfolder

2. यदि नया फ़ोल्डर पहले से ही आपके भंडार में है और आप इसे ओवरराइड और उपयोग करना चाहते हैं: - बल

git mv -f oldfolder newfolder

Git mv के साथ नाम बदलने के बाद अनुक्रमणिका में परिवर्तन जोड़ना और उन्हें कमिट करना न भूलें।

3. केस असंवेदनशील फ़ाइल सिस्टम पर फ़ोल्डरनाम का नामकरण फ़ोल्डरनाम के लिए

एक सामान्य mv कमांड (git mv नहीं) के साथ सरल नामकरण git से फ़ाइल परिशिष्ट के रूप में पहचाना नहीं जाएगा। यदि आप इसे निम्न पंक्ति की तरह 'git mv' कमांड के साथ आजमाते हैं

git mv foldername folderName

यदि आप एक असंवेदनशील फाइलसिस्टम का उपयोग कर रहे हैं, जैसे आप मैक पर हैं और आपने इसे संवेदनशील होने के लिए कॉन्फ़िगर नहीं किया है, तो आपको इस तरह एक त्रुटि संदेश का अनुभव होगा:

घातक: 'फ़ोल्डरनाम' का नाम बदलना विफल: अमान्य तर्क

और यहाँ है कि आप इसे काम करने के लिए क्या कर सकते हैं: -

git mv foldername tempname && git mv tempname folderName

यह फ़ोल्डर को पूरी तरह से अलग फ़ोल्डरनाम में बदलकर नाम बदलने की प्रक्रिया को विभाजित करता है। इसे अलग फ़ोल्डरनाम में बदलने के बाद अंत में फ़ोल्डर को नए फ़ोल्डर में बदला जा सकता है। उन 'gv mv' के बाद, फिर से, परिवर्तनों को जोड़ना और प्रतिबद्ध करना न भूलें। हालांकि यह शायद एक सुंदर तकनीक नहीं है, यह पूरी तरह से ठीक काम करता है। फाइलसिस्टम अभी भी पत्र मामलों के बदलाव को नहीं पहचान पाएगा, लेकिन इसे नए फ़ोल्डरनाम में बदलने के कारण git करता है, और यही हम चाहते थे :)


9

आप फ़ाइल सिस्टम का उपयोग करके निर्देशिका का नाम बदल सकते हैं। तब आप कर सकते हैं git rm <old directory>और git add <new directory>( सहायता पृष्ठ )। तब आप प्रतिबद्ध कर सकते हैं और धक्का दे सकते हैं।

Git यह पता लगाएगा कि सामग्री समान हैं और यह सिर्फ एक नाम बदलने की कार्रवाई है, और यह इतिहास में नाम बदलने के रूप में दिखाई देगा। आप जांच कर सकते हैं कि यह कमिट का उपयोग करने से पहले की स्थिति हैgit status


12
हे, लेकिन इस तरह, मैं पूरे इतिहास को ढीला कर दूंगा।
विलिअस्क

1
यदि आप -follow ध्वज का उपयोग करते हैं, तो आप इसे बनाए रख सकते हैं।
ओलेक्सी

एक के बजाय दो आदेश, और एक ध्वज जोड़ना है? क्या यह किसी भी तरह git mv से बेहतर है?
एंटीगेल

4
@topper नहीं, gm mv rm + add के लिए सिर्फ एक उपनाम है। Git mv का उपयोग करना एक बेहतर उपाय है।
ओलेक्सी जू

5
@topper ध्यान दें कि इतिहास को देखने के लिए आपको अभी भी उपयोग करना होगा - फ़ाइल को स्थानांतरित करने के लिए आप किस पद्धति का उपयोग करते हैं, इसकी परवाह किए बिना।
ओलेक्सी जू

3

वेब एप्लिकेशन से मुझे लगता है कि आप नहीं कर सकते हैं, लेकिन आप Git Client में सभी फ़ोल्डरों का नाम बदल सकते हैं, यह आपकी फ़ाइलों को नए नामांकित फ़ोल्डरों में ले जाएगा, कमिट करने और रिमोट रिपॉजिटरी पर पुश करने के लिए।

मेरे पास एक समान मुद्दा था: मुझे अलग-अलग फ़ोल्डरों को अपरकेस से लोअरकेस (जैसे एबीसी -> एबीसी) का नाम बदलना पड़ा, मैंने सभी फ़ोल्डरों को एक डमी नाम (जैसे 'abc___') से बदल दिया है और रिमोट रिपॉजिटरी के लिए प्रतिबद्ध होने के बाद, कि मैंने सभी फोल्डर का नाम बदलकर लोअरकेस (abc) के साथ मूल नाम कर दिया और यह उन्हें ले लिया!


0

मैंने इसे दो चरणों में हल किया। एमवी कमांड का उपयोग करके फ़ोल्डर का नाम बदलने के लिए आपको ऐसा करने का अधिकार चाहिए, अगर आपके पास सही नहीं है तो आप इन चरणों का पालन कर सकते हैं। मान लीजिए कि आप मामले के प्रति संवेदनशील का नाम बदलना चाहते हैं।

चरण 1: एक्सप्लोरर से फ़ोल्डर (केसेंसिटिव) का नाम कुछ और के लिए बदलें। उदाहरण के लिए फ़ोल्डर 1 के लिए असंवेदनशील नाम बदलें यह परिवर्तन करें।

चरण 2: इस नए नामित फ़ोल्डर (फ़ोल्डर 1) का नाम अपेक्षित केस संवेदनशील नाम (केसेंसिटिव) के लिए बदलें। फ़ोल्डर 1 का नाम बदलें। यह परिवर्तन करें।


0

संवेदनशील नाम बदलने के लिए, git mv somefolder someFolderमेरे लिए पहले काम कर चुका है , लेकिन किसी कारण से आज नहीं हुआ। तो एक समाधान के रूप मैं एक नया फ़ोल्डर बनाया temp, की सभी सामग्री ले जाया गया somefolderमें temp, नष्ट कर दिया somefolder, प्रतिबद्ध temp, तो बनाई someFolder, की सभी सामग्री ले जाया गया tempमें someFolder, नष्ट कर दिया temp, प्रतिबद्ध और धक्का दिया someFolderऔर यह काम किया! के रूप someFolderमें दिखाता है ।


-16

बस फ़ोल्डर का नाम बदलें। git एक "कंटेंट-ट्रैकर" है, इसलिए SHA1 हैश एक ही है और git जानता है, कि आप इसका नाम बदलते हैं। केवल एक चीज जो बदलती है वह है वृक्ष-वस्तु।

rm <directory>
git add .
git commit

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