ज़रूर, मैं समय-समय पर इसका उपयोग करता हूं
git update-index --assume-unchanged [<file> ...]
पूर्ववत करने के लिए और फिर से ट्रैकिंग शुरू करें (यदि आप भूल गए कि कौन सी फाइलें अनट्रैक थीं, तो यह प्रश्न देखें ):
git update-index --no-assume-unchanged [<file> ...]
प्रासंगिक दस्तावेज :
- [नहीं-] धारणा-अपरिवर्तित
जब यह ध्वज निर्दिष्ट किया जाता है, तो पथों के लिए दर्ज की गई वस्तु के नाम अपडेट नहीं किए जाते हैं। इसके बजाय, यह विकल्प पथों के लिए "अपरिवर्तित मान" को सेट / अनसेट करता है। जब "मान अपरिवर्तित" बिट चालू होता है, तो उपयोगकर्ता फ़ाइल को नहीं बदलने का वादा करता है और गिट को यह मानने की अनुमति देता है कि कार्यशील ट्री फ़ाइल सूचकांक में दर्ज की गई चीज़ों से मेल खाती है। यदि आप वर्किंग ट्री फ़ाइल को बदलना चाहते हैं, तो आपको गिट को बताने के लिए थोड़ा परेशान होना होगा। यह कभी-कभी मददगार होता है जब किसी बड़ी परियोजना के साथ काम करना एक फाइल सिस्टम पर होता है जिसमें बहुत धीमी lstat(2)
प्रणाली कॉल होती है (जैसे cif)।
यदि किसी कमेटी में विलय करते समय सूचकांक में इस फ़ाइल को संशोधित करने की आवश्यकता होती है, तो Git (कृपापूर्वक) विफल हो जाएगा; इस प्रकार, यदि मान लिया गया कि अनट्रैक की गई फ़ाइल को अपस्ट्रीम में बदल दिया जाता है, तो आपको स्थिति को मैन्युअल रूप से संभालना होगा।
इस मामले में इनायत से असफलता का मतलब है, अगर कोई फ़ाइल में बदलाव (वैध परिवर्तन, आदि) होता है जब आप एक पुल करते हैं, तो यह कहेगा:
$ git pull
…
From https://github.com/x/y
72a914a..106a261 master -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
filename.ext
और विलय करने से इंकार कर देगा।
उस बिंदु पर, आप अपने स्थानीय परिवर्तनों को देखते हुए इसे दूर कर सकते हैं, यहां एक तरीका है:
$ git checkout filename.ext
फिर फिर से खींचें और अपनी स्थानीय फ़ाइल को फिर से संशोधित करें, या सेट –no-assume-unchanged
कर सकते हैं और आप उस बिंदु पर सामान्य स्लैश और मर्ज कर सकते हैं, आदि।