git - उन फ़ाइलों को अनदेखा करें जो पहले से ही गिट भंडार के लिए प्रतिबद्ध हैं




caching version-control (14)

मेरे पास पहले से ही प्रारंभिक गिट भंडार है जिसे मैंने एक .gitignore फ़ाइल में .gitignore है। मैं फ़ाइल इंडेक्स को रीफ्रेश कैसे कर सकता हूं ताकि फ़ाइलों को अनदेखा किया जा सके?


'उत्तर' कमांड के बारे में बहुत कुछ नहीं पता था, मैंने इसे भाग लिया, मेरी निराशा के लिए बहुत कुछ। यह आपके गिट रेपो से प्रत्येक फ़ाइल को दोबारा हटा देता है।

बचाव के लिए ... कैसे एक "गिट आरएम-आर" वापस करने के लिए?

git reset HEAD

क्या चाल है, क्योंकि मेरे पास स्थानीय फाइलें असामान्य थीं जिन्हें मैं ओवरराइट नहीं करना चाहता था।


अगर आप फ़ाइल को अपने स्थानीय सिस्टम से फ़ाइल को हटाए बिना ट्रैकिंग फ़ाइल को रोकना चाहते हैं, जिसे मैं config/database.yml फ़ाइल को अनदेखा करने के लिए पसंद करता हूं। बस कोशिश करें:

git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.

अब, इस फ़ाइल को .gitignore फ़ाइल में जोड़ें और परिवर्तन करें। और अब से, config / database.yml में किए गए किसी भी बदलाव को गिट द्वारा ट्रैक नहीं किया जाएगा।

$ echo config/database.yml >> .gitignore

धन्यवाद


एक ऐसी फ़ाइल को अनचाहे करने के लिए जो आपके भंडार में पहले से जोड़ा / प्रारंभ किया गया है, यानी , फ़ाइल को ट्रैक करना बंद करें लेकिन इसे अपने सिस्टम उपयोग से हटाएं: git rm --cached filename

अपने फ़ाइल में अब मौजूद प्रत्येक फ़ाइल को अनचाहे करने के लिए .gitignore:

पहले किसी भी उत्कृष्ट कोड परिवर्तन करें , और फिर, इस आदेश को चलाएं:

git rm -r --cached .

यह इंडेक्स (स्टेजिंग क्षेत्र) से किसी भी बदली गई फ़ाइलों को हटा देता है, फिर बस चलाएं:

git add .

इसे प्रतिबद्ध करें:

git commit -m ".gitignore is now working"

git rm --cached filename को पूर्ववत करने के लिए, git add filename उपयोग करें।

git add . चलाने से पहले अपने सभी महत्वपूर्ण बदलावों को सुनिश्चित करना सुनिश्चित करें git add . अन्यथा, आप अन्य फ़ाइलों में कोई भी परिवर्तन खो देंगे।


एक बात यह भी ध्यान में रखनी चाहिए कि क्या .gitignore अनचाहे फ़ाइलों को अनदेखा नहीं कर रहा है यह है कि आपको अनदेखा के समान रेखा पर टिप्पणियां नहीं होनी चाहिए। तो यह ठीक है

# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*

लेकिन यह काम नहीं करेगा:

foo*   # ignore all foo.txt, foo.markdown, foo.dat, etc.

.gitignore बाद के मामले को "नामित फ़ाइलों को अनदेखा करें" के रूप में व्याख्या करता है "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc." , जो, आपके पास नहीं है।


कॉम्प्लेक्स हर जगह जवाब!

बस निम्नलिखित का प्रयोग करें

git update-index --assume-unchanged filename

यह उन फ़ाइलों को हटा देगा जिन्हें आप मूल से अनदेखा करने की कोशिश कर रहे हैं, न कि आपके कंप्यूटर पर मास्टर से!

उसके बाद बस प्रतिबद्ध और धक्का!


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

git rm -r --cached .

