git add * (तारांकन) बनाम git ऐड। (अवधि)


130

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

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

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

यहाँ छवि विवरण दर्ज करें

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

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


1
वह चार्ट कहाँ से है? मैंने बस git add .फिर से कोशिश की , और इसने Xउस पंक्ति के विपरीत एक नष्ट की गई फ़ाइल को कोई समस्या नहीं बताई, इसके लिए वह सुझाव देगा।
डेविड

@ डेविड वह छवि इस उत्तर से है और पुराने संस्करणों पर लागू होती है।
जेरी

4
चित्र पुराना! Git 2.x अलग है: i.stack.imgur.com/Kwolu.jpg
हेंस Schneidermayer

जवाबों:


132

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

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


6
इसलिए git add .सभी फाइलें, फोल्डर और सबफ़ोल्डर्स को शामिल करता है, जिसमें .ignignore और डॉट के साथ शुरू होने वाली कोई भी चीज़ है, जबकि git add *डॉट के साथ शुरुआत करने वालों के अलावा कोई भी फाइल, फ़ोल्डर और सबफ़ोल्डर जोड़ देगा? क्या यह सही है?
टायलर यंगब्लड सेप

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

4
git add .git add *अगर कोई भी गैर-डॉट-फ़ाइल gitignored है, तो .गितिग्नोर का सम्मान करता है, जबकि एक त्रुटि को फेंक देगा। की git add .तुलना में उपयोग करने के लिए बेहतर है git add *
रसूव

2
वर्थ नोटिंग: यदि CMD.EXE से डॉस / विंडोज पर Git इनवॉइस किया जाए, तो यह Git है , शेल नहीं, जो विस्तार करता है *। इस मामले में Git को डॉट-फाइल्स मिलेंगी।
torek

2
@ Thor84no: यदि आप *इसे शेल से बचाने के लिए उद्धृत करते हैं, तो Git एक लिनक्स सिस्टम पर भी डॉट-फाइल्स ढूंढेगा । यह छिपे हुए बिट की बात नहीं है, यह सिर्फ इतना है कि गिट के संकलित नियम अलग हैं।
torek

30

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


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

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

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

7

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

जब आप *किसी शेल पर तारांकन का उपयोग करते हैं जिसे एक सुविधा कहा जाता 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 '['. 

ग्लोबिंग

Globbing is the operation that expands a wildcard pattern 
into the list of pathnames matching the pattern.

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

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

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


5

स्पष्टता के लिए, मैंने जवाब नीचे दी गई तालिका में रखा:

यहाँ छवि विवरण दर्ज करें

अतिरिक्त नोट्स (@ reka18 टिप्पणी से प्रेरित):

नोट 1. git add -A और git add -uअतिरिक्त मापदंडों के बिना किए गए आदेश अतिरिक्त परिशोधन (फ़ाइल नाम के लिए उपनिर्देशिका या मुखौटा संकेत) पूरे कामकाजी निर्देशिका की श्रेणी में काम करेंगे (भले ही हम निर्देशिका के कार्य उपनिर्देशिका में कमांड को निष्पादित करते हैं)।

नोट 2.. और *क्रमशः निर्देशिका पथ (वर्तमान निर्देशिका) और वाइल्डकार्ड, जो आदेश के पथ स्पष्ट। उदाहरण के लिए, यदि किसी कार्य निर्देशिका के कुछ उपनिर्देशिका में git add .या git add *कमांड को निष्पादित किया जाता है, तो उनकी क्रिया का उपयोग केवल इस उपनिर्देशिका के भीतर किया जाता है, न कि संपूर्ण कार्यशील निर्देशिका में।

नोट 3.git add -A और git add -uआदेशों आगे एक पथ जोड़ने या फ़ाइलों के लिए मुखौटा, उदाहरण के लिए, द्वारा परिष्कृत किया जा सकता git add -A app/controllersया git add -u app\styles\*


2
Git v2.x के रूप में git add -Aऔर git add .समान हैं?
reka18

शुक्रिया @ reka18, बहुत अच्छे सवाल के लिए। इसने मुझे अपना उत्तर पूरा करने के लिए प्रेरित किया ... आपके प्रश्न का उत्तर: यदि आप इसे कार्यशील निर्देशिका में कहते हैं, तो नहीं, लेकिन यदि कोई उपनिर्देशिका में है, तो हाँ ( git add -Aसंपूर्ण कार्यशील निर्देशिका और git add .हमेशा वर्तमान निर्देशिका पर लागू होती है )।
सिमहुमेलेको

2
  • git add -A (--all) सब कुछ जोड़ता है, ताकि डिस्क पर आपके फ़ोल्डर में सब कुछ स्टेजिंग क्षेत्र में दर्शाया जाए

  • git add . सब कुछ रोकता है, लेकिन उन फ़ाइलों को नहीं हटाता है जिन्हें डिस्क से हटा दिया गया है

  • git add * सब कुछ स्टेज करता है, लेकिन ऐसी फाइलें नहीं जो डॉट से शुरू होती हैं और उन फाइलों को नहीं हटाती हैं जिन्हें डिस्क से हटा दिया गया है

  • git add -u (--update) केवल संशोधित फ़ाइलें जोड़ता है, डिस्क से हटा दी गई फ़ाइलों को हटाता है, नया नहीं जोड़ता है

  • git add <file name 1> <file name 2> केवल कुछ फ़ाइल जोड़ता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.