आप .itignore का उपयोग किए बिना Git फ़ाइलों को कैसे अनदेखा करते हैं?


132

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

जवाबों:


178

Gitignore के अनुसार, मत भूलो , कि विभिन्न "अनदेखा पैटर्न स्रोतों" में पूर्वता का एक आदेश है जो कि निम्नलिखित को स्वीकार करते हैं:

  • पैटर्न उन कमांड के लिए कमांड लाइन से पढ़ते हैं जो उनका समर्थन करते हैं।
  • पथ के रूप में एक ही निर्देशिका में .gitignore फ़ाइल से या किसी भी मूल निर्देशिका में प्रतिमान, उच्च स्तर फ़ाइलों (रूट तक) में पैटर्न के साथ निचले स्तर की फाइलों में फ़ाइल युक्त निर्देशिका में उन लोगों द्वारा ओवरराइड किया जा रहा है।
  • पैटर्न से पढ़ा $GIT_DIR/info/exclude
  • कॉन्फ़िगरेशन चर द्वारा निर्दिष्ट फ़ाइल से पढ़े गए पैटर्न core.excludesfile

अंतिम दो आपकी समस्या का समाधान हो सकते हैं लेकिन:

  • उन्हें दूर के भंडार के लिए दोहराया नहीं जाता है
  • वे अन्य स्रोतों द्वारा अपने पैटर्न को ओवरराइड कर सकते हैं

(इस SO प्रश्न को भी देखें )


अन्य दो समाधानों में सूचकांक को अद्यतन करना शामिल है ( git update-index):

हालाँकि, जब आप किसी अन्य शाखा या जब आप चेकआउट करते हैं git pull, तो वह "अनदेखा" स्थिति रीसेट हो सकती है। इसलिए अन्य विकल्प:

दोनों के बीच के अंतर को " गिट - डिफरेंस बिथ assume-unchanged'और' skip-worktree' " में समझाया गया है ।


आप update-index --assume-unchanged@see stackoverflow.com/a/25253144/292408
एलिजा लिन

1
@ElijahLynn पक्का। आपके पास भी है update-index --skip-work-tree। मैंने उन दोनों update-indexआदेशों को दर्शाने वाले पुराने उत्तरों में कुछ लिंक जोड़ने का उत्तर दिया ।
VonC

140

यदि आप संशोधित .git/info/excludeकर सकते हैं तो आप वही नियम वहां रख सकते हैं। लेकिन वह फाइल केवल आपके स्थानीय रेपो के भीतर है।


ऐसा लगता है कि यह शायद आपकी सबसे अच्छी शर्त है; चलो आप अपने स्थानीय भंडार से फ़ाइलों को बाहर करते हैं।
एबिजर्न

1
यह सबमॉड्यूल के साथ कैसे काम करता है? .gitएक
सबमॉडल

10
@yourfriendzak एक सबमॉड्यूल का .gitफोल्डर वास्तव में है parent_repo/.git/modules/submodule_name। तो आप संपादित करेंगेparent_repo/.git/modules/submodule_name/info/exclude
कारा ब्राइटवेल

25

GIT को बताने के लिए तीन तरीके हैं, जिन्हें अनदेखा करना है:

  • .gitignore फ़ाइलें
  • $GIT_DIR/.git/info/exclude
  • core.excludesfileसेटिंग के माध्यम से बताई गई फाइलें

बाद के दो बिंदु आपकी समस्या को हल कर सकते हैं।

अधिक जानकारी के लिए, gitignore (5) देखें


5

यदि आप रिपॉजिटरी में कुछ स्थानीय फ़ाइलें रखना चाहते हैं और उपनिर्देशिका का स्थान लचीला है, तो आप अपनी फ़ाइलों को अंदर रख सकते हैं tracked_dir1/tracked_dir2/untracked_dir/और फिर tracked_dir1/tracked_dir2/untracked_dir/.gitignoreसामग्री के साथ जोड़ सकते हैं:

*

अर्थात

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>

4

मैं इसी तरह की स्थितियों में रहा हूं, इसलिए मैं अपना पसंदीदा समाधान जोड़ रहा हूं जिसे मैं उल्लेख नहीं करता। git update-index --assume-unchangedइस मामले में समस्या यह है कि आप एक अनट्रैक फ़ाइल के लिए ऐसा नहीं कर सकते। तुमने कहा था

मैं अपने भंडार के .gitignore को संशोधित नहीं कर सकता।

मैं मान रहा हूं कि आपके कहने का मतलब यह है कि आप किसी भी बदलाव को आगे नहीं बढ़ा सकते .gitignoreहैं। अगर ऐसा है तो आप जो भी कर सकते हैं, उसमें अनलॉक्ड फाइल को अपने लोकल में शामिल कर सकते हैं .gitignore, फिर ऐसा git update-index --assume-unchanged .gitignoreकरें कि आपके द्वारा किया गया बदलाव .gitignoreकभी धकेल न दिया जाए। अब आप (संभवतः) अनट्रैक फ़ाइल को अनदेखा कर रहे हैं, और दूरस्थ .gitignoreफ़ाइल को प्रभावित नहीं कर रहे हैं ।


3

ट्रैक की गई फ़ाइलों में स्थानीय परिवर्तनों को अनदेखा करें: git update-index --assume-unchanged my-file.php

ट्रैक की गई फ़ाइलों में स्थानीय परिवर्तन निर्दिष्ट करें: git update-index --no-assume-unchanged my-file.php

स्रोत: git help update-index

--[no-]assume-unchanged
           ...
           This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
           files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
           modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
           changed upstream, you will need to handle the situation manually.


1

दूसरा रास्ता:

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