जवाबों:
यह उत्तर केवल Git संस्करण 1.x पर लागू होता है । Git संस्करण 2.x के लिए, अन्य उत्तर देखें।
सारांश:
git add -A
सभी परिवर्तन चरण
git add .
हटाए बिना , नई फ़ाइलों और संशोधनों को चरणबद्ध करता है
git add -u
नई फ़ाइलों के बिना , संशोधनों और विलोपन को चरणबद्ध करता है
विवरण:
git add -A
के बराबर है git add .; git add -u
।
इसके बारे git add .
में महत्वपूर्ण बात यह है कि यह काम करने वाले पेड़ को देखता है और उन सभी परिवर्तनों को चरणबद्ध परिवर्तनों में जोड़ता है यदि वे या तो बदले हुए हैं या नए हैं और उन्हें नजरअंदाज नहीं किया गया है, तो यह किसी भी 'आरएम' क्रिया को मंचित नहीं करता है।
git add -u
पहले से ही ट्रैक की गई सभी फ़ाइलों को देखता है और यदि वे अलग हैं या यदि उन्हें हटा दिया गया है तो उन फ़ाइलों में परिवर्तन को चरणबद्ध करता है। यह किसी भी नई फाइल को नहीं जोड़ता है, यह केवल पहले से ही ट्रैक की गई फ़ाइलों में परिवर्तन करता है।
git add -A
उन दोनों को करने के लिए एक आसान शॉर्टकट है।
आप कुछ इस तरह से मतभेदों का परीक्षण कर सकते हैं (ध्यान दें कि Git संस्करण 2.x के लिए आपका आउटपुट अलग git add .
git status
होगा ):
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me
git add -A -p
काम नहीं करता है क्योंकि कोई भी उम्मीद नहीं करेगा (अनटैक की गई फ़ाइलों के बारे में पूछें)
git add -A :/
याgit add -A .
git add -u
बन गया git add -u :/
है, जिससे आपको कुछ निर्देशिकाओं के लिए, :/
पूरे पेड़ को संभालने की अनुमति मिलती है ।
git add -u
या की आवश्यकता होगीgit add .
ऐसा करने से अतिरिक्त मानसिक कर के लिए लेखांकन के बाद भी उसका जीवन आसान हो जाता है ताकि यह सुनिश्चित हो सके कि कोई सिंक समस्याएं नहीं हैं? मुझे आश्चर्य है कि Git add -u
दो अलग-अलग कमांडों में विभाजित नहीं होता है add -u1
और add-u2
जिससे एक फाइलों के लिए काम करता है जो अंकों के साथ शुरू होता है और दूसरा गैर-अंकों से शुरू होने वाली फाइलों के लिए
यहाँ त्वरित समझ के लिए एक तालिका है:
Git संस्करण 1.x :
Git संस्करण 2.x :
लंबे रूप के झंडे:
git add -A
के बराबर है git add --all
git add -u
के बराबर है git add --update
आगे की पढाई:
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
केवल संशोधित फ़ाइलों को जोड़ने के लिए उपयोग कर सकते हैं , लेकिन नई फाइलें या डिलीट नहीं।
git add .
केवल नई फाइलें जोड़ता है जो वर्तमान पथ पर हैं। यानी यदि आपके पास एक नई निर्देशिका है ../foo
, git add -A
तो इसे चरणबद्ध करेंगे, git add .
नहीं करेंगे।
git add .
समतुल्य है git add -A .
, जो कि बराबर हैgit add "*"
Git 2.0 केgit add -A
git add .
git add -A .
साथ , डिफ़ॉल्ट है: बराबर है ।
git add <path>
"git add -A <path>
" अब के समान है , ताकि "git add dir/
" निर्देशिका से हटाए गए रास्तों को नोटिस करेगा और हटाने को रिकॉर्ड करेगा।
Git के पुराने संस्करणों में, "git add <path>
" ने निष्कासन को अनदेखा कर दिया है।यदि आप वास्तव में चाहते हैं तो आप
git add --ignore-removal <path>
केवल जोड़े गए या संशोधित मार्गों को जोड़ने के लिए " " कह सकते हैं<path>
।
git add -A
की तरह है git add :/
( शीर्ष गिट रेपो फ़ोल्डर से सब कुछ जोड़ें )।
ध्यान दें कि git 2.7 (Nov. 2015) आपको " :
" नाम के एक फ़ोल्डर को जोड़ने की अनुमति देगा !
देखें 29abb33 प्रतिबद्ध (25 अक्टू 2015) द्वारा Junio सी Hamano ( gitster
) ।
ध्यान दें कि git 2.0 (Q1 या Q2 2014) शुरू करते समय git add .
, काम करने वाले पेड़ के भीतर (वर्तमान पथ के बारे में ) बात करते समय , आपको .
अन्य git add
कमांड में भी ' ' का उपयोग करना चाहिए ।
इसका मत:
""
git add -A .
"के बराबर हैgit add .; git add -u .
"
(नोट के लिए अतिरिक्त ' .
' git add -A
और git add -u
)
क्योंकि git add -A
या पूरे काम करने वाले पेड़git add -u
पर ही (जीआईटी 2.0 शुरू करने) संचालित होता है , न कि केवल वर्तमान पथ पर।
वे कमांड Git 2.0 में पूरे पेड़ पर "
git commit -a
" और अन्य कमांड के साथ संगति के लिए काम करेंगे । क्योंकि "git add -u
" के रूप में व्यवहार करें " " बनाने के लिए कोई तंत्र नहीं होगाgit add -u .
, यह उन लोगों के लिए महत्वपूर्ण है जोgit add -u
"(बिना pathspec) के लिए उपयोग किए जाते हैं" केवल स्पष्ट रूप से कहने के लिए अपनी उंगलियों का प्रशिक्षण शुरू करने के लिए वर्तमान उपनिर्देशिका में पथों के लिए सूचकांक को अद्यतन करना।git add -u .
"जब वे इसका मतलब Git 2.0 के आने से पहले।एक चेतावनी तब जारी की जाती है जब ये कमांड बिना किसी पाथस्पेक्ट के चलते हैं और जब आपके पास वर्तमान निर्देशिका के बाहर स्थानीय परिवर्तन होते हैं , क्योंकि ऐसी स्थिति में Git 2.0 का व्यवहार आज के संस्करण से अलग होगा।
से चार्ल्स 'निर्देश , मेरे प्रस्तावित समझ का परीक्षण इस प्रकार किया जाएगा के बाद:
# For the next commit
$ git add . # Add only files created/modified to the index and not those deleted
$ git add -u # Add only files deleted/modified to the index and not those created
$ git add -A # Do both operations at once, add to all files to the index
यह ब्लॉग पोस्ट यह समझने में भी सहायक हो सकती है कि उन स्थितियों को किस स्थिति में लागू किया जा सकता है: हटाए गए फ़ाइलों को आपके गिट वर्किंग डायरेक्टरी से हटाना ।
जीआईटी 2.0 ( 2014-05-28 ) के साथ चीजें बदल गईं :
-A
अब डिफ़ॉल्ट है--ignore-removal
।git add -u
और git add -A
कमांड लाइन पर पथों के बिना एक उपनिर्देशिका पूरे पेड़ पर काम करती है।तो Git 2 के लिए इसका उत्तर है:
git add .
और git add -A .
वर्तमान निर्देशिका में नई / संशोधित / हटाई गई फ़ाइलें जोड़ेंgit add --ignore-removal .
वर्तमान निर्देशिका में नई / संशोधित फाइलें जोड़ता हैgit add -u .
वर्तमान निर्देशिका में संशोधित / हटाए गए फ़ाइलों को जोड़ता हैएक अधिक आसुत त्वरित उत्तर:
git add -A
git add .
git add -u
git add :/
+git add -u :/
में Git 2.x :
आप सीधे पर स्थित हैं, तो कार्यशील निर्देशिका , तो git add -A
और git add .
अंतर के बिना काम करते हैं।
यदि आप किसी भी उपनिर्देशिका में हैं कार्यशील निर्देशिका के , git add -A
तो संपूर्ण कार्यशील निर्देशिका से सभी फ़ाइलें git add .
जोड़ देंगे , और आपकी वर्तमान निर्देशिका से फ़ाइलें जोड़ देंगे ।
और बस यही।
मुझे उम्मीद है कि इससे कुछ और स्पष्टता आ सकती है।
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
लिमर्स -यू या -ए या नील हो सकता है।
Pathspec एक फ़ाइलपथ या बिंदु हो सकता है, '।' वर्तमान निर्देशिका को इंगित करने के लिए।
Git 'कैसे जोड़ता है' के बारे में महत्वपूर्ण पृष्ठभूमि ज्ञान:
-A
है जब तक कि यह भी निर्दिष्ट नहीं किया जाता है। डॉट वर्तमान निर्देशिका के लिए कड़ाई से संदर्भित करता है - यह ऊपर और नीचे पाए गए मार्गों को छोड़ देता है।अब, उस ज्ञान को देखते हुए, हम उपरोक्त उत्तर लागू कर सकते हैं।
सीमाएँ इस प्रकार हैं।
-u
= --update
= ट्रैक की गई फ़ाइलों के लिए सबसेट => जोड़ें = नहीं; परिवर्तन = हाँ; हटाना = हाँ। => यदि आइटम को ट्रैक किया जाता है।-A
= --all
(ऐसा नहीं है -a
, जो सिंटैक्स त्रुटि देता है) = सभी अनट्रैक / ट्रैक की गई फ़ाइलों का सुपरसेट, जब तक कि 2.0 से पहले गिट में, जिसमें अगर डॉट फिल्स्पेक दिया जाता है, तो केवल उस विशेष फ़ोल्डर को माना जाता है। => यदि आइटम पहचाना जाता है, git add -A
तो उसे ढूंढकर जोड़ देगा।पैथस्पेक इस प्रकार है।
git add -A .
git add -u .
अंत में, मेरी नीति है:
git status
।.gitignore
फाइल रखें ताकि आम तौर पर केवल ब्याज की फाइलें ही बिना पढ़े और / या बिना मान्यता प्राप्त हों।दोनों git add .
औरgit add -A
Git के नए संस्करण में सभी नए, संशोधित और नष्ट कर दिया फ़ाइलों को मंच होगा।
अंतर यह है कि git add -A
चरणों की फाइलें "उच्च, वर्तमान और उपनिर्देशिका" में हैं जो आपके काम करने वाले गिट रिपॉजिटरी से संबंधित हैं। लेकिन git add .
वर्तमान निर्देशिका और उपनिर्देशिकाओं में केवल चरणों की फ़ाइलों का पालन करना ( नहीं) कि बाहर पड़ी फाइलें, अर्थात् उच्च निर्देशिकाएं)।
यहाँ एक उदाहरण है:
/my-repo
.git/
subfolder/
nested-file.txt
rootfile.txt
यदि आपकी वर्तमान वर्किंग डायरेक्टरी है /my-repo
, और आप करते हैं rm rootfile.txt
, तो उसके cd subfolder
बाद डिलीट की गई फाइल को स्टेज नहींgit add .
करेंगे । लेकिन कर निश्चित रूप से इस परिवर्तन को कोई फर्क नहीं पड़ता कि आप कहाँ से कमांड करते हैं।git add -A
-A
विकल्प कहते हैं, संशोधित करता है और काम कर पेड़ से मिलान करने के सूचकांक प्रविष्टियों को हटा।
गिट 2 में -A
विकल्प अब डिफ़ॉल्ट है।
जब एक .
जोड़ा जाता है जो आपके द्वारा वर्तमान में Git प्रलेखन के अनुसार, उस निर्देशिका के अद्यतन के दायरे को सीमित करता है
यदि नही
<pathspec>
-एक विकल्प का उपयोग किए जाने पर दिया जाता है, तो पूरे काम करने वाले पेड़ की सभी फाइलें अपडेट की जाती हैं (Git के पुराने संस्करण वर्तमान निर्देशिका और उसके उपनिर्देशिकाओं में अद्यतन को सीमित करने के लिए उपयोग किए जाते हैं)।
एक चीज जो मैं जोड़ूंगा वह यह है कि यदि --interactive
या -p
मोड का उपयोग किया जाता है तो git add
व्यवहार करेंगे जैसे कि अपडेट ( -u
) ध्वज का उपयोग किया गया था और नई फाइलें नहीं जोड़ रहा था।
git add *
?