। प्रतिबद्ध फ़ाइल को लागू करना


436

मैंने उन फ़ाइलों का लोड किया है जिन्हें मैं अब अनदेखा करना चाहता हूं। मैं कैसे बता सकता हूं कि अब भविष्य के हिट्स से इन फ़ाइलों को अनदेखा करें?

संपादित करें: मैं उन्हें रिपॉजिटरी से भी निकालना चाहता हूं। वे कभी भी निर्माण के बाद या उपयोगकर्ता-विशिष्ट टूलिंग समर्थन के लिए बनाई गई फ़ाइलें हैं।


1
संभव नहीं
Wooble

8
@Wooble उत्तर समान हो सकता है, लेकिन यह प्रश्न वास्तव में उस समस्या का वर्णन करता है जिसका मैं सामना कर रहा था और जिसे हल करने की आवश्यकता थी।
rjmunro

1
यह वह उत्तर है जो सीधे आपके गिट रेपो में न्यूनतम बदलाव के साथ शीर्षक प्रश्न को संबोधित करता है: stackoverflow.com/a/26245961/3543437
kayleeFrye_onDeck

जवाबों:


471

12
हालाँकि बहुत सारी फाइलें हैं। मैं हर एक के लिए ऐसा नहीं करना चाहता
user880954

1
क्या फ़ाइलें किसी भी सामान्य निर्देशिका में हैं? यदि नहीं, तो समस्या एक शेल उपयोग के प्रश्न को कम करती है, एक गिट को नहीं।
मैट बॉल

12
वहाँ एक 'मैं करने के लिए अपने प्रारंभिक प्रतिबद्धता के बाद तक अपने .gitignore जोड़ने के लिए भूल गया' की जरूरत है।
ल्यूक पुप्लेट

9
इसका उत्तर इस एक से नीचे है।
यह उतार चढ़ाव भरा

3
इसने मुझे झंडा -r जोड़ने के लिए कहा ताकि ऐसा करने में सक्षम हो।
विशाल गुलाटी

599

.gitignoreनजरअंदाज की गई फाइलों से मिलान करने के बाद , आप उन git ls-files -ci --exclude-standardफ़ाइलों को देखने के लिए कर सकते हैं जो बहिष्कृत सूची में शामिल हैं; फिर आप कर सकते हैं

//On Linux:
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
//On Windows:
for /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
//On mac
alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"

उन्हें रिपॉजिटरी (डिस्क से हटाए बिना) से निकालने के लिए।

संपादित करें : आप इसे अपने .gitconfig फ़ाइल में एक उपनाम के रूप में भी जोड़ सकते हैं ताकि आप इसे कभी भी पसंद कर सकें। बस [उपनाम] अनुभाग के तहत निम्नलिखित पंक्ति जोड़ें (विंडोज या मैक के लिए आवश्यकतानुसार संशोधित करें):

apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached

( -rध्वज खाली परिणाम पर चलने से xargsरोकता git rmहै और इसके उपयोग संदेश को प्रिंट करता है, लेकिन यह केवल GNU खोज द्वारा समर्थित हो सकता है। xargsहो सकता है कि अन्य संस्करणों में भी ऐसा ही कोई विकल्प हो।)

अब आप केवल git apply-gitignoreअपने रेपो में टाइप कर सकते हैं , और यह आपके लिए काम करेगा!


10
मुझे लगता है कि मैक के लिए xargs में कोई -r नहीं है ... या मेरा बुग्गी / पुराना है, मुझे नहीं पता ... और !इससे पहले क्यों ? अच्छा ... मेरा एक के रूप में काम किया alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"। टी.के.एस!
फेलिप सबिनो

18
विंडोज परfor /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
ल्यूक पुप्लेट

यह सिर्फ मेरी .गितिग्नोर फाइलों को हटा दिया है, न कि मैं जिन फाइलों को अनदेखा करना चाहता था। उन्हें .ignignore फाइलों में सूचीबद्ध किया गया था - क्या वह बिंदु था?
हिप्पीजिम

