पूर्व-अद्यतन अपडेट-इंडेक्स - पूर्व-अपरिवर्तित <फ़ाइल> को पूर्ववत करें


462

जिस तरह से आप किसी विशेष dir / फ़ाइल को देखने / ट्रैकिंग पर ध्यान नहीं देते हैं। आप बस इसे चलाते हैं:

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

अब आप इसे पूर्ववत कैसे करते हैं ताकि उन्हें फिर से देखा जाए? (चलो इसे संयुक्त राष्ट्र मान लेते हैं।)


5
सिर्फ यह कहने के लिए एक नोट कि यह प्रतीत होता है कि स्किप-वर्कट्री सभी संभावना में है, जिसे आप मान-अपरिवर्तित की तुलना में उपयोग करना बेहतर होगा, जब तक कि गिट का प्रदर्शन आपकी समस्या नहीं है। stackoverflow.com/questions/13630849/…
GreenAsJade

जवाबों:


587

पूर्ववत करने के लिए / dir की ऐसी फ़ाइलें दिखाएं जो मान लें-अपरिवर्तित हैं, इसे चलाएं :

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

इसे assume-unchangedचलाने के लिए dir / फ़ाइलों की सूची प्राप्त करने के लिए :

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


7
आपके grep स्टेटमेंट में मामूली सुधार, यह '^ [az]' का उपयोग सभी उपेक्षित फाइलों को पकड़ने के लिए कर सकता है, क्योंकि पहला अक्षर टैग 'H' / 'h' के अलावा अन्य अक्षर हो सकता है। से git-scm.com/docs/git-ls-files : यह विकल्प की पहचान करता है प्रत्येक पंक्ति के शुरू में निम्नलिखित टैग (फिर एक रिक्ति) के साथ फ़ाइल की स्थिति: एच :: कैश्ड एस :: छोड़-worktree एम: : अनमैरिड आर :: हटाए / हटाए गए C :: संशोधित / परिवर्तित K :: मारे जाने के लिए? :: अन्य
Bdoserror

8
एक और उपयोगी चाल है git ls-files -v|grep '^h'|cut -c3-, जो आपको "एच" उपसर्ग के बिना, केवल फ़ाइल नाम देगा।
रटसम

9
यदि आप उन फ़ाइलों को नहीं जानते हैं जो आप assume-unchanged, बस उपयोग करते हैं git update-index --really-refresh। उस आदेश के साथ, आपको git ls-filesपहले फ़ाइलों के लिए देखने की आवश्यकता नहीं है ।
theDmi

102

यदि यह एक आदेश है जिसे आप अक्सर उपयोग करते हैं - आप इसके लिए एक उपनाम होने पर भी विचार कर सकते हैं। अपने वैश्विक में जोड़ें .gitconfig:

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged

एक उपनाम कैसे सेट करें (यदि आप पहले से नहीं जानते हैं):

git config --configLocation alias.aliasName 'command --options'

उदाहरण:

git config --global alias.hide 'update-index --assume-unchanged'
git config... etc

इसे अपने पास सहेजने के बाद .gitconfig, आप एक क्लीनर कमांड चला सकते हैं।

git hide myfile.ext

या

git unhide myfile.ext

यह गिट प्रलेखन बहुत मददगार था।

टिप्पणियों के अनुसार, यह पता लगाने के लिए भी एक उपयोगी उपनाम है कि वर्तमान में क्या फाइलें छिपी हुई हैं:

[alias]
    hidden = ! git ls-files -v | grep '^h' | cut -c3-

2
यह उपनाम बहुत आसान है:hidden = ! git ls-files -v | grep '^h' | cut -c3-
4

42

git अपडेट-इंडेक्स फ़ंक्शन में कई विकल्प हैं जिन्हें आप नीचे टाइप कर सकते हैं:

git update-index --help

यहां आपको विभिन्न विकल्प मिलेंगे - फ़ंक्शन अपडेट-इंडेक्स के साथ कैसे संभालना है।

[यदि आप फ़ाइल का नाम नहीं जानते हैं]

git update-index --really-refresh 

