2014-09-25 8 views
65

मैं गिट करने के लिए नया हूं और मुझे गिट में फाइल जोड़ने के बारे में एक सवाल है। मुझे git add . और git add -a, git add --all, git add -A, आदि के बीच के अंतर के बारे में कई स्टैक ओवरफ्लो प्रश्न मिले हैं, लेकिन मैं git add * करता है जो बताता है कि मैं ऐसी जगह नहीं ढूंढ पा रहा हूं। मैंने git add man page पर भी देखा है, लेकिन इससे मदद नहीं मिली। मैं इसे git add . के स्थान पर उपयोग कर रहा हूं और मेरे सहकर्मी ने मुझसे पूछा क्यों। मेरे पास जवाब नहीं था। मैंने हमेशा git add * का उपयोग किया है।गिट एड * (तारांकन) बनाम गिट जोड़ें। (अवधि)

git add . और git add * समान हैं? क्या कोई केवल मौजूदा निर्देशिका से फ़ाइलों को बदलता है, जबकि अन्य वर्तमान निर्देशिका और उपनिर्देशिका (रिकर्सिवली) से फ़ाइलें जोड़ता है?

एक महान अन्य ढेर सवालों कि git add -Agit add . और git add -u के बीच अंतर पता चलता में से एक पर सूचीबद्ध चार्ट नहीं है, लेकिन यह git add * जरूरत नहीं है।

enter image description here

नोट: मैं समझता हूँ कि क्या यह एक वाइल्डकार्ड (किसी निश्चित विस्तार के साथ सभी फ़ाइलों को जोड़ने के) के रूप में तारांकन उपयोग करने के लिए इसका मतलब है। उदाहरण के लिए, git add *.html उन सभी फ़ाइलों को जोड़ देगा जिनमें .html एक्सटेंशन है (लेकिन .css, .js इत्यादि को अनदेखा करें)।

सहायता के लिए धन्यवाद!

+1

वह चार्ट कहां से है? मैंने अभी 'गिट ऐड' की कोशिश की है, और इसने एक पंक्ति में कोई समस्या नहीं है, उस पंक्ति में 'एक्स' के विपरीत कोई सुझाव नहीं होगा। – David

+0

