पूर्व-अद्यतन अपडेट-इंडेक्स -स्काइप-वर्कट्री को पूर्ववत करें


148

कुछ समय पहले मैंने git द्वारा ट्रैक की गई फ़ाइल में परिवर्तनों को अनदेखा करने के लिए ऐसा किया था:

git update-index --skip-worktree <file>

अब मैं वास्तव में उस फ़ाइल के स्रोत में परिवर्तन करना चाहता हूं। मैं इसके प्रभावों को पूर्ववत कैसे करूं skip-worktree?


11
मुझे यह भी दिलचस्पी है कि 'स्किप-वर्कट्री' राज्य में फ़ाइलों की सूची कैसे प्राप्त करें?
ट्रिक्स

जवाबों:


202

अहा! मुझे बस चाहिए:

git update-index --no-skip-worktree <file>

8
आई लव अहा!
रुतो कोलिन्स 12

1
जो इसे
फेंक

1
अहा! = यूरिका! : D
Daut

मैं बना सकता है कि ऊपर!
टॉम पैडीला

पृष्ठ के निचले भाग में सबसे अच्छा उत्तर क्यों है
कार्ल क्रोगर इहल

35

Http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html के अनुसार उपयोग करें

git ls-files -v

एक विशेष पत्र के साथ चिह्नित "अपरिवर्तित मान" और "स्किप-वर्कट्री" फ़ाइलों को देखने के लिए। "स्किप-वर्कट्री" फाइलों के साथ चिह्नित हैं S

संपादित करें : जैसा कि @amacleod ने उल्लेख किया है, सभी छिपी हुई फ़ाइलों को सूचीबद्ध करने के लिए एक उपनाम बनाना एक अच्छी चाल है ताकि आपको इसे याद रखने की आवश्यकता न हो। मैं alias hidden="git ls-files -v | grep '^S'"अपने .bash_profile में उपयोग करता हूं। यह बहुत अच्छा काम करता है!


9
साफ। मैं उन git ls-files -v | grep '^S'फाइलों को सूचीबद्ध करने के लिए उपयोग कर सकता हूं जिन्हें मैंने स्किप-वर्कट्री के साथ "छिपा" रखा है। उस आदेश के लिए एक उपनाम "छिपा" बनाने की उम्मीद है, लेकिन उपनाम में एक पाइप पुनर्निर्देशन काम नहीं कर रहा था।
ताबीज

5
@amacleod एक का उपयोग करें !। जैसे यह [alias] ignored = !git ls-files -v | grep "^S"टेस्टेड, काम करता है।
स्टीवन लू

@amacleod लगता है कि आप विंडोज के लिए एक वैकल्पिक आदेश का सुझाव देने में सक्षम नहीं होंगे?
स्टीव चैम्बर्स

1
@SteveChambers, स्थापित करने की कमी, grepमुझे नहीं पता। आपके खोल पर निर्भर करता है, मुझे लगता है। गिट बैश के साथ आता है grep, मुझे लगता है।
amacleod

1
शानदार, धन्यवाद @amacleod - बस मेरे रास्ते में नहीं था। विंडोज पर काम करने के लिए मुझे केवल एक चीज को बदलने की ज़रूरत थी, वह थी बोली शैली - 'काम नहीं किया लेकिन "किया, यानीgit ls-files -v | grep "^S"
स्टीव चेम्बर्स

17

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

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

1
यह सबसे अच्छा जवाब है
देव

यह उत्तर शुद्ध सोना है!
योसिको

7

@ GuidC0DE उत्तर के आधार पर, यहां पॉवर्सशेल के लिए एक संस्करण है (मैं पॉश-गिट का उपयोग करता हूं )

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})

और संदर्भ के लिए भी फ़ाइलों को छिपाने के लिए विपरीत आदेश:

git update-index --skip-worktree $(git ls-files --modified)

3

कछुआ गिट का उपयोग करने वालों के लिए:

  1. फ़ोल्डर पर या विशिष्ट फ़ाइल पर राइट क्लिक करें, फिर चुनें TortoiseGit > Check for modifications
  2. केवल जाँच करें Show ignore local changes flagged files। आपको उस फ़ाइल को देखना चाहिए जिसे आपने अनदेखा किया है (या आपकी अनदेखी की गई सभी फ़ाइलें, यदि आपने फ़ोल्डर पर राइट क्लिक किया है)
  3. फ़ाइल पर राइट क्लिक करें और चुनें Unflag as skip-worktree and assume-unchanged

3

आप सभी के लिए जो बैश उपनाम से प्यार करते हैं, यहाँ उन सभी पर शासन करने के लिए मेरा सेट है (C0DEF52 पर आधारित)

alias gitskip='git update-index --skip-worktree ' #path to file(s)
alias gitlistskiped='git ls-files -v | grep ^S'
alias gitunskip='git update-index --no-skip-worktree ' #path to file(s)
alias gitunskipall='git ls-files -v | grep -i ^S | cut -c 3- | tr ''\\012'' ''\\000'' | xargs -0 git update-index --no-skip-worktree'

0

यह उत्तर विंडोज का उपयोग करने वाले कम तकनीकी लोगों के लिए है।

यदि आपको याद नहीं है / पता नहीं है कि आपने किन फ़ाइलों को "स्किप-वर्कट्री" पर क्लिक किया है:

git ls-files -v             //This will list all files, you are looking for the ones with an S at the beginning of the line. 

git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".

अपनी समस्या को ठीक करने के लिए:

आप फ़ाइलों पर जा सकते हैं -> राइट क्लिक -> पिछले संस्करण को पुनर्स्थापित करें -> शीर्ष पर "गिट" टैब पर क्लिक करें -> नीचे "स्किप-वर्कट्री" चेकबॉक्स को अनचेक करें -> "लागू करें" पर क्लिक करें।

यदि फाइलें हाथ से ठीक करने के लिए बहुत अधिक हैं, तो आपको अन्य उत्तरों को संदर्भित करने की आवश्यकता होगी।

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