[यदि आप फ़ाइल का नाम जानते हैं]

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

के माध्यम से अनदेखी की गई सूची में जोड़े गए सभी फाइलों को वापस कर देंगे।

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

git अपडेट-इंडेक्स - पूरी तरह से रिफ्रेश, सभी मान्‍य-अपरिवर्तित, जो मैंने बनाया है, टिप के लिए धन्यवाद
Sérgio

git update-index --no-assume-unchanged <file>मेरे जीवन को बचाया .. ठीक है, मैं बस फिर से फ़ोल्डर को सिंक कर सकता हूं, लेकिन मुझे इस समस्या का "वास्तविक" समाधान चाहिए था।
Cagatay Ulubay

38

मैं मानता हूं (हेह) आपका मतलब था --assume-unchanged, क्योंकि मुझे कोई --assume-changedविकल्प नहीं दिखता । का विलोम --assume-unchangedहै --no-assume-unchanged


32

अतिरिक्त दस्तावेज़ लिंक और संक्षिप्त उपनाम के साथ @adardesign, @adswebwork और @AnkitVishwakarma से उत्कृष्ट मूल उत्तरों और @Bdoserror, @Retsam, @seanf, और @torek से टिप्पणियों को संश्लेषित करने के लिए ...

बेसिक कमांड्स

ऐसी फ़ाइल को रीसेट करने के लिए जो मान-अपरिवर्तित वापस सामान्य है:

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

मान-अपरिवर्तित सभी फ़ाइलों को सूचीबद्ध करने के लिए :

git ls-files -v | grep '^[a-z]' | cut -c3-

सभी मान-अपरिवर्तित फ़ाइलों को वापस सामान्य पर रीसेट करने के लिए:

git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --

नोट: यह कमांड जिसे कहीं और सूचीबद्ध किया गया है, किसी भी लंबे समय तक अपरिवर्तित सभी फ़ाइलों को रीसेट करने के लिए प्रकट नहीं होता है (मुझे विश्वास है कि यह इसका उपयोग करता था और पहले इसे एक समाधान के रूप में सूचीबद्ध किया गया था):

git update-index --really-refresh

शॉर्टकट

इन सामान्य कार्यों को git में निष्पादित करना आसान बनाने के लिए , अपने उपयोगकर्ता के लिए निम्न उपनाम अनुभाग जोड़ें / अपडेट .gitconfigकरें (जैसे ~/.gitconfigकि * nix या macOS सिस्टम पर):

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged
    unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
    hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-

1
इसके लिए git hidden, आप शेल उपनामों या लिपियों के बिना एक ही प्रभाव प्राप्त कर सकते हैं, !इस तरह का उपयोग कर :hidden = ! git ls-files -v | grep '^h' | cut -c3-
seanf

1
--really-refreshनहीं करता है (या अब नहीं करता है, शायद यह एक बार किया था) सूचकांक फाइलों पर मान्य-अपरिवर्तित झंडे को साफ करें।
torek

धन्यवाद, @torek! मैंने आपके द्वारा बताए गए व्यवहार की पुष्टि की, और मैंने "सभी को रीसेट करें" मामले में एक अलग समाधान के साथ उत्तर को अपडेट किया।
कैन

20

यदि आप उन सभी फ़ाइलों को पूर्ववत् करना चाहते हैं जिन्हें लागू किया गया था, तो किसी भी स्थिति से अपरिवर्तित मान लिया गया था, न केवल कैश नहीं किया गया (उन्हें निचले मामले में चरित्र द्वारा चिह्नित किया गया), आप निम्न कमांड का उपयोग कर सकते हैं:

git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
  1. git ls-files -v अपनी स्थिति के साथ सभी फाइलों को प्रिंट करेगा
  2. grep '^[a-z]' फ़ाइलों को फ़िल्टर करेगा और केवल अपरिवर्तित मान का चयन करेगा
  3. cut -c 3- स्थिति को हटा देगा और केवल पथ छोड़ देगा, 3-आरडी चरित्र से अंत तक काट कर
  4. tr '\012' '\000' पंक्ति वर्ण (\ 012) के अंत को शून्य वर्ण (\ 000) में बदल देगा
  5. xargs -0 git update-index --no-assume-unchangedgit update-index --no-assume-unchangedपूर्ववत करने के लिए शून्य वर्ण द्वारा अलग किए गए सभी पथों को पास करेगा

