गिट रिपॉजिटरी से डायरेक्टरी कैसे निकालें?


1232

मेरी GitHub रिपॉजिटरी पर मेरी 2 निर्देशिकाएं हैं। मैं उनमें से एक को हटाना चाहता हूं। मैं पूरी रिपॉजिटरी को हटाने और फिर से बनाने के बिना ऐसा कैसे कर सकता हूं?


1
क्या निर्देशिका में कोई फाइल है?
फ्रेड फू

3
@ दर्शन: हाँ 6 फाइलें। दोनों निर्देशिकाएं समान हैं सिवाय एक अपरकेस के अलावा, दूसरा लोअरकेस है।
सहत यल्कबोव

जवाबों:


2321

निर्देशिका को गिट और स्थानीय से निकालें

आप दोनों निर्देशिकाओं के साथ 'मास्टर' चेकआउट कर सकते हैं;

git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)

निर्देशिका को गिट से निकालें, लेकिन स्थानीय नहीं

जैसा कि टिप्पणियों में उल्लेख किया गया है, आप आमतौर पर इस निर्देशिका को गिट से हटाना चाहते हैं, लेकिन इसे फाइलसिस्टम (स्थानीय) से पूरी तरह से नहीं हटाते हैं

उस मामले में उपयोग करें:

git rm -r --cached myFolder

8
मेरी वही सटीक स्थिति थी। जब मैंने कोशिश की git rm -r myFolderतो काम किया, लेकिन "MyFolder" निर्देशिका से सब कुछ भी हटा दिया। "MyFolder" निर्देशिका में सब कुछ वापस करना पड़ा और फिर कमिट किया गया।
जस्टिन

240
@ जस्टिन केवल गिट से हटाने और फाइलसिस्टम को छोड़ने के रूप में है, का उपयोग करेंgit rm -r --cached myFolder
karmakaze

32
त्रुटि संदेश मुझे मिलता है: घातक: pathspec 'निर्देशिका' किसी भी फाइल से मेल नहीं खाती।
user2441441 21

3
@ user2441441 मेरे पास यह त्रुटि थी कि जब मैं एक फ़ोल्डर / फ़ाइल को हटाने की कोशिश कर रहा था जो कि रेपो में जोड़ा नहीं गया था
lukeatdesignworks

3
git rm -r --cached directory/केवल ट्रैक किए गए गिट्टियों से निकालता है, लेकिन भंडार संरचना बनी हुई है।
नेस्टर

287

केवल फ़ोल्डर रिपॉजिटरी से फोल्डर / डायरेक्टरी हटाने के लिए और लोकल ट्राई 3 सिंपल कमांड से नहीं।


निर्देशिका को हटाने के लिए कदम

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

अगले फ़ोल्डर में उस फ़ोल्डर को अनदेखा करने के लिए कदम

अगले कमिट से उस फोल्डर को अनदेखा करने के लिए .itignore नाम की एक फाइल रूट करें और उस फोल्डर का नाम उसमें डालें। आप जितना चाहे उतना डाल सकते हैं

.gitignore फ़ाइल इस तरह दिखाई देगी

/FolderName

निर्देशिका निकालें


1
आपको अपने अन्य कंप्यूटर पर git rm -r - Cached FolderName git कमिट-मी "रिपॉजिटरी से हटाए गए फोल्डर" करने की आवश्यकता होगी और फिर इसे सिंक्र में रखने के लिए एक पुल करना होगा।
साइमन

1
क्या यह निर्देशिका को उस बिंदु से हटा देगा जिसे अब तक रिपॉजिटरी में जोड़ा गया था? या यह सिर्फ निर्देशिका को हटाने के लिए है और इसे .git रेपो को फिर से जोड़ना है?
अल्फा_989

1
महान! काम कर रहे!
बीकाडर्स

2
अच्छी तरह से समझाया गया, अच्छा जवाब
रक्षित शाह

1
बहुत बढ़िया। मेरी मशीन पर, तीसरा चरण काम नहीं करता है। लेकिन यह काम करता है अगर इसे $ git पुश में बदल दिया जाए
Hong

