2010-10-06 10 views
6

तो कहते हैं कि क्योंकि Git नहीं है मैं एक डमी फ़ाइल के अपवाद के साथ उस में इतनाकुछ निर्देशिका में निर्देशिकाओं को छोड़कर सभी फ़ाइलों को अनदेखा करने के लिए मैं गिटिनोरोर में एक नियम कैसे लिख सकता हूं?

uploads/ 
--dir1/ 
----one.txt 
----two.txt 
----dir2/ 
------one.txt 
------two.txt 

मैं किसी भी निर्देशिका और अपलोड की उप निर्देशिका चाहते हैं पर नज़र रखी जा करने के लिए नहीं बल्कि किसी भी फाइल की तरह एक निर्देशिका संरचना देता है निर्देशिका ट्रैक करें।

मुझे लगता है कि ऐसा कुछ काम करेगा लेकिन ऐसा नहीं है।

* 
!.gitignore 

उत्तर

7

जब आप यह बताना * अनदेखी करने के लिए, Git किसी भी उपनिर्देशिका में recurse नहीं होगा (भले ही आप एक "अनदेखा न करें" पैटर्न है कि निर्देशिका के एक अंदर कुछ से मेल करने वाले है)।

gitignore पैटर्न भाषा का कुछ हिस्सा है जो हालांकि मदद कर सकता है। एक पिछला स्लैश पैटर्न को केवल निर्देशिकाओं पर लागू करने के लिए मजबूर करता है। तो, आप इस का उपयोग करने में सक्षम होना चाहिए:

# .gitignore 
* 
!.keep 
!*/ 

प्रदर्शन में नीचे मैं ऊपर .gitignore का उपयोग करें और एक अतिरिक्त फ़ाइल (do-not-keep नाम पर आधारित) प्रत्येक .keep फ़ाइल के साथ। आप देख सकते हैं कि यह उपनिर्देशिका के कई स्तरों के लिए काम करता है और अन्य फाइलें नहीं दिखाता है। आपको कुछ स्वतंत्र विधि के माध्यम से प्रत्येक निर्देशिका के लिए अपने .keep (या जो कुछ भी) रखने की व्यवस्था करनी होगी।

% git status --short -uall 
?? a/.keep 
?? a/b/.keep 
?? a/b/c/.keep 
?? a/b/c/d/.keep 
?? e/.keep 
?? e/f/.keep 
?? e/f/g/.keep 
?? h/.keep 
?? h/i/.keep 
?? j/.keep 

यह गिट 1.7.3.1 के साथ किया गया था, लेकिन मुझे उम्मीद है कि यह अन्य संस्करणों के लिए भी काम करेगा।

प्रदर्शन सेटअप:

% git init 
% mkdir -p a/b/c/d e/f/g h/i j 
% zargs -i.. -- **/*(/) -- touch ../.keep ../do-not-keep 
% tree -aI .git .          
. 
|-- .gitignore 
|-- a 
| |-- .keep 
| |-- b 
| | |-- .keep 
| | |-- c 
| | | |-- .keep 
| | | |-- d 
| | | | |-- .keep 
| | | | `-- do-not-keep 
| | | `-- do-not-keep 
| | `-- do-not-keep 
| `-- do-not-keep 
|-- e 
| |-- .keep 
| |-- do-not-keep 
| `-- f 
|  |-- .keep 
|  |-- do-not-keep 
|  `-- g 
|   |-- .keep 
|   `-- do-not-keep 
|-- h 
| |-- .keep 
| |-- do-not-keep 
| `-- i 
|  |-- .keep 
|  `-- do-not-keep 
`-- j 
    |-- .keep 
    `-- do-not-keep 

10 directories, 21 files 
+0

आप भी करने के लिए 'की आवश्यकता नहीं है के द्वारा पता लगाया जा करने के लिए फ़ाइल स्वयं की अनदेखी के लिए क्रम में उप-निर्देशिका के अपने' .gitignore' फ़ाइल में सूचीबद्ध .gitignore' git? – beporter

+0

@beporter: मैं आमतौर पर इसे 'git add -f .gitignore' के साथ मैन्युअल रूप से ट्रैक करता हूं (जब इसे ट्रैक किया जाता है, इससे कोई फर्क नहीं पड़ता कि इसे अनदेखा किया गया था या नहीं)। लेकिन, अगर आप उस एक बार "बल" कदम नहीं लेना चाहते थे, तो आप उस अतिरिक्त प्रविष्टि को जोड़ सकते हैं (या, शायद बेहतर, '!/Gitignore' केवल प्रथम स्तर' .gitignore' को अनदेखा करने के लिए)। –

संबंधित मुद्दे

 संबंधित मुद्दे