यह बहुत उपयोगी है। विस्तृत जानकारी के लिए धन्यवाद!
11:47 बजे चामिथ्रा थुवारा

11

को जोड़ना @adardesignहै इस सवाल का जवाब है, अगर आपको लगता है कि करने के लिए जोड़ दिया गया है सभी फाइलों को रीसेट करना चाहते assume-unchangedकरने के लिए सूची no-assume-unchangedएक ही बार में, आपको निम्न कर सकते हैं:

git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true

यह सिर्फ grep से दो वर्ण आउटपुट को स्ट्रिप करेगा "h ", फिर फ़ाइल नामों में मौजूद किसी भी स्थान से बच सकता है, और अंत || trueमें कमांड को समय से पहले समाप्त करने से रोक देगा अगर कुछ फ़ाइलों में लूप में त्रुटियां हैं।


4

यदि आप Git एक्सटेंशन का उपयोग कर रहे हैं , तो नीचे दिए गए चरणों का पालन करें:

  1. खिड़की पर जाओ।
  2. वर्किंग डायरेक्टरी चेंजेस नाम की ड्रॉपडाउन पर क्लिक करें ।
  3. चुनें दिखाएँ assummed-अपरिवर्तित फ़ाइलों विकल्प।
  4. उस फ़ाइल पर राइट क्लिक करें जिसे आप अनसुम करना चाहते हैं।
  5. का चयन करें कोई ग्रहण नहीं अपरिवर्तित

आप कर चुके हैं।


0

यहां ऐसा कुछ भी नहीं है जो कवर न हो। लेकिन मेरे 2 सेंट जोड़ना चाहेंगे। कई बार, मैं एक बिल्ड चलाता हूं और यह बहुत सारी फाइलें बदल देता है और फिर मैं किसी चीज पर काम करना चाहता हूं, इसलिए यह कमांड वास्तव में मेरी बहुत मदद करता है।

git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`

आशा है कि किसी और को भी यह उपयोगी लगता है।


मुझे लगता है कि आपको .gitignoreअपनी बिल्ड कलाकृतियों को अनदेखा करने से फायदा होगा ।
निक

1
मेरे पास .gitignoreकई बार है, लेकिन मेरे अनुभव में यह पर्याप्त नहीं है। लेकिन मैं उस संदर्भ को समझता हूं जिसमें आप यह कह रहे हैं।
त्यागी अखिलेश

0

किसी भी समाधान ने मेरे लिए विंडोज में काम नहीं किया - यह फ़ाइल की स्थिति के Hबजाय पूंजी का उपयोग करने के लिए लगता है hऔर grep कमांड के लिए अतिरिक्त कैरेट की आवश्यकता होती है क्योंकि ^यह लाइन की शुरुआत का प्रतिनिधित्व करने के साथ-साथ अगले चरित्र की उपेक्षा भी करता है।

विंडोज समाधान

  1. गेट बैश खोलें और प्रासंगिक शीर्ष स्तर निर्देशिका में बदलें।
  2. git ls-files -v | grep '^^H' सभी अनकैप्ड फ़ाइलों को सूचीबद्ध करने के लिए
  3. git ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree उन फ़ाइलों को हटाने के लिए जो सभी फ़ाइलों के माध्यम से की गई थीं update-index --skip-worktree
  4. git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged उन फ़ाइलों को हटाने के लिए जो सभी फ़ाइलों के माध्यम से की गई थीं update-index --assume-unchanged
  5. git ls-files -v | grep '^^H' फिर से सभी अनकैप्ड फ़ाइलों को सूचीबद्ध करें और जांचें कि क्या उपरोक्त कमांड ने काम किया है - इसे अब कुछ भी वापस नहीं करना चाहिए

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