2009-03-09 8 views
24

पहले, निम्नलिखित मेरी .gitignore फ़ाइल थी:एक फ़ाइल को अनदेखा कैसे करें जो पहले से ही प्रतिबद्ध है?

... 
config/database.yml 
.DS_Store 

बाद में मैंने कॉन्फ़िगर निर्देशिका में app_config.yml फ़ाइल बनाई और इसे प्रतिबद्ध किया।

अब, मुझे एहसास हुआ कि मुझे गिट भंडार में app_config.yml फ़ाइल की आवश्यकता नहीं है। और मैंने अपनी .gitignore फ़ाइल को संशोधित किया:

... 
config/app_config.yml 
config/database.yml 
.DS_Store 

अब, जब मैं प्रतिबद्ध करता हूं, तो app_config.yml फ़ाइल अभी भी मेरे रेपो में है। मैं उस फाइल को अपने रेपो से हटाना चाहता हूं। मैं यह कैसे कर सकता हूं?

उत्तर

43

"ignoring doesn't remove a file"
में mentionned के रूप में (निम्न उद्धरण निक Quaranto,
अपने ब्लॉग git ready में "git एक समय में एक प्रतिबद्ध सीख" से महान लेख):

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

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

git rm --cached <file> 

बहरहाल, यह अभी के इतिहास में फ़ाइल रखेंगे।

  • अपने भंडार के प्रतिबद्ध पुनर्लेखन, या
  • से शुरू:

    आप वास्तव में इतिहास से निकालने के लिए चाहते हैं, तो आप वास्तव में दो विकल्प हैं।

दोनों विकल्प वास्तव में चूसते हैं, और यह एक अच्छे कारण के लिए है: गिट आपके डेटा को खोने के लिए कड़ी मेहनत करता है।
बस रीबेजिंग के साथ, गिट आपको इस तरह के विकल्पों के बारे में सोचने के लिए मजबूर करता है क्योंकि वे विनाशकारी परिचालन हैं।

यदि आप वास्तव में इतिहास से एक फ़ाइल को हटाना चाहते हैं, तो git filter-branch हैकॉ जिसे आप ढूंढ रहे हैं।
इसका उपयोग करने से पहले अपने manpage पर निश्चित रूप से पढ़ा जाए, क्योंकि यह सचमुच आपके प्रोजेक्ट के कामों को फिर से लिख देगा। यह वास्तव में कुछ कार्यों के लिए एक शानदार उपकरण है, और सभी प्रकार की चीजें कर सकता है जैसे कि परियोजना रूट रूट को स्थानांतरित करने के लिए पूरी तरह से लेखक की प्रतिबद्धता को हटा देना।सभी संशोधन से एक फ़ाइल को हटाने के लिए आदेश है:

git filter-branch --index-filter 'git rm --cached <file>' HEAD 

यह कार्रवाई निश्चित रूप से उपयोगी हो सकता है जब आप संवेदनशील या गोपनीय जानकारी है कि अपने भंडार में रखा गया हो सकता है बाहर उड़ाने की जरूरत है

संबंधित मुद्दे