Git चेकआउट / पुल निर्देशिकाओं को नहीं हटाता है?


83

मुझे मेरा रेपो @ जीथब मिल गया है। मैंने घर पर कुछ काम किया और इसे जीथब पर धकेल दिया। इसमें फ़ाइलों और निर्देशिकाओं को हटाना शामिल था। अब मैं अपने कार्य बॉक्स पर हूं, जिसमें फ़ाइलों और निर्देशिकाओं को हटाने से पहले कोड की एक प्रति थी।

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

git remote update
git checkout HEAD
git pull origin HEAD

इसने उन सभी फ़ाइलों को हटा दिया, जिनके पास यह होना चाहिए, लेकिन निर्देशिका नहीं थी जो फ़ाइलें थीं।

दो सवाल:

  1. इसने निर्देशिकाओं को क्यों नहीं हटाया?
  2. क्या एक git कमांड है जिसे मैं उन्हें हटाने के लिए वर्तमान स्थिति में जारी कर सकता हूं?

सहमत, git चेकआउट HEAD कुछ भी नहीं करता है, क्योंकि HEAD वर्तमान में चेक-आउट किए गए कमिट की ओर इशारा करता है। आप शायद दोनों मामलों में मास्टर के लिए जा रहे थे।
कास्केबेल सेफ़

खैर, HEAD ने वास्तव में खाली निर्देशिकाओं को हटाने के अपवाद के साथ सब कुछ अपडेट किया। जैसे मैंने कहा, मैं गित करने के लिए नया हूं।
मकालप

के संभावित डुप्लिकेट मैं "Git पुल" कैसे मजबूर करते स्थानीय फ़ाइलों को अधिलेखित करना? यदि आप अभी भी कुछ अलग समाधान चाहते हैं, तो कृपया उत्तरों की जाँच करें।
DrBeco

जवाबों:


152

Git निर्देशिकाओं को ट्रैक नहीं करता है, इसलिए यह उन लोगों को नहीं हटाएगा जो मर्ज या अन्य परिवर्तन के परिणामस्वरूप खाली हो जाते हैं। हालाँकि, आप अनट्रैकड git clean -fdडायरेक्ट्रीज़ को हटाने के लिए उपयोग कर सकते हैं ( -fdफ्लैग का मतलब एफ ऑरेक्टस रिमूव ऑफ अनट्रैकड फाइल्स एंड डी ऑरिजरीज)।


4
मैं उलझन में हूं। जब मैंने परिवर्तन किए / किए गए तो मेरे GitHub रेपो से निर्देशिकाओं को क्यों हटा दिया गया?
मीकप सिप

1
आपकी वर्किंग कॉपी की निर्देशिकाओं में अनट्रैक फाइल्स (छिपी अनट्रैक फाइल्स सहित) शामिल हो सकती हैं, और इस तरह वे खाली दिख सकती हैं, लेकिन वास्तव में ऐसा नहीं है, इसलिए Git ने उन्हें हटाया नहीं। git cleanहोगा, जरूर।
मियादी

4
इस तथ्य के साथ कुछ करना हो सकता है कि गिटहब रिपोज नंगे रिपोजिटरी हैं (उनके पास काम की प्रतियां नहीं हैं), लेकिन आपका स्थानीय एक करता है। मुझे लगता है कि अगर आप GitHub मूल से एक नया रेपो क्लोन करते हैं, तो आपके पास वे निर्देशिकाएं नहीं होंगी।
मियादी

18
लेकिन निश्चित रूप से, कमांड -n(ड्राई रन) को -fपहले की बजाय चलाएं , ताकि आप देख सकें कि क्या डिलीट होने वाला है। खासकर जब से git clean -dकेवल उन चिंताजनक निर्देशिकाओं को हटा दिया जाता है , बल्कि अनट्रैक की गई फाइलें भी।
टॉड ओवेन

2
git cleanजब तक आप -xविकल्प पास नहीं करते, @EliGolin: .ignignore में सूचीबद्ध फ़ाइलों को नहीं हटाता है ।
मियादी

4

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

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


