क्या गिट फ़ोल्डर के आकार को कम करने का एक तरीका है?


156

लगता है जैसे मेरी परियोजना हर गिट के साथ बड़ी और बड़ी हो रही है commit/push। वहाँ मेरे git फ़ोल्डर को साफ करने का एक तरीका है?

जवाबों:


214

मुझे यकीन नहीं है कि आप क्या चाहते हैं। सबसे पहले, निश्चित रूप से हर बार जब आप कमिट करते / करते हैं, तो डायरेक्टरी थोड़ी बड़ी हो जाती है, क्योंकि इसमें से प्रत्येक अतिरिक्त स्टोरेज को स्टोर करना होता है।

हालांकि, शायद आप चाहते हैं git gcकि "अनावश्यक फ़ाइलों को साफ करें और स्थानीय भंडार को अनुकूलित करें" ( मैनुअल पेज )।

एक और संभवतः प्रासंगिक कमांड है git cleanजो आपके पेड़ ( मैनुअल पेज ) से अनट्रैक की गई फ़ाइलों को हटा देगा ।


30
git क्लीन -d -f -x, .ITignore और इस तरह सूचीबद्ध फ़ाइलों को हटाता है। जैसे कार्यस्थल जो git, पॉड्स फोल्डर आदि से संबंधित नहीं हैं
Kalle

102
WARNINGजैसा कि @Kalle द्वारा ऊपर लिखी गई कमांड आपके GIT ROOT में से हर किसी को हटाएगी <UNTRACKED <FILE और DIRECTORY को हटा देगी , न कि केवल " .ignignore में सूचीबद्ध फाइलें"। कुछ भी जो Git द्वारा ट्रैक नहीं किया जा रहा है, चाहे वह लिस्ट में .gitignoreहो या न हो, मिटा दिया जाएगा। git clean -dfX(नोट मामले पर X) केवल उन वस्तुओं को हटा देगा जिनके पास एक लागू नियम है .gitignoreकृपया इस चेतावनी को ध्यान में रखें: कभी git cleanभी बिना इंटरेक्टिव मोड में दौड़ें, बिना -iइसके साथ -f, या कम से कम पहले ड्राई रन न करें - -nऔर फिर फिर से -f
एड्रियन गंटर

5
या बैकअप बनाना :-)
मतीन उल्हाक

61

Daud:

git remote prune origin

सभी बासी ट्रैकिंग शाखाओं को हटाता है जो पहले ही हटा दिए गए हैं originलेकिन अभी भी स्थानीय रूप से उपलब्ध हैं remotes/origin

git gc --auto

' G arbage C ollection' - हाउसकीपिंग के कामों को चलाता है (संशोधनों को संकुचित करता है, ढीली / दुर्गम वस्तुओं को हटाता है)। --autoझंडा पहले निर्धारित करता है किसी भी काम की आवश्यकता है, और यदि नहीं कुछ भी करने के बिना बाहर निकलता है।


4
उन लोगों के बारे में कुछ स्पष्टीकरण? मुझे पता है कि हम उन्हें Google कर सकते हैं और उनके दस्तावेज़ीकरण की खोज कर सकते हैं, लेकिन जब आपके कोड में केवल आदेश या आदेश होते हैं, तो आपके उत्तर का संक्षिप्त विवरण प्रदान करना एक आम बात है।
०३:

28

एक परिदृश्य जहाँ आपका git रेपो प्रत्येक कमिट के साथ गंभीर रूप से बड़ा हो जाएगा , एक वह जगह है जहाँ आप बाइनरी फ़ाइलों को नियमित रूप से उत्पन्न करते हैं। उनका भंडारण पाठ फ़ाइल की तुलना में कुशल नहीं होगा

एक और वह है जहां आपके पास कई सबरपोज़ (सबमॉड्यूल्स के रूप में प्रबंधित ) के बजाय एक रेपो (जो कि गिट की सीमा है ) के भीतर बड़ी संख्या में फाइलें हैं ।

गिट स्पेस पर इस लेख में , अलब्लू का उल्लेख है:

ध्यान दें कि Git (और Hg, और अन्य DVCS) एक समस्या से ग्रस्त हैं जहां (बड़े) बायनेरिज़ की जाँच की जाती है, फिर हटा दिया जाता है, क्योंकि वे अभी भी रिपॉजिटरी में दिखाएंगे और जगह ले लेंगे, भले ही वे चालू न हों। ।

यदि आपके पास अपने गैटो रेपो में बड़ी बायनेरिज़ संग्रहीत हैं, तो आप इस पर विचार कर सकते हैं:

मैं में उल्लेख किया है " क्या Git में फ़ाइल सीमा (संख्या और आकार)? हैं , और हाल ही में" (2015, इस जवाब के बाद 5 वर्ष) Git LFS GitHub से (उन्हें भंडारण के द्वारा उन बड़े फाइलों का प्रबंधन करने के लिए एक तरीका है बाहर Git भंडार)।


1
अगर आपके पास बड़ी बाइनरी फाइलें (जैसे चित्र) नियमित रूप से जोड़ी / अपडेट की जा रही हैं तो git बड़ी फ़ाइल समर्थन सहायक है। Git-lfs.github.com देखें । लागू करने के लिए सुपर आसान, जीथब द्वारा समर्थित। सभी टीम के सदस्यों को सहयोगात्मक रूप से इसका उपयोग करने के लिए इसे स्थापित करने की आवश्यकता है।
एरिक वुड्स

