git update-index - निर्देशिका पर अपरिवर्तित-अपरिवर्तित


101

git 1.7.12

मैं दी गई निर्देशिका के नीचे सभी फाइलों को मान-अपरिवर्तित के रूप में चिह्नित करना चाहता हूं।

1) git update-index --assume-unchaged dir/"इग्नोरिंग पाथ" देता है।

2) git update-index --assume-unchaged dir/*जल्दी से विफल हो जाता है क्योंकि यह उन फ़ाइलों का सामना करेगा, जिन्हें ट्रैक नहीं किया जा रहा है, इसलिए यह "घातक: फ़ाइल को चिह्नित करने में असमर्थ" और क्विट करता है।

3) चिह्नित करने के लिए फ़ाइलों की एक सूची बनाने का प्रयास करें। cdवांछित निर्देशिका में और फिर चला git ls-files | tr '\n' ' ' | git update-index --assume-unchanged। यह कोई त्रुटि संदेश नहीं देता है, लेकिन यह फ़ाइलों को सफलतापूर्वक चिह्नित नहीं करता है। कमांड का पहला भाग git ls-files | tr '\n' ' ', सही ढंग से उन सभी फाइलों की एक स्पेस सीमांकित सूची तैयार करता है जिन्हें मैं चिह्नित करना चाहता हूं। यदि मैं कमांड-लाइन पर उस कमांड के आउटपुट को कॉपी और पेस्ट करता हूं, तो git update-indexकमांड काम करता है। पाइप के साथ क्या काम नहीं कर रहा है?

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

जवाबों:


174

git update-index इसकी कमांड लाइन पर फ़ाइल नाम चाहता है, इसके मानक इनपुट पर नहीं।

चरण 1:

cd उस फ़ोल्डर में जिसे आप मान लेना चाहते हैं, अपरिवर्तित है

चरण 2:

आप यह कर सकते हैं:

git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')

या

git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged

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

git ls-files -z | xargs -0 git update-index --assume-unchanged

संपादित करें: @MatthewScharley से इनपुट को शामिल किया गया git ls-files -z

विंडोज कमांड्स

नोट: यदि आप खिड़कियों पर हैं, तो इन कमांड्स को चलाने के लिए Git Bash का उपयोग करें


2
FYI करें, कि `| tr '\ n' '' बिट अनावश्यक है।
व्लाकव स्लेविक

7
@twalberg: आप बस इस्तेमाल कर सकते हैंgit ls-files -z
मैथ्यू शेर्ले

2
@twalberg इस आदेश को पूर्ववत कैसे करें "git ls-files -z | xargs -0 git update-index -assume-अपरिवर्तित"
मोहम्मद हुसैन

3
@MohamedHussain git ls-files -z | xargs -0 git update-index --no-assume-unchanged, मुझे लगता है कि ...
twalberg

1
git ls-files -z | git update-index -z --stdinक्लीनर है।
जेडी

22

findजीएनयू Findutils से आदेश एक है -execजो का उपयोग कर की परेशानी से ज्यादातर को हटा विकल्प xargsहालांकि इसके वाक्य रचना एक छोटे से खास है,। हालांकि यह रिक्त स्थान के साथ फ़ाइल नाम के साथ पूरी तरह से व्यवहार करता है।

यह कमांड सभी फाइलों को मानने के लिए तैयार होगी और सूचीबद्ध निर्देशिका के तहत अपरिवर्तित हैं:

find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;

ढूँढें हर तर्क तब -execतक लेता है जब तक ;(जो आपको अपने शेल से बचने के लिए है, इसे खा लेता है) और इसे प्रत्येक फ़ाइल के लिए एक बार चलाता है, जबकि {}पाया फ़ाइल के नाम के साथ (फिर, एकल उद्धृत तो आपका शेल इसे नहीं खाएगा)।

findमिलान के मानदंड (अधिकतम पुनरावृत्ति की गहराई का उपयोग करना , चाहे मैच एक फ़ाइल हो या एक निर्देशिका हो, चाहे फ़ाइल नाम एक अभिव्यक्ति से मेल खाता हो) और -execआप सभी प्रकार की शक्तिशाली चीजें कर सकते हैं।

के अन्य कार्यान्वयन के बारे में निश्चित नहीं है findआदेश के । YMMV।


2
-execएक मानक विकल्प है । आप -exec git update-index --assume-unchanged {} +(मानक द्वारा परिभाषित भी) कर सकते हैं, जो एक ही बार में कमांड में कई फ़ाइल नाम से गुजरता है, गिट कमांड को लागू करने की संख्या को कम करता है।
टॉम फेनेच

16

निर्देशिका नाम को इसमें जोड़ें .git/info/exclude। यह बिना फाइल के काम करता है।


यह महान काम! क्या आप जानते हैं कि यह फाइलों के साथ भी काम करता है?
betomoretti

लेकिन यह अबाधित फ़ाइलों को नहीं धकेलता है! क्या रिकॉर्ड से उन्हें अनदेखा करने का कोई संभावित तरीका है, लेकिन वास्तव में उन्हें रेपो में रखा जा रहा है!
महमूद ज़ाल्ट

2

यीप,

git update-index --assume-unchanged

केवल फाइलों के साथ काम करता है, निर्देशिकाओं के साथ नहीं। मुझे लगता है, तेज तरीकों में से एक:

cd dir
ls | xargs -l git update-index --assume-unchanged

2
उपयोग करने के बजाय cd, आप अंतिम तर्क के रूप में dir पास कर सकते हैं git ls-files -- $DIR | xargs -l git update-index --assume-unchanged -- $DIR:।
kzh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.