@ हिप्पीजिम यदि फाइलें पहले से ही प्रतिबद्ध हैं (भले ही वे .गितिग्नोर में सूचीबद्ध थे), और .ignignore अभी तक प्रतिबद्ध नहीं है, तो यह अपेक्षित परिणाम होगा, अन्यथा, मुझे यकीन नहीं है कि आपके मामले में क्या चल रहा है।
जोनाथन कॉलन

1
मैक उपयोगकर्ताओं के लिए, -rडिफ़ॉल्ट है और बीएसडी संस्करणों द्वारा स्वीकार नहीं किया जाता है। तो हटा दो -r
वीशी ज़ेंग

136

रेपो में फ़ाइल को छोड़ दें लेकिन भविष्य में होने वाले परिवर्तनों को अनदेखा करें:

git update-index --assume-unchanged <file>

और इसे पूर्ववत करने के लिए:

git update-index --no-assume-unchanged <file>

यह पता लगाने के लिए कि कौन सी फाइलें इस तरह सेट की गई हैं:

git ls-files -v|grep '^h'

http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/ के मूल उत्तर के लिए क्रेडिट


1
क्रोनियल के पास एक निर्देशिका के लिए इस पुनरावृत्ति को करने के लिए एक शानदार उत्तर है: stackoverflow.com/a/16346756/1101076
jordan314

मैं एक IDE कॉन्‍फ़िगर करना चाहता था, लेकिन इसके लिए अनावश्यक परिवर्तन ट्रैक नहीं कर रहा था। यह काम करता है, हालांकि मुझे यकीन नहीं है कि यह उन लोगों के लिए काम करेगा जो रिपॉजिटरी की जांच करते हैं। git ls-files -ci --exclude-standard -z | xargs -0 git update-index --assume-unchangedअगर यह मदद करता है के साथ जोड़ा जा सकता है ।
dlamblin

7
यह एकमात्र ऐसा उत्तर है जो शीर्षक प्रश्न पूछता है ठीक है। उत्तम! इनमें से अधिकांश उत्तर अनावश्यक रूप से फाइलों के साथ खिलवाड़ कर रहे थे।
kayleeFrye_onDeck

1
यह प्रश्न के लिए बिल्कुल सही उत्तर है। आदेशों का उपयोग करने git rm --cachedसे रिपॉजिटरी में फ़ाइल को हटा दिया जाएगा, जो क्विज़र की आवश्यकता को पूरा नहीं करता है। धन्यवाद। मैं वास्तव में इसकी प्रशंसा करता हूँ। आपका जवाब मुझे बहुत मदद करता है।
रामविनय

88

सुनिश्चित करें कि आपका वास्तविक रेपो नवीनतम संस्करण है

  1. .gitignoreइच्छानुसार संपादित करें
  2. git rm -r --cached .
  3. git add .

फिर हमेशा की तरह


14
यह स्वीकृत उत्तर होना चाहिए क्योंकि विशेष रूप से कहा गया कि हटाने के लिए बहुत सारी फाइलें थीं।
नब्बेचैट 12

3
ध्यान दें कि चरण 2 में एक बड़ा भंडार होने पर आपको कुछ समय लग सकता है।
ब्रेनबैग

यह सिर्फ सूचकांक से सभी फ़ाइलों को हटाने के लिए नेतृत्व किया ! इसने मुझे बचाया: git reset HEAD(किसी भी बदलाव को याद रखना)
aksh1618

2
चरण 2 सब कुछ निकाल देता है, हाँ, लेकिन चरण 3 को उन सभी को पढ़ना चाहिए, सिवाय उन लोगों के जो कि .ignignore के कारण विफल होते हैं।
शाम 19: 19

11

पुराना सवाल है, लेकिन हम में से कुछ git-posh(शक्तियां) हैं। यह उस के लिए समाधान है:

git ls-files -ci --exclude-standard | foreach { git rm --cached $_ }

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