@EricWoods सच है। मैंने पहले Git-LFS (64 बार: stackoverflow.com/search?tab=newest&q=user%3a6309%20git-lfs ) का उल्लेख किया । मैंने इस पुराने उत्तर को उसी के अनुसार संपादित किया है।
VonC

हा, वास्तव में! अजीब बात है कि एक 9+ वर्ष पुराना उत्तर अभी भी प्रासंगिक है (और अब LFS जानकारी के साथ और भी अधिक)।
एरिक वुड्स

22

हाँ हाँ, git gc समाधान है, स्वाभाविक रूप से,

और स्थानीय रूप से - आप स्थानीय भंडार को हटा सकते हैं और इसे फिर से क्लोन कर सकते हैं,

लेकिन यहाँ कुछ और महत्वपूर्ण है ...

उस विशाल गिट और एक्सटर्नल की प्रक्रिया के लिए आपके द्वारा प्रतीक्षा की जाने वाली सेकंड्स को लंबे समय तक एकत्र किया जाता है, जिसमें घंटों समय के लिए एकत्र किया जाता है,

स्वाभाविक रूप से फ़ाइलों के एकमात्र हाल के संस्करण सहित, खरोंच से एक नया (पूरी तरह से, न केवल एक शाखा) रिपॉजिटरी बनाएं आप सभी इतिहास को ढीला कर देंगे,

लेकिन जब कोड-दुनिया में यह भावुक होने का समय नहीं है, तो कोड के पूरे 5 साल के साथ हर कमिटमेंट या अलग होने का कोई मतलब नहीं है, अगर आप उदासीन हो जाते हैं, तो आप पुराने गेट और एक्सटर्नल को कहीं स्टोर कर सकते हैं]

लेकिन, कुछ बिंदु पर आपको वास्तव में साथ चलना होगा:]

आपकी टीम आपको धन्यवाद देगी!


12
पूरी तरह से सहमत हैं, हमने हाल ही में एक पुराने भंडार के साथ इस दृष्टिकोण को लिया और पीछे मुड़कर नहीं देखा; ठीक है, मुख्य रूप से क्योंकि हम नहीं कर सकते हैं, लेकिन आप जानते हैं कि मेरा क्या मतलब है :)
WhatIsHeDoing

13

इस आदेश को चलाना बेहद खतरनाक है, लेकिन आपकी सभी रिकवरी / बैकअप फ़ाइलों को मिटाकर आपकी रिपॉजिटरी को सिकोड़ देगा:

git reflog expire --expire=now --all && git gc --prune=now --aggressive

यह सभी फ़ाइलों को मिटा देगा कुछ खराब कमांड से आपकी रिपॉजिटरी को पुनर्प्राप्त करने के लिए उपयोग करता है, उदाहरण के लिए, यदि आपने किया git reset --hard, तो आप आमतौर पर खो गई फ़ाइलों को पुनर्प्राप्त कर सकते हैं। लेकिन अगर आप आज्ञा git reset --hardसे पहले करते हैं git reflog expire..., तो आपने सब कुछ खो दिया। अब, आपकी एकमात्र आशा कुछ उपकरण का उपयोग करना है जो आपकी फ़ाइल प्रणाली का विश्लेषण करता है और मिटाए गए फ़ाइलों को पुनर्प्राप्त करने का प्रयास करता है, अगर वे ओवरराइड नहीं थे।


3
मैं वास्तव में इसे बहुत खतरनाक नहीं कहूंगा । मैं बस इसे कुछ लेबल करूँगा जिससे आपको सावधान रहना होगा । मेरे अनुभव में, बहुत कम वास्तव में कभी भी रिफ्लोग या पहुंच से बाहर की वस्तुओं को छूते हैं - अधिकांश को यह भी पता नहीं होता है कि वे वहां हैं या उनके साथ कैसे बातचीत करनी है, और इसलिए उन स्थितियों में फंस जाते हैं जहां वे उपयोगी होंगे, या चीजों को बहुत कम कर देंगे। अक्षम्य तरीका। मैं यह कहना चाहूंगा कि यदि आप नहीं जानते हैं और यह पता नहीं लगा सकते हैं कि ये कमांड क्या करेंगे, तो आप उन्हें सुरक्षित रूप से चला सकते हैं!
क्रिस मॉर्गन

10

git clean -d -f -i यह करने का सबसे अच्छा तरीका है।

यह अधिक नियंत्रित तरीके से सफाई करने में मदद करेगा।

-i इंटरैक्टिव के लिए खड़ा है।


3
जबकि ओपी का सवाल अस्पष्ट है, और यह उस संबंध में एक अच्छा जवाब है, मैं यह बताना चाहता हूं कि git cleanरेपो को साफ करने के लिए नहीं है ताकि निर्देशिका को साफ किया जा सके। उन उपयोगकर्ताओं के लिए जो नेत्रहीन कॉपी / पेस्ट करते हैं, सावधान रहें; यह आपके द्वारा वास्तव में स्थानीय रूप से वांछित अनट्रैक की गई फ़ाइलों / dirs को हटा देता है।
sraboy

git clean -d -x -f अच्छी तरह से काम करता है अगर आप गहरी सफाई करना चाहते हैं
ऋषभ जैन

2

नहीं पता कि यह इसे सिकोड़ लेगा, लेकिन मेरे दौड़ने के बाद git clean, मैं अक्सर ऐसा git repack -adकरता हूं , जिससे पैक फ़ाइलों की संख्या कम हो जाती है।


5
repack git gcप्रक्रिया का एक हिस्सा है , इसलिए इसे अलग से चलाने की कोई आवश्यकता नहीं है
artkoshelev
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.