82

यदि किसी कारण से, कर्मकाज़ ने कहा कि यह काम नहीं करता है, तो आप उस निर्देशिका को हटाने की कोशिश कर सकते हैं जिसे आप अपने फाइल सिस्टम ब्राउज़र के साथ या उपयोग करना चाहते हैं (उदाहरण के लिए विंडोज फ़ाइल एक्सप्लोरर में)। निर्देशिका को हटाने के बाद, कमांड जारी करना:
git add -A
और फिर
git commit -m 'deleting directory'
और फिर
git push origin master


4
इसने मेरे लिए काम किया। क्या आप ए-तर्क समझा सकते हैं?
अरुण

2
@ अरुण - के लिए छोटा है और सभी ट्रैक की गई और अनट्रैक फ़ाइलों से परिवर्तन जोड़ें
जोकिम रोहड़े

इसने मेरे लिए काम किया।
यूवीएम

20

आप यह कोशिश कर सकते हैं: git rm -rf <directory_name>

यह निर्देशिका को हटाने के लिए बाध्य करेगा।


3
यह स्थानीय निर्देशिका से भी हटा देगा
abdul rehman kk

18

यदि आप निर्देशिका में फ़ाइलों को हटाते हैं ( git rmजैसा कि अन्य उत्तर बताते हैं), तो निर्देशिका अब तक मौजूद नहीं है जहां तक ​​गिट का संबंध है। आप एक खाली निर्देशिका नहीं कर सकते, न ही आप एक हटा सकते हैं।

यह तोड़फोड़ के विपरीत है जहां आपको स्पष्ट रूप से जाना है svn rm emptyfolder/, और संयोगवश यह है कि mangit के लिए पृष्ठ खुद को "बेवकूफी भरा ट्रैक" क्यों बताता है

इस विषय पर पूछे जाने वाले प्रश्न के लिए "मैं एक गिट रिपॉजिटरी के लिए एक खाली निर्देशिका कैसे जोड़ूं" पर एक उत्तर है :

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

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

आप " git add <dir>" कह सकते हैं और यह वहां फाइलों को जोड़ देगा।

यदि आपको वास्तव में चेकआउट में मौजूद होने के लिए निर्देशिका की आवश्यकता है, तो आपको इसमें एक फ़ाइल बनानी चाहिए। .ignignore इस उद्देश्य के लिए अच्छी तरह से काम करता है; आप इसे खाली छोड़ सकते हैं, या उन फ़ाइलों के नाम भर सकते हैं, जिन्हें आप निर्देशिका में दिखाने की उम्मीद करते हैं।


8

मैंने पहले से ही फ़ोल्डर को प्रतिबद्ध कर दिया था और इतिहास में निर्देशिका को भी हटाना चाहता था।

मैंने निम्नलिखित कार्य किया:

इसमें फ़ोल्डर जोड़ें .gitignore:

echo Folder_Name/ >> .gitignore

सभी कमिट्स से निकालें:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

पुराने कमिट से refs निकालें:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

सुनिश्चित करें कि सभी पुराने रेफ पूरी तरह से हटा दिए गए हैं

rm -Rf .git/logs .git/refs/original

कचरा संग्रह करें

git gc --prune=all --aggressive

ऑनलाइन रिपॉजिटरी में आपको परिवर्तन धक्का:

git push

आप यहाँ कर रहे हैं।

लेकिन आप सभी शाखाओं को सभी परिवर्तनों को आगे बढ़ाने के लिए निम्न पर कर सकते हैं: लेकिन इस आदेश के साथ सावधान रहें!

git push origin --all --force
git push origin --tags --force

उसके बाद फ़ोल्डर को गिट से हटा दिया गया था, लेकिन स्थानीय डिस्क से हटाया नहीं गया था।


7

खाली फ़ोल्डर हटाने के लिए

