Git में केवल रूट फ़ोल्डर से फ़ाइल को बाहर कैसे करें


399

मुझे .gitignoreकुछ फ़ाइलों को जोड़ने के लिए फ़ाइल का उपयोग करने के बारे में पता है , लेकिन मेरे पास config.phpस्रोत पेड़ में कई फाइलें हैं और मुझे केवल एक को बाहर करने की आवश्यकता है, जो रूट में स्थित है जबकि अन्य संशोधन नियंत्रण में हैं।

.gitignoreऐसा करने के लिए मुझे क्या लिखना चाहिए ?

जवाबों:


588

से प्रलेखन :

यदि पैटर्न में स्लैश / नहीं है, तो git इसे शेल ग्लोब पैटर्न के रूप में मानता है और .nameignore फ़ाइल के स्थान के सापेक्ष pathname के विरुद्ध एक मैच के लिए जाँच करता है। यदि कार्य a .ignignore से नहीं है। फ़ाइल)।

एक प्रमुख स्लैश pathname की शुरुआत से मेल खाता है। उदाहरण के लिए, "/*.c" "cat-file.c" से मेल खाता है, लेकिन "मोज़िला-शा 1 / sha1.c" नहीं।

तो आपको अपनी जड़ में निम्नलिखित पंक्ति जोड़नी चाहिए .gitignore:

/config.php

1
धन्यवाद! मैंने इसे इस तरह आज़माया, लेकिन किसी कारण से यह काम नहीं किया। संभवत: कहीं कुछ गलत हुआ =)
पावेल करौकिन

1
क्या होगा अगर यह एक फ़ाइल नहीं है, लेकिन एक फ़ोल्डर है, और मैं उस फ़ोल्डर को रेपो रूट, इसकी निहित फ़ाइलों और सभी अवरोही सबफ़ोल्डर्स और उनकी फ़ाइलों को अनदेखा करना चाहता हूं? /folder/?
कोडमैनएक्स

11
या तो /folder/या /folderकाम करेगा, लेकिन सिरों पर स्लेश जोड़ने केवल फ़ोल्डरों को मैच सीमित करता है। यदि आपके पास रूट डायरेक्टरी में 'foo' नाम की फाइल है, /foo/तो इसे अनदेखा नहीं करेंगे, बल्कि /fooकरेंगे।
तेहदोर

यदि आपने पहले से ही फ़ाइल शुरू कर दी है, तो कमांड चलाएँ git rm --cached <file>, अन्यथा फ़ाइल को अनदेखा नहीं किया जाएगा। प्रेषक: stackoverflow.com/a/1274447
ब्रूनो पोलो


29

पुराने संस्करणों के लिए आवश्यक है कि आप पहले एक अनदेखा पैटर्न परिभाषित करें और तुरंत (अगली पंक्ति में) बहिष्करण को परिभाषित करें। [संस्करण 1.9.3 पर परीक्षण किया गया (Apple Git-50)]

/config.php
!/*/config.php

बाद के संस्करणों को केवल निम्नलिखित की आवश्यकता होती है [संस्करण 2.2.1 पर परीक्षण किया गया]

/config.php

17

यदि उपरोक्त समाधान आपके लिए काम नहीं करता है, तो यह कोशिश करें:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

यह मेरे लिए वास्तव में काम करता है, जबकि /config.phpअकेला नहीं करता था। मैं उत्सुक हूं कि ऐसा क्यों नहीं हुआ। क्या आपके पास कोई विचार है?
इगा-लिटो '16:03

@ इगो-लिटो यदि आप किसी विशेष परियोजना पर काम करते हैं और उस पर संघर्ष कर रहे हैं कि कैसे किसी विशेष निर्देशिका में कुछ file.ext को अनदेखा करें और एक ही समय में इसे हर जगह अनदेखा न करें तो इसे /home/me/.gitignore फ़ाइल में डालें: / home/me/path/to/my/project/some/folder/file.ext या file.ext हर जगह और फिर / घर / मेरे / पथ / से / मेरे / परियोजना / कुछ / फ़ोल्डर में फ़ाइल को अनदेखा करने के लिए। .gitignore फ़ाइल को इस फ़ाइल को डाल दें। इस फ़ाइल को केवल इस विशेष निर्देशिका में अनदेखा न करें। प्रत्येक फ़ोल्डर की अपनी स्वयं की .gitignore फ़ाइल किसी भी माता-पिता के .VERignore फ़ाइल (सेटिंग्स) में से किसी पर भी हो सकती है ...
drugan

हम्म। इसका मतलब यह है कि रेपो अलग तरह से व्यवहार कर सकता है, यह इस बात पर निर्भर करता है कि क्या अन्य उपयोगकर्ताओं के पास ~/.gitignoreअपनी मशीनों पर अलग-अलग फाइलें हैं, ठीक है? .. इसके अलावा, मेरी बात यह थी: आपने लिखा था "यदि उपरोक्त समाधान काम नहीं करता है", तो यह क्यों नहीं होगा?
Iago-lito '

हां, यदि आपकी परियोजना अज्ञात वातावरण में मौजूद हो सकती है, तो आपको कभी भी .gitignore फ़ाइलों पर भरोसा नहीं करना चाहिए जो आपके प्रोजेक्ट रूट फ़ोल्डर के ऊपर मौजूद हैं। याद रखें कि config.php जैसे फ़ाइल का नाम काफी आम है, इसलिए इस रूट की किसी भी मौजूदा सेटिंग को अपनी रूट .gitignore फ़ाइल में ओवरराइड करें।
ड्रगिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.