मैं एक बड़ी निर्देशिका संरचना पर एक गिटिनोर समस्या को हल करने की कोशिश कर रहा हूं, लेकिन मेरे प्रश्न को सरल बनाने के लिए मैंने इसे निम्न में घटा दिया है।गिटिग्नोर बहिष्करण नियम वास्तव में कैसे काम करते हैं?
मेरे पास एक नया Git भंडार में दो फ़ाइलें (foo, बार) (कोई अब तक करता) के निम्नलिखित निर्देशिका संरचना:
a/b/c/foo
a/b/c/bar
जाहिर है, एक 'Git स्थिति -u' से पता चलता है:
# Untracked files:
...
# a/b/c/bar
# a/b/c/foo
मैं जो करना चाहता हूं वह एक .gitignore फ़ाइल है जो/b/c के अंदर सब कुछ अनदेखा करता है लेकिन फ़ाइल 'foo' को अनदेखा नहीं करता है।
अगर मैं एक .gitignore इस प्रकार बनाने के लिए:
c/
फिर एक 'Git स्थिति -u' दोनों foo पता चलता है और के रूप में नजरअंदाज कर दिया बार:
# Untracked files:
...
# .gitignore
है कौन सा रूप में मैं उम्मीद करते हैं।
अब मैं foo के लिए एक अपवर्जन नियम जोड़ते हैं, इस प्रकार:
c/
!foo
gitignore मैनपेज के अनुसार, मैं इस काम करने के लिए करने के लिए उम्मीद थी। लेकिन यह नहीं है - यह अभी भी ध्यान नहीं देता foo:
# Untracked files:
...
# .gitignore
यह या तो काम नहीं करता:
c/
!a/b/c/foo
न तो करता है:
c/*
!foo
देता है:
# Untracked files:
...
# .gitignore
# a/b/c/bar
# a/b/c/foo
उस स्थिति में, हालांकि foo अब अनदेखा नहीं है एड, बार भी अनदेखा नहीं किया जाता है।
.gitignore में नियमों का क्रम या तो कोई फर्क नहीं पड़ता।
यह भी है कि मैं क्या उम्मीद थी भी नहीं करता है: एक दोनों foo और बार पर ध्यान नहीं देता
a/b/c/
!a/b/c/foo
है।
*
!foo
लेकिन इस के साथ समस्या यह है कि अंततः वहाँ एक के तहत अन्य उपनिर्देशिका होगा:
एक स्थिति है कि काम करता है अगर मैं फ़ाइल एक/बी/सी/.gitignore बना सकते हैं और वहाँ में डाल दिया है/बी/सी और मैं एक अलग .gitignore को हर एक में रखना नहीं चाहता - मैं 'प्रोजेक्ट-आधारित' बनाने की उम्मीद कर रहा था .gitignore फ़ाइलें जो प्रत्येक प्रोजेक्ट की शीर्ष निर्देशिका में बैठ सकती हैं, और सभी को कवर कर सकती हैं 'मानक' उपनिर्देशिका संरचना।
यह भी बराबर हो रहा है:
a/b/c/*
!a/b/c/foo
यह निकटतम बात है कि मैं प्राप्त कर सकते हैं "काम" हो सकता है, लेकिन पूर्ण संबंधित पथ और स्पष्ट अपवाद कहा जा करने की जरूरत है जो करने जा रहा है यदि मेरे पास उपनिर्देशिका पेड़ के विभिन्न स्तरों में नाम 'foo' की बहुत सारी फ़ाइलें हैं तो दर्द हो।
वैसे भी, या तो मैं काफी कैसे बहिष्कार नियम काम समझ में नहीं आता, या वे सब पर जब निर्देशिका (बल्कि वाइल्डकार्ड से) अनदेखी कर रहे हैं काम नहीं करते - एक नियम के एक/
में समाप्त होने से किसी को भी कर सकते हैं तो कृपया इस पर कुछ प्रकाश डाला?
क्या गिटिग्नोर इस बेकार शेल-आधारित वाक्यविन्यास के बजाय नियमित अभिव्यक्तियों की तरह कुछ समझदार उपयोग करने का कोई तरीका है?
मैं इसका उपयोग कर रहा हूं और इसे सिबविन/बैश 3 और गिट -17.1 पर उबंटू/बैश 3 पर गिट-1.6.6.1 के साथ देख रहा हूं।
संबंधित प्रश्न: http://stackoverflow.com/questions/2820255/how-do-negated-patterns-work-in-gitignore/2820310#2820310 – Cascabel