मेरे GitHub रेपो में निर्देशिका नहीं है। जब मैंने प्रतिबद्ध किया, तो उसने निर्देशिकाओं को सही ढंग से हटा दिया। हालाँकि, जब मैं चेकआउट / पुलिंग करता हूँ तो यह केवल फाइलों को हटाता है। निर्देशिका खाली हैं। $ Ls -al कुल 8 drwxr-XR-एक्स 2 mculp mculp 4096 सितं, 23 15:43 ./ drwxr-XR-x 8 mculp mculp 4096 सितं, 30 10:51 ../
mculp

1
मुझे पूरा यकीन नहीं है कि आपके द्वारा "मास्टर के लिए स्विच किए गए हेड" से मेरा क्या मतलब है, मुझे लगता है कि आपका मतलब " git checkout master" है, लेकिन ज्यादातर लोग सिर्फ यह कहेंगे कि "मैंने मास्टर को चेक / स्विच किया"। वैसे भी, जब गिट ने कहा 'पहले से ही अद्यतित।' इसका मतलब है कि इसने कुछ नहीं किया। Git केवल निर्देशिका निकाल देंगे कि यह बनाता है खाली।
सीबी बेली

ख़राब शब्द। मैंने "हेड" को "मास्टर" में बदल दिया क्योंकि कुछ लोगों ने टिप्पणियों में सुझाव दिया है।
मकुलप सिप

@CharlesBailey, आपने जो कहा वह वह नहीं है जो मैं देख रहा हूं। git checkoutएक पूरी तरह से खाली निर्देशिका को नहीं हटाया।
एक्यूमेनस

@ABB: Git केवल निर्देशिकाओं रहे हैं को हटा बना एक चेकआउट आपरेशन द्वारा खाली। मैंने फिर से यह परीक्षण किया है; यह अभी भी काम करता है।
सीबी बेली

3

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

इस मुद्दे को हल करने के लिए; यह आदेश चाल (कम से कम मेरे लिए) करने के लिए लगता है

git clean -fd -x

जहां X सभी अनट्रैक की गई फ़ाइलों को हटा देगा:

-X Git द्वारा अनदेखा केवल फ़ाइलों को निकालें। यह सब कुछ खरोंच से पुनर्निर्माण करने के लिए उपयोगी हो सकता है, लेकिन मैन्युअल रूप से बनाई गई फ़ाइलों को रखें।


2

Git निर्देशिकाओं, फ़ाइलों (उनके पथ के साथ) को ट्रैक नहीं करता है। यदि वे अभी तक मौजूद नहीं हैं, तो उन पथों के लिए Git सभी निर्देशिकाएँ बनाता है (ठंडा!), हालाँकि यह उन्हें नहीं हटाता है यदि किसी पथ में सम्‍मिलित सभी फ़ाइलों को स्थानांतरित या हटा दिया जाता है (शांत ☹ नहीं ... लेकिन इसके कारण हैं)।

समाधान (एक बार जब आप / तेजी से अग्रेषित / विलय कर चुके हैं):

git stash --include-untracked
git clean -fd
git stash pop

यदि आप stashपहले नहीं करते हैं clean, तो आप अपनी सभी अनुपयोगी फ़ाइलों (अपरिवर्तनीय रूप से) को ढीला कर देंगे।

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


-1

Git वर्तमान में निर्देशिकाओं को ट्रैक नहीं करता है ( git wiki देखें ), अर्थात, आप न तो खाली निर्देशिकाओं को जोड़ सकते हैं और न ही खाली होने वाली निर्देशिकाओं को हटाएंगे। (संपादित करें: धन्यवाद, मन्नी, मैं गलत था! आप खाली निर्देशिकाओं को नहीं जोड़ सकते , लेकिन गिट उन निर्देशिकाओं को हटा देंगे जो खाली हो जाती हैं क्योंकि उनकी ट्रैक की गई सामग्री हटा दी गई थी। )

खाली निर्देशिकाओं को हटाने के आदेश के रूप में: जो आपके ऑपरेटिंग सिस्टम पर निर्भर करता है।

लिनक्स के लिए आप उपयोग कर सकते हैं, जैसे,

find -depth -type d -empty -exec rmdir {} \;

हालाँकि, यह सभी खाली निर्देशिकाओं को हटा देगा !


1
विकी पेज कहता है कि git आपके लिए खाली निर्देशिका नहीं बनाता है। यह नहीं कहता कि यह खाली निर्देशिकाओं को नष्ट नहीं करेगा। मेरे लिए कौन सा मूक काम करना चाहता है।
इन्नाएम

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