क्या उपनिर्देशिका में .gitignore नियमों की अनदेखी करना संभव है?


83

मैं उपनिर्देशिका में सभी .gitignore नियमों को अनदेखा करना चाहता हूं। रूट में .ignignore नियमों को छोड़कर।

उदाहरण के लिए) मेरे पास पहले से ही .gitignoreएक निर्देशिका संरचना में फ़ाइल है /a

और में भी .gitignoreफ़ाइल है /a/b। मान लें /aकि a.txt b.txtफ़ाइलें हैं।

/a/bहै .configफ़ाइल। .gitignoreमें परिभाषित करता .configहै /a/b

.configफ़ाइल को अनदेखा कर देगा .gitignoreमें /a/b

लेकिन मैं वास्तव में उपनिर्देशिका के .configनियमों की अनदेखी करके फ़ाइल को ट्रैक करना चाहता हूं .gitignore

क्या यह संभव है?

अग्रिम में धन्यवाद

जवाबों:


135

आपका प्रश्न बहुत स्पष्ट नहीं है, लेकिन अगर कुछ उपनिर्देशिकाएँ हैं जहाँ आप अलग-अलग gitignore नियम चाहते हैं, तो आप उस निर्देशिका में एक नया .gitignore बना सकते हैं।

आप कहें:

परियोजना / .gitignore
परियोजना / सामान / .gitignore

/ .Ignignore को सामान में / .ignignore को रूट निर्देशिका में ओवरराइड करेगा।

git help gitignoreया man gitignoreक्या संभव है के बारे में बहुत अधिक जानकारी है।


2
मुझे लगता है कि ओपी पूछ रहा है कि क्या आपके पास एक निर्देशिका संरचना है /a/b/cऔर आप अपडेट करते .gitignoreहैं /a/b, क्या /a/b/cनियमों को अनदेखा करना संभव है /a/bऔर इसके बजाय केवल नियमों का उपयोग करें /a
बजे माइकल मिओर

45
हाँ, अगर यह सवाल था, तो एक .gitignore में नियमों को नकारना संभव है, श्रृंखला के नीचे। "An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again."
साइनइन

3
@signine निर्देशिकाओं के साथ काम नहीं करता है। मेरा जवाब देखिए ।
रॉस पैटरसन

2
मुझे लगता है कि यह कहना अधिक सटीक है: उच्च प्राथमिकता के साथ inner .gitignoreविलीन हो जाएगा outer .gitignore, न कि केवल ओवरराइड।
ट्रम्प 2020 - न्याय

@रिक वांग स्पष्ट रूप से एक उपनिर्देशिका विलय नहीं करता है, लेकिन ओवरराइड करता है: git-scm.com/docs/gitignore
topspin

41

कहते हैं कि आप node_modulesअपनी रिपॉजिटरी में शामिल करना चाहते हैं , लेकिन लाइन के नीचे कुछ मॉड्यूल .gitignoreका अपना है। आप अपनी रूट .gitignoreफ़ाइल में निम्न जोड़कर नियमों को नकार सकते हैं :

# Make sure to include everything in node_modules.
!node_modules/**

3
क्या ऐसा करने के लिए अधिक सामान्य तरीका है? मुझे लगता है कि मुझे मिल गया है node_modules/mod1, node_modules/mod2दोनों के अंदर एक .itignore है जो node_modulesउन लोगों के अंदर की गहराई को अनदेखा करता है (जैसे कि node_modules/mod1/node_modulesमैं मॉड्यूल जोड़ता हूं और अक्सर हटाता हूं इसलिए मैं बहुत अच्छी तरह से नहीं जान सकता हूं और मैन्युअल रूप से नियमों को अनदेखा करने node_modules/mod1/.gitignoreया मैन्युअल रूप से जोड़ने के लिए !node_modules/mod1/node_modulesसभी समय जोड़ता हूं । मूल रूप से मैं एक उल्का ऐप को तैनात करने की कोशिश कर रहा हूं और सभी एम्बेडेड .gitignoresइसे पूरी तरह से
पकड़ में लाना

10

यहां समस्या की कुंजी यह है कि एक मूल निर्देशिका को बाहर रखा गया है। से $ man gitignore:

किसी फ़ाइल को फिर से शामिल करना संभव नहीं है यदि उस फ़ाइल की मूल निर्देशिका को बाहर रखा गया है। Git प्रदर्शन कारणों के लिए बहिष्कृत निर्देशिकाओं को सूचीबद्ध नहीं करता है, इसलिए निहित फ़ाइलों पर किसी भी पैटर्न का कोई प्रभाव नहीं पड़ता है, कोई फर्क नहीं पड़ता कि वे कहाँ परिभाषित हैं।

यहां बताया गया है कि मैंने इसे कैसे काम किया है। दिया हुआ:

/a/...
/b/foo
/c/...

/.gitignore:

/*
!/b

फिर /b/fooशामिल फ़ाइलों के रूप में दिखाई देगा जबकि सब कुछ /aऔर /cबाहर रखा जाएगा। व्यापार बंद यह है कि आपको किसी भी निर्देशिका के सभी माता-पिता के लिए एक निषेध जोड़ना होगा जिसमें आप फ़ाइलों को शामिल करना चाहते हैं।


उपयोग क्यों नहीं !/b/**/*?
एलेक्सिस टायलर

आपसे अधिक स्पष्टीकरण के बिना जवाब नहीं दे सकता।
रॉस पैटरसन

6

जहां तक ​​मुझे पता है कि ऐसा करने का कोई तरीका नहीं है। जैसा कि स्थानीय .gitignore रूट ginignore को अधिलेखित करेगा मेरा वर्कअराउंड मैन्युअल रूप से जोड़ रहा है।

git add --force [ your file and folder]

बच्चे .gitignoreने मेरे लिए काम नहीं किया क्योंकि माता-पिता किसी भी बच्चे की फ़ोल्डर सेटिंग्स को ओवरराइड करते हैं। यदि आप git add -f myfile.txtइसे जोड़ने का बल देते हैं, तो यह मूल .gitignoreसेटिंग को दरकिनार करके परिवर्तनों को ट्रैक करना शुरू कर देगा ।
स्लीवरनिंजा - MSFT
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.