@ डेविड यह छवि [इस उत्तर] से है (http://stackoverflow.com/a/26039014/1270168) और गिट के पुराने संस्करणों पर लागू होती है। – jerry

+2

पुराना चित्र! गिट 2.x अलग है: https://i.stack.imgur.com/KwOLu.jpg –

उत्तर

63

add * का मतलब है कि फाइलों को छोड़कर, वर्तमान निर्देशिका में सभी फाइलें जोड़ें, जिसका नाम डॉट से शुरू होता है। यह आपकी खोल कार्यक्षमता है और गिट को केवल फाइलों की सूची प्राप्त होती है।

add . का आपके खोल में कोई विशेष अर्थ नहीं है, और इस प्रकार गिट पूरी निर्देशिका को दोबारा जोड़ता है, जो लगभग समान है, लेकिन फाइलों के नाम जिनके नाम डॉट से शुरू होते हैं।

+3

तो 'git add।' सभी फ़ाइलों, फ़ोल्डरों और उपफोल्डर्स को जोड़ता है, जिसमें .gitignore और डॉट से शुरू होने वाली कोई और चीज़ शामिल है, जबकि 'git add *' किसी भी फाइल, फ़ोल्डर्स और उपफोल्डर्स को जोड़ देगा, जो कि डॉट से शुरू होने वाले सिवाय इसके अलावा? क्या यह सही है? – Tyler

+5

यह वास्तव में सही है। साथ ही, 'git add *' अभी भी एक उपनिर्देशिका में होने पर एक बिंदु से शुरू होने वाली फ़ाइलों को जोड़ देगा। – Denis

+1

'गिट एड।' का भी सम्मान करता है। गिटिनोरोर, जबकि 'गिट एड *' एक त्रुटि फेंक देगा यदि कोई गैर-डॉट-फाइल गिटिग्नर हो। 'गिट एड *' की तुलना में 'गिट एड' का उपयोग करना बहुत बेहतर है। – rosuav

12

* गिट का हिस्सा नहीं है - यह शेल द्वारा व्याख्याित वाइल्डकार्ड है। * वर्तमान निर्देशिका में सभी फ़ाइलों को फैलाता है, और उसके बाद केवल गिट को पास किया जाता है, जो add उन सभी को है। . वर्तमान निर्देशिका है, और git add आईएनजी यह इसे और इसके तहत सभी फाइलों को जोड़ देगा।

+0

तो क्या हर कोई तारांकन का उपयोग करने का एक कारण होगा? क्या अवधि के बजाए इसका उपयोग करने का कोई फायदा है? या ठीक इसके विपरीत? मुझे यकीन है कि मैंने इसे एक ट्यूटोरियल में देखा है। मैं इसे अन्यथा उपयोग करने के लिए जाना नहीं जानता था। मैं कमांड लाइन लड़का का अधिक नहीं हूं (जैसा कि आपने निस्संदेह अनुमान लगाया है)। – Tyler

+2

'*' छिपी हुई फाइलों से बचाता है (यानी, फाइलें जिनका नाम '.' से शुरू होता है)। किसी भी स्थिति में, यदि आप विशिष्ट फ़ाइलों को नहीं जोड़ रहे हैं, तो मैं केवल 'git add -u' (या' git add -A' 'का उपयोग करता हूं यदि आप नई फाइलें बना रहे हैं)। – Mureinik

+0

चूंकि आपने दोनों ने मेरे प्रश्न का उत्तर दिया था, इसलिए मुझे यह निर्णय लेने में परेशानी थी कि किसको श्रेय देना है। मैंने नीचे डेनिस चुना क्योंकि उसके पास आपके से कम प्रतिनिधि है। तो मैंने सोचा कि उसे हरा चेक देने से आपको इससे फायदा होगा इससे ज्यादा फायदा होगा। मुझे उम्मीद है कि इसका कोई अर्थ है? लेकिन मैं वास्तव में दोनों स्पष्टीकरण की सराहना करता हूं। धन्यवाद! – Tyler

4

खोल में . का उपयोग आमतौर पर "वर्तमान निर्देशिका" का अर्थ है।

जब आप एक खोल पर तारांकन * का उपयोग करते हैं तो file-globbing नामक सुविधा का उपयोग किया जाता है। जैसे बैश पर फ़ंक्शन glob() बस ऐसा कर रहा है।ग्लोब के लिए मैनपेज (man 7 glob) में कहा गया:

ग्लोबिंग

वर्णन

Long ago, in UNIX V6, there was a program /etc/glob that would expand 
wildcard patterns. Soon afterward this became a shell built-in. 
These days there is also a library routine glob(3) that will perform this 
function for a user program. 

वाइल्डकार्ड

A string is a wildcard pattern if it contains one of the characters '?', '*' or '['. 

मिलान

इसका मतलब है कि जब आप कमांडलाइन कि '?', '*' या '[' शामिल पर किसी भी कार्यक्रम के लिए तर्क गुजरती हैं, पहले ग्लोबिंग फ़ाइलों की एक सूची में वाइल्डकार्ड पैटर्न फैलता है और उसके बाद कार्यक्रम में ही करने के लिए एक तर्क के रूप इन फ़ाइलों को देता है।

'git add .' और 'git add *' के बीच अर्थ में अंतर स्पष्ट रूप से Denis द्वारा वर्णित है:

git add उम्मीद फ़ाइलों की एक सूची में जोड़े जाने का। उपर्युक्त उदाहरण में खोल क्रमश: * या . फैलाता है और परिणाम को गिट एड के पैरामीटर के रूप में देता है। अब अंतर यह है कि git add . गिट के साथ वर्तमान निर्देशिका में विस्तार होगा जबकि git add * फ़ाइल ग्लोबिंग को ट्रिगर करता है और ऐसे सभी फ़ाइलों और निर्देशिकाओं में ऐसे विस्तार करता है जो डॉट से प्रारंभ नहीं होते हैं।

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