फोर्स जोड़ने के बावजूद .gitignore फ़ाइल के लिए


413

क्या gitफ़ाइल के बावजूद फ़ाइल जोड़ने के लिए बाध्य करने का कोई तरीका है .gitignore?


4
एक बेहतर सवाल हो सकता है - आप ऐसा क्यों करना चाहेंगे? यदि आप एक फ़ाइल को ट्रैक करना चाहते हैं, तो इसे अनइग्नोर करें ( .gitignoreफ़ाइल में इसके पैटर्न को उपसर्ग करें !, जैसे !dont/ignore/this/file)।
ओहद श्नाइडर

6
@OhadSchneider यदि आप किसी अन्य शाखा में बिल्ड फ़ाइल (ओं) को लागू करने के लिए यह उपयोगी है। कुछ परियोजनाएं ऐसे करती हैं जैसे कि स्ट्रॉन्ग्लूप को सुरक्षित तैनाती के लिए
डेमिनिटिक्स

5
@OhadSchneider हमारे लिए, यह अधिक है क्योंकि अधिकांश डेवलपर्स विजुअल स्टूडियो 2015 के साथ गिट स्थापित करते हैं, जो उपयोगकर्ता फ़ोल्डर में एक वैश्विक gitignore जोड़ता है। यह * .dll और * .exe जैसी फ़ाइलों को शामिल नहीं करता है। यह हमारी नई परियोजनाओं के लिए बहुत अच्छा है जो केवल निर्माण के दौरान पुनर्प्राप्त किए गए नगेट पैकेजों का उपयोग करते हैं, लेकिन कम संख्या में पुरानी परियोजनाओं के लिए, हम अभी भी dll का उपयोग करते हैं जो समाधान में मैन्युअल रूप से संदर्भित होते हैं। उन परियोजनाओं के लिए, हम प्रत्येक डेवलपर को वैश्विक gitignore में * .dll और * .exe फ़ाइलों पर टिप्पणी करने के लिए कहने के बजाय, उन्हें मैन्युअल रूप से शामिल करना चाहेंगे।
नलियस

4
@ Nullius क्या आप उन्हें उच्च स्तर पर एकरूप नहीं कर सकते .gitignore(कहते हैं, .gitignoredll के समान फ़ोल्डर में जोड़ सकते हैं , या ऊपर का, या कुछ और)?
ओहद श्नाइडर

जवाबों:


569

देखें man git-add:

   -f, --force
       Allow adding otherwise ignored files.

इसलिए इसे चलाएं

git add --force my/ignore/file.foo

11
उह जो काम नहीं करता है, गिट स्थिति पर फ़ाइल अभी भी नहीं दिखाई गई है
मार्क

5
खैर, मैंने यह सुनिश्चित करने के लिए इसका परीक्षण किया कि यह वास्तव में काम करता है और यह करता है। क्या आप अपने environemnt (OS, git संस्करण ...) का वर्णन कर सकते हैं? यह वही है जो मैंने मूल रूप से किया है: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(टिप्पणी में newlines पेस्ट नहीं कर सकता है, 1 से 1 के आदेशों को निष्पादित करें
डैनियल बॉहेर

4
मेरे साथ भी ऐसा ही हुआ, मैंने पहले अपनी फाइलों पर git update-index -asume-अपरिवर्तित चलाया था। मुझे इसे -न-मान-अपरिवर्तित के साथ पूर्ववत करना पड़ा और इसने काम किया
जाको

4
यह केवल मेरे लिए वाइल्डकार्ड्स का उपयोग करने के लिए काम करता है, विंडोज पर जीआईटी 1.9.5 का उपयोग करते हुए, यहां तक ​​कि कोशिश करने के बाद भी - मान-अपरिवर्तित नहीं। "git add - f <filename>" कुछ नहीं करता है, लेकिन "git add -f *" काम करता है। TortoiseGit का उपयोग करना भी काम करता है।
mhenry1384

@ mhenry1384 Windows में केवल वाइल्डकार्ड के लिए काम करने का कारण यह हो सकता है कि पथ विभाजक का उपयोग कैसे किया जाए। मेरे लिए स्लैश "/" काम करता है लेकिन बैकस्लैश "" नहीं करता है। तथ्य यह है कि cmd / PowerShell हमारे लिए "/" को "\" में रूपांतरित करता है, इस में चलाना आसान बनाता है।
ओव

19

डेनियल बोहमर के काम करने के समाधान के बावजूद, ओहद श्नाइडर ने एक टिप्पणी में बेहतर समाधान पेश किया:

यदि फ़ाइल को आमतौर पर अनदेखा किया जाता है, और आप इसे जोड़ने के लिए मजबूर करते हैं - तो इसे भविष्य में गलती से फिर से अनदेखा किया जा सकता है (जैसे जब फ़ाइल को हटा दिया जाता है, तो एक प्रतिबद्ध बनाया जाता है और फ़ाइल को फिर से बनाया जाता है।

आपको इसे इस तरह से .gitignore फ़ाइल में अन- इग्नोर कर देना चाहिए: Git में इग्नोर किए गए डायरेक्टरी की उपनिर्देशिकाएँ


4
यह सही है। मैं छोटी डेटा फ़ाइलों के लिए --force विकल्प का उपयोग कर रहा था, और फिर फ़ोल्डर संरचना का एक सा पुन: व्यवस्थित किया और सभी बल-ट्रैक फ़ाइलों को क्लोब किया। कैसे: फ़ोल्डर पदानुक्रम के बिना .gitignoreउपयोग में !specific-file-name.txt, इस तरह से ट्रैकिंग रेपो के आसपास की फ़ाइल का पालन करेगी।
मर्लिन

यह परिदृश्य पर निर्भर करता है, उदाहरण के लिए, कभी-कभी आप सभी फ़ोल्डरों में "1.txt" को बाहर करना चाहते हैं, और कभी-कभी "1/1 /। Txt"
एएस

14
यह एक "बेहतर" समाधान नहीं है। यह एक अलग समस्या का समाधान है।
आइज

2

इसे प्राप्त करने का दूसरा तरीका यह होगा कि अस्थायी रूप से gitignore फ़ाइल को संपादित करें, फ़ाइल जोड़ें और फिर gitignore को वापस लौटा दें। थोड़ा हैकी मुझे लगता है


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