मेरी GitHub रिपॉजिटरी पर मेरी 2 निर्देशिकाएं हैं। मैं उनमें से एक को हटाना चाहता हूं। मैं पूरी रिपॉजिटरी को हटाने और फिर से बनाने के बिना ऐसा कैसे कर सकता हूं?
मेरी GitHub रिपॉजिटरी पर मेरी 2 निर्देशिकाएं हैं। मैं उनमें से एक को हटाना चाहता हूं। मैं पूरी रिपॉजिटरी को हटाने और फिर से बनाने के बिना ऐसा कैसे कर सकता हूं?
जवाबों:
आप दोनों निर्देशिकाओं के साथ 'मास्टर' चेकआउट कर सकते हैं;
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
git rm -r myFolder
तो काम किया, लेकिन "MyFolder" निर्देशिका से सब कुछ भी हटा दिया। "MyFolder" निर्देशिका में सब कुछ वापस करना पड़ा और फिर कमिट किया गया।
git rm -r --cached myFolder
git rm -r --cached directory/
केवल ट्रैक किए गए गिट्टियों से निकालता है, लेकिन भंडार संरचना बनी हुई है।
निर्देशिका को हटाने के लिए कदम
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
अगले फ़ोल्डर में उस फ़ोल्डर को अनदेखा करने के लिए कदम
अगले कमिट से उस फोल्डर को अनदेखा करने के लिए .itignore नाम की एक फाइल रूट करें और उस फोल्डर का नाम उसमें डालें। आप जितना चाहे उतना डाल सकते हैं
.gitignore फ़ाइल इस तरह दिखाई देगी
/FolderName
यदि किसी कारण से, कर्मकाज़ ने कहा कि यह काम नहीं करता है, तो आप उस निर्देशिका को हटाने की कोशिश कर सकते हैं जिसे आप अपने फाइल सिस्टम ब्राउज़र के साथ या उपयोग करना चाहते हैं (उदाहरण के लिए विंडोज फ़ाइल एक्सप्लोरर में)। निर्देशिका को हटाने के बाद, कमांड जारी करना:
git add -A
और फिर
git commit -m 'deleting directory'
और फिर
git push origin master
।
आप यह कोशिश कर सकते हैं:
git rm -rf <directory_name>
यह निर्देशिका को हटाने के लिए बाध्य करेगा।
यदि आप निर्देशिका में फ़ाइलों को हटाते हैं ( git rm
जैसा कि अन्य उत्तर बताते हैं), तो निर्देशिका अब तक मौजूद नहीं है जहां तक गिट का संबंध है। आप एक खाली निर्देशिका नहीं कर सकते, न ही आप एक हटा सकते हैं।
यह तोड़फोड़ के विपरीत है जहां आपको स्पष्ट रूप से जाना है svn rm emptyfolder/
, और संयोगवश यह है कि man
git के लिए पृष्ठ खुद को "बेवकूफी भरा ट्रैक" क्यों बताता है
इस विषय पर पूछे जाने वाले प्रश्न के लिए "मैं एक गिट रिपॉजिटरी के लिए एक खाली निर्देशिका कैसे जोड़ूं" पर एक उत्तर है :
वर्तमान में गिट इंडेक्स (स्टेजिंग एरिया) का डिज़ाइन केवल सूचीबद्ध होने की फाइलों को अनुमति देता है, और कोई भी सक्षम नहीं है कि खाली निर्देशिकाओं को बदलने की अनुमति देने के लिए इस स्थिति के बारे में पर्याप्त उपाय किया गया है।
उनके अंदर फाइलें जोड़ते समय निर्देशिकाएँ अपने आप जुड़ जाती हैं। यही है, निर्देशिकाओं को रिपॉजिटरी में कभी नहीं जोड़ना पड़ता है, और अपने दम पर ट्रैक नहीं किया जाता है।
आप "
git add <dir>
" कह सकते हैं और यह वहां फाइलों को जोड़ देगा।यदि आपको वास्तव में चेकआउट में मौजूद होने के लिए निर्देशिका की आवश्यकता है, तो आपको इसमें एक फ़ाइल बनानी चाहिए। .ignignore इस उद्देश्य के लिए अच्छी तरह से काम करता है; आप इसे खाली छोड़ सकते हैं, या उन फ़ाइलों के नाम भर सकते हैं, जिन्हें आप निर्देशिका में दिखाने की उम्मीद करते हैं।
मैंने पहले से ही फ़ोल्डर को प्रतिबद्ध कर दिया था और इतिहास में निर्देशिका को भी हटाना चाहता था।
मैंने निम्नलिखित कार्य किया:
इसमें फ़ोल्डर जोड़ें .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
उसके बाद फ़ोल्डर को गिट से हटा दिया गया था, लेकिन स्थानीय डिस्क से हटाया नहीं गया था।
खाली फ़ोल्डर हटाने के लिए
मैं एक खाली निर्देशिका (फ़ोल्डर) को हटाना चाहता था, जिसे मैं हटा नहीं सकता, कुछ शोध के बाद मैंने सीखा कि गिट खाली निर्देशिकाओं को ट्रैक नहीं करता है। यदि आपके पास अपने काम के पेड़ में एक खाली निर्देशिका है, तो आपको बस इसे हटा देना चाहिए
rm -r folderName
Git को शामिल करने की कोई आवश्यकता नहीं है।
आप फ़ोल्डर को स्थानीय रूप से हटा सकते हैं और फिर पुश कर सकते हैं, निम्नानुसार:
git rm -r folder_name
git commit -m "your commit"
git push origin master
आप एटलसियन सोर्स ट्री (विंडोज) ( https://www.atlassian.com/software/sourcetree/overview ) का उपयोग कर सकते हैं । बस पेड़ से फ़ाइलों का चयन करें और शीर्ष पर पुश बटन "निकालें"। फ़ाइलों को स्थानीय रिपॉजिटरी और स्थानीय गिट डेटाबेस से हटा दिया जाएगा। फिर कमिट करें, फिर पुश करें।
मेरे एक सहयोगी ने बीएफजी रेपो-क्लीनर का सुझाव दिया, जिसे मैं शक्तिशाली मानता हूं। यह न केवल अवांछित डेटा को हटाता है, बल्कि किसी भी संबंधित प्रतिबद्ध जानकारी से आपके भंडार को भी साफ करता है।
नई निर्देशिका जोड़ने के लिए:
mkdir <YOUR-DIRECTORY>
लेकिन अब Git इस नई डायरेक्टरी से वाकिफ नहीं है, क्योंकि Git फाइल का ट्रैक रखता है डाइरेक्टरी नहीं
git status
Git हमारे द्वारा किए गए परिवर्तन से अवगत नहीं होगा, इसलिए हम .keep
Git को इस नए परिवर्तन से अवगत कराने के लिए छिपी हुई फ़ाइल जोड़ते हैं।
touch /YOUR-directory/.keep
अब, यदि आप हिट git status
करते हैं तो परिवर्तन के साथ Git के बारे में पता चल जाएगा।
और यदि आप निर्देशिका को हटाना चाहते हैं, तो आपको इस कमांड का उपयोग करना चाहिए।
rm -r <YOUR-DIRECTORY>
और यदि आपने उपयोग करके जाँच की है git status
, तो आप देखेंगे कि निर्देशिका को हटा दिया गया है।
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