2012-08-15 5 views
7

में फ़ाइल जोड़ने के लिए दो तारों का उपयोग करना, मैं एक फ़ाइल जोड़ना चाहता हूं जिसमें एक अद्वितीय फ़ाइल नाम है लेकिन एक लंबा पिछला पथ (उदा। ए/बी/सी/डी/filename.java)। आम तौर पर मैं इसेगिट

git add *filename.java करके अपने भंडार में जोड़ दूंगा।

हालांकि मैं भी पहले यह किया है:

git add a/b/c/d/filename*

तो मैं गठबंधन करने की कोशिश की दो:

git add *filename*

लेकिन यह कुछ अजीब है। यह हर अनचाहे फ़ाइल जोड़ता है। मैं विफलता के संभावित कारण देख सकता हूं लेकिन वे सभी पिछले दो आदेशों में से एक में होना चाहिए, इसलिए मुझे नहीं पता कि यह क्यों हो रहा है।

मेरा प्रश्न इस फ़ाइल फ़ाइल के साथ गिट रिपॉजिटरी में फ़ाइल जोड़ने के बारे में इतना नहीं है (हालांकि यह उपयोगी होगा)। मेरा प्रश्न यह है कि * ऑपरेशन की मेरी गलतफहमी क्या है जो मुझे लगता है कि उपर्युक्त काम करना चाहिए।

जानकारी:

मैं Git Bash for Windows, जो minGW पर आधारित है उपयोग कर रहा हूँ।

+0

क्या फ़ाइल नाम आप वास्तव में स्ट्रिंग 'फ़ाइल नाम' का उपयोग कर रहे थे या आप इसे उदाहरण के रूप में उपयोग कर रहे हैं? – Hogan

+0

यह सिर्फ एक उदाहरण है। – Paul

+0

यदि आप अंतिम आदेश का जिक्र कर रहे हैं तो ऐसा नहीं हो रहा है। असल में मुझे लगता है कि विपरीत हो रहा है: यह सबकुछ से मेल खाता है। अगर मैं 'गिट एड' टाइप करता हूं तो कुछ भी नहीं जोड़ा जाता है। – Paul

उत्तर

9

आप globs (नियमित अभिव्यक्तियों, जो एक अलग पैटर्न-मिलान वाली भाषा नहीं हैं) देख रहे हैं, और वे आपके खोल से विस्तारित हैं, गिट द्वारा नहीं।

यदि आप देखना चाहते हैं कि वे कैसे मिलान करने जा रहे हैं, तो बस उसी ग्लोब को किसी अन्य कमांड पर पास करें, उदाहरण के लिए।

$ ls -d *filename.java 

बनाम

$ ls -d *filename* 


आप Git का उपयोग कर रहे के बाद से (मैं सिर्फ -d तो ls किसी भी निर्देशिका से मेल खाने वाले की सामग्री को प्रदर्शित नहीं करता है जोड़ दिया है) बैश, और यह संभव है कि ग्लोब विस्तार नियमित शेल से अलग व्यवहार करता है,

$ git add --dry-run --verbose -- *filename* 

उदाहरण के लिए: यह आपको दिखाएगा कि यह वास्तव में ग्लोब का विस्तार कैसे करता है और इसका क्या प्रभाव है।

नोट -- ... आप globs कि एक अग्रणी - साथ एक फ़ाइल नाम से मेल करने वाले उपयोग कर रहे हैं, यह सुनिश्चित Git जानता है कि यह एक फ़ाइल नाम और एक विकल्प नहीं है बनाने के लिए महत्वपूर्ण है।

दुर्भाग्यवश, यह केवल आपको उन फाइलों को दिखाएगा जो दोनों ग्लोब से मेल खाते हैं, और इंडेक्स और कार्यशील प्रतिलिपि के बीच कुछ अंतर है।लेखक की ओर से


उत्तर: सूखी रन बहुत मदद की, यहाँ मैं क्या पाया है:

मैं, जो मैं नहीं जोड़ा है बिन फ़ोल्डर के बारे में भूल गया था ताकि जब मैं प्रदर्शन किया शुष्क रन मुझे एहसास हुआ कि यह दो मैचों को ढूंढ रहा था: filename.java और filename.class। जब मैंने ग्लोब को *filename.j* में बदल दिया तो यह काम करता था।

मेरा अगला कदम .class को निकालना था और फिर से आदेश का प्रयास करना था: यह काम किया! यह अभी भी अस्पष्ट है कि क्यों गिट बैश ने दो मैचों को पाया जब सबकुछ जोड़ा गया ... चूंकि शुष्क रन वास्तविक रन से अलग व्यवहार करता है, मुझे लगता है कि वहां एक बग होना चाहिए, लेकिन मुझे लगता है कि चर्चा कहीं और आयोजित की जानी चाहिए (जब तक कि कोई इसे सोचता न हो एक बग नहीं है)।

+0

दिलचस्प बात यह मुझे अलग-अलग परिणाम देती है। तो क्या इसका मतलब है कि गिट इसका मूल्यांकन कर रहा है? – Paul

+0

गिट इसका मूल्यांकन नहीं कर सकता है, गिट चलाने से पहले ग्लोबिंग होता है (सभी गोले में मुझे पता है) – Hogan

+0

यह समस्या हो सकती है: मैं गिट बैश का उपयोग कर रहा हूं जो विंडोज के लिए एक गिट खोल है (जो मुझे लगता है कि मिनीजीडब्लू का उपयोग करता है)। मैं इसे अपनी पहली पोस्ट में जोड़ दूंगा। – Paul