मैं एक बड़ी निर्देशिका संरचना पर एक gitignore समस्या को हल करने की कोशिश कर रहा हूं, लेकिन अपने प्रश्न को सरल बनाने के लिए मैंने इसे निम्न में घटा दिया है।
मेरे पास एक ब्रांड नई गिट रिपॉजिटरी में दो फाइलों (फू, बार) की निम्नलिखित निर्देशिका संरचना है (अब तक कोई भी हिट नहीं):
a/b/c/foo
a/b/c/bar
जाहिर है, एक 'गिट स्थिति -u' से पता चलता है:
# Untracked files:
...
# a/b/c/bar
# a/b/c/foo
मैं जो करना चाहता हूं वह एक .gitignore फ़ाइल बनाता है जो / a / b / c के अंदर सब कुछ अनदेखा करता है, लेकिन फ़ाइल'oo 'को अनदेखा नहीं करता है।
अगर मैं इस तरह से .gitignore बनाता हूं:
c/
फिर 'git स्टेटस -u' फू और बार दोनों को नजरअंदाज करता है:
# Untracked files:
...
# .gitignore
जो मुझे उम्मीद है।
अब अगर मैं फू के लिए बहिष्करण नियम जोड़ता हूं, तो:
c/
!foo
Gitignore manpage के अनुसार, मुझे काम करने की उम्मीद है। लेकिन यह नहीं है - यह अभी भी फू को नजरअंदाज करता है:
# Untracked files:
...
# .gitignore
यह भी काम नहीं करता है:
c/
!a/b/c/foo
न ही यह:
c/*
!foo
देता है:
# Untracked files:
...
# .gitignore
# a/b/c/bar
# a/b/c/foo
उस मामले में, हालांकि फू को अब नजरअंदाज नहीं किया जाता है, बार को भी नजरअंदाज नहीं किया जाता है।
.Gitignore में नियमों का क्रम भी मायने नहीं रखता है।
यह भी वह नहीं करता है जो मैं उम्मीद करता हूं:
a/b/c/
!a/b/c/foo
यह दोनों फू और बार को अनदेखा करता है।
एक स्थिति जो काम करती है वह यह है कि अगर मैं फाइल / a / b / c / .ignignore बनाता हूं और वहां डालूं:
*
!foo
लेकिन इसके साथ समस्या यह है कि अंततः एक / बी / सी के तहत अन्य उपनिर्देशिकाएं होंगी और मैं हर एक में एक अलग .gitignore नहीं रखना चाहता हूं - मैं 'प्रोजेक्ट-आधारित' बनाने की उम्मीद कर रहा था।। फ़ाइलें जो प्रत्येक प्रोजेक्ट की शीर्ष निर्देशिका में बैठ सकती हैं, और सभी 'मानक' उपनिर्देशिका संरचना को कवर कर सकती हैं।
यह भी समतुल्य प्रतीत होता है:
a/b/c/*
!a/b/c/foo
यह "काम" करने के लिए निकटतम चीज हो सकती है जिसे मैं प्राप्त कर सकता हूं, लेकिन पूर्ण सापेक्ष पथ और स्पष्ट अपवादों को कहा जाना चाहिए, जो कि अलग-अलग स्तरों में 'फू' नाम की बहुत सारी फाइलें होने पर दर्द होने वाला है। उप-वृक्ष का।
वैसे भी, या तो मैं यह नहीं समझता कि बहिष्करण नियम कैसे काम करते हैं, या वे बिल्कुल भी काम नहीं करते हैं जब निर्देशिका (वाइल्डकार्ड के बजाय) को अनदेखा किया जाता है - एक नियम में समाप्त होने से /
क्या कोई इस पर कुछ प्रकाश डाल सकता है?
वहाँ एक तरीका है gitignore इस अनाड़ी खोल आधारित वाक्यविन्यास के बजाय नियमित अभिव्यक्ति की तरह समझदार कुछ का उपयोग करने के लिए है?
मैं इसका उपयोग कर रहा हूं और इसे Cygwin / bash3 पर git-1.6.6.1 और Ubuntu / bash3 पर git-1.7.1 के साथ देख रहा हूं।