मैं एक खाली निर्देशिका (फ़ोल्डर) को हटाना चाहता था, जिसे मैं हटा नहीं सकता, कुछ शोध के बाद मैंने सीखा कि गिट खाली निर्देशिकाओं को ट्रैक नहीं करता है। यदि आपके पास अपने काम के पेड़ में एक खाली निर्देशिका है, तो आपको बस इसे हटा देना चाहिए

rm -r folderName

Git को शामिल करने की कोई आवश्यकता नहीं है।


1
धन्यवाद! बस यही मेरी जरूरत थी।
SpyrosKo

6

अपनी git डाइरेक्टरी पर जाएँ फिर निम्न कमांड टाइप करें: rm -rf < Directory Name >

निर्देशिका को हटाने के बाद परिवर्तन करें: git कमिट-एम "आपका कमिट मैसेज"

फिर बस दूरस्थ जीआईटी निर्देशिका में परिवर्तन को धक्का दें : गिट पुश मूल < शाखा का नाम >


4

आप फ़ोल्डर को स्थानीय रूप से हटा सकते हैं और फिर पुश कर सकते हैं, निम्नानुसार:

git rm -r folder_name
git commit -m "your commit"
git push origin master

4

मैं आमतौर पर git add --allदूरस्थ रिपॉजिटरी से फ़ाइलों / फ़ोल्डरों को हटाने के लिए उपयोग करता हूं

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master रिपॉजिटरी की किसी अन्य शाखा द्वारा प्रतिस्थापित किया जा सकता है।


2

आप एटलसियन सोर्स ट्री (विंडोज) ( https://www.atlassian.com/software/sourcetree/overview ) का उपयोग कर सकते हैं । बस पेड़ से फ़ाइलों का चयन करें और शीर्ष पर पुश बटन "निकालें"। फ़ाइलों को स्थानीय रिपॉजिटरी और स्थानीय गिट डेटाबेस से हटा दिया जाएगा। फिर कमिट करें, फिर पुश करें।


यही मैं भी करता हूं। वास्तव में यह करना आसान है, हालांकि, git कमांड सीखना अच्छी बात है।
मीका मोंटोया

1

मेरे एक सहयोगी ने बीएफजी रेपो-क्लीनर का सुझाव दिया, जिसे मैं शक्तिशाली मानता हूं। यह न केवल अवांछित डेटा को हटाता है, बल्कि किसी भी संबंधित प्रतिबद्ध जानकारी से आपके भंडार को भी साफ करता है।


1

नई निर्देशिका जोड़ने के लिए:

mkdir <YOUR-DIRECTORY>

लेकिन अब Git इस नई डायरेक्टरी से वाकिफ नहीं है, क्योंकि Git फाइल का ट्रैक रखता है डाइरेक्टरी नहीं

git status

Git हमारे द्वारा किए गए परिवर्तन से अवगत नहीं होगा, इसलिए हम .keepGit को इस नए परिवर्तन से अवगत कराने के लिए छिपी हुई फ़ाइल जोड़ते हैं।

touch /YOUR-directory/.keep

अब, यदि आप हिट git statusकरते हैं तो परिवर्तन के साथ Git के बारे में पता चल जाएगा।

और यदि आप निर्देशिका को हटाना चाहते हैं, तो आपको इस कमांड का उपयोग करना चाहिए।

rm -r <YOUR-DIRECTORY>

और यदि आपने उपयोग करके जाँच की है git status, तो आप देखेंगे कि निर्देशिका को हटा दिया गया है।


0

पहले git कमांड को यह जानना होगा कि आप कुछ भी हटाने से पहले कौन हैं

  1. git init
  2. git config user.name "कोई"
  3. git config user.email "some@someplace.com"
  4. git rm -r
  5. git कमिट-मी "डिलीट डायर"
  6. git पुश ओरिजिनल मास्टर

0

2 उत्तरों के संयोजन ने मेरे लिए काम किया

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

यदि यह अभी भी कुछ चेतावनी दिखाता है, तो फ़ाइलों को मैन्युअल रूप से हटा दें

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.