मुझे .gitignore के साथ एक अजीब समस्या मिली है। सब कुछ जगह में था और सही लग रहा था। मेरा .gitignore "अनदेखा" क्यों किया गया एकमात्र कारण यह था कि लाइन-एंड मैक-प्रारूप (\ r) में था। तो फ़ाइल को सही लाइन-एंडिंग के साथ सहेजने के बाद (vi में: set ff = unix सेट करें) सबकुछ एक आकर्षण की तरह काम करता है!


मेरी एक और समस्या थी जिसे मैंने एक इनलाइन टिप्पणी दी थी।

tmp/*   # ignore my tmp folder (this doesn't work)

यह काम

# ignore my tmp folder
tmp/

मेरे जैसे धीमे लोगों के लिए शायद एक और सुझाव है =) .gitignore फ़ाइल को अपनी रिपोजिटरी रूट में रखें .git फ़ोल्डर में नहीं । चीयर्स!


मेरे सर्वर लिनक्स सर्वर पर (मेरे स्थानीय देव मैक पर सच नहीं है), जब तक मैं तारांकन नहीं जोड़ता तब तक निर्देशिकाओं को अनदेखा किया जाता है:

www / अभिलेखागार / *

मुझे नहीं पता क्यों, लेकिन यह मुझे कुछ घंटों तक ढीला कर दिया, इसलिए मैं साझा करना चाहता था ...


यदि आप किसी फ़ाइल में परिवर्तनों को अनदेखा करने का प्रयास कर रहे हैं जो पहले से ही भंडार में ट्रैक किया गया है (उदाहरण के लिए एक dev.properties फ़ाइल जिसे आपको अपने स्थानीय वातावरण में बदलने की आवश्यकता होगी लेकिन आप इन परिवर्तनों में कभी भी जांच नहीं करना चाहेंगे) जो आप करना चाहते हैं है:

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

यदि आप फिर से परिवर्तनों को ट्रैक करना शुरू करना चाहते हैं

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

गिट-अपडेट-इंडेक्स (1) मैनुअल पेज देखें

अगर आपको गिट-रीसेट (के via ) जारी रखने के लिए इसकी आवश्यकता होती है तो अपडेट-इंडेक्स के लिए skip-worktree और no-skip-worktree विकल्प भी देखें।

अपडेट करें: चूंकि लोग पूछ रहे हैं, यहां एक सुविधाजनक (और नीचे टिप्पणी के बाद से अपडेट किया गया है) यह देखने के लिए कि कौन सी फाइलें वर्तमान में "अनदेखा" (--समूह-अपरिवर्तित) आपके स्थानीय कार्यक्षेत्र में हैं

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

यदि आपको कई अनदेखी फ़ाइलों को ट्रैक करना बंद करना है, तो आप कुछ आदेशों को जोड़ सकते हैं:

git ls-files -i --exclude-standard | xargs -L1 git rm --cached

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

git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm


यहां एक अन्य समस्या का उल्लेख नहीं किया गया है, यदि आपने विंडोज नोटपैड में अपना .gitignore बनाया है, तो मुझे पता चला है कि यह अन्य प्लेटफॉर्म पर गड़बड़ जैसा दिख सकता है। कुंजी यह सुनिश्चित करने के लिए है कि आपको एन्कोडिंग नोटपैड में एएनएसआई पर सेट किया गया है, (या लिनक्स पर फ़ाइल को मेरे द्वारा किया गया है)।

मेरे उत्तर से यहां: https://.com/a/11451916/406592


हां - .gitignore सिस्टम केवल उन फ़ाइलों को अनदेखा करता है जो वर्तमान में गिट से संस्करण नियंत्रण में नहीं हैं।

यदि आप पहले से ही git-add का उपयोग करके test.txt नामक एक फ़ाइल git-add , तो test.txt को .gitignore जोड़ना अभी भी test.txt को ट्रैक करने के लिए परिवर्तनों का कारण बन जाएगा।

आपको पहले git rm test.txt करना होगा और उस बदलाव को करना होगा। केवल तब test.txt बदल जाएगा अनदेखा किया जाएगा।





git-rm