git केवल संशोधित परिवर्तन जोड़ते हैं और अनियोजित फ़ाइलों को अनदेखा करते हैं


658

मैंने "गिट स्थिति" चलाई और नीचे सूचीबद्ध कुछ फाइलें हैं जो संशोधित / या शीर्षक के तहत "परिवर्तनों के लिए प्रतिबद्ध नहीं हैं"। इसने कुछ अनटैक की गई फ़ाइलों को भी सूचीबद्ध किया है जिन्हें मैं अनदेखा करना चाहता हूं (इन निर्देशिकाओं में ".itignore" फ़ाइल है)।

मैं संशोधित फ़ाइलों को मंचन में रखना चाहता हूं ताकि मैं उन्हें प्रतिबद्ध कर सकूं। जब मैंने "git add" चलाया, तो इसमें संशोधित फाइलें और वे फाइलें जोड़ी गईं, जिन्हें मैं मंचन के लिए अनदेखा करना चाहता हूं।

मैं केवल संशोधित फ़ाइलों को कैसे जोड़ूँ और नीचे दी गई स्थिति के साथ प्रस्तुत की गई फ़ाइलों को अनदेखा करूँ।

इसके अलावा, मेरी ".gitignore" फाइलें ठीक से काम कर रही हैं?

$ git status
# On branch addLocation
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   someProject/path/domain/viewer/LocationDO.java
#       modified:   someProject/path/service/ld/LdService.java
#       modified:   someProject/path/service/ld/LdServiceImpl.java
#       modified:   someProject/path/web/jsf/viewer/LocationFormAction.java
#       modified:   someProject/war/WEB-INF/classes/message/viewer/viewer.properties
#       modified:   someProject/war/page/viewer/searchForm.xhtml
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .metadata/
#       someProject/build/
no changes added to commit (use "git add" and/or "git commit -a")

1
अगर आपने .गितिग्नोर फाइल को जोड़ा है, तो आपने फाइलों को ट्रैक किया है। .ignignore फाइल उन फाइलों को नजरअंदाज नहीं करेगी, जिन्हें पहले से ट्रैक किया जा रहा है। यह एक मुद्दा हो सकता है।
BKSpurgeon

जवाबों:


904

आदर्श रूप से आपकी .gitignoreअनट्रेक्ट की गई (और उपेक्षित) फाइलों को स्टेटस में दिखाया git addजाना चाहिए , उपयोग करते हुए जोड़ा जाना चाहिए इत्यादि। इसलिए मैं आपसे सही करने के लिए कहूंगा।.gitignore

आप ऐसा कर सकते हैं git add -uकि यह संशोधित और हटाई गई फ़ाइलों को चरणबद्ध करेगा।

आप git commit -aकेवल संशोधित और हटाई गई फ़ाइलों को करने के लिए भी कर सकते हैं ।

ध्यान दें कि यदि आपके पास 2.0 से पहले संस्करण का Git है और उपयोग किया जाता है git add ., तो आपको उपयोग करने की आवश्यकता होगी git add -u .( " git add -A" और " git add ." का अंतर देखें ))।


74
ब्याज की बात, यह ( add -u) केवल modified फाइलें नहीं जोड़ता है, यह "भी" जोड़ता deletedहै .. कुछ मैं वर्तमान में रोकने की कोशिश कर रहा हूं।
ज़ैक लिसोबेई

6
केवल संशोधित फ़ाइलों को जोड़ने के लिए, मैं आमतौर पर अपने रेपो और प्रकार की शीर्ष निर्देशिका में जाता हूं for fil in $(git diff --name-only --relative); do git add $fil; done। अगर मैं इसका भरपूर उपयोग करता (मैं नहीं करता), तो मैं अपनी ~/.bashrcफाइल में इसके लिए एक उपनाम बनाता । यह, निश्चित रूप से, केवल काम में आता है।
Krøllebølle

8
कोई निश्चित जवाब नहीं, केवल "काम करता है-ज्यादातर लोगों के लिए" जवाब? मुझे इसे सही ढंग से करने के लिए एक और प्रक्रिया का उपयोग करना होगा? इसे git ऐड में कैसे नहीं बनाया जाता है? ऐसा लगता है कि ऐसा करना एक सामान्य बात है।
शमूएल

2
यदि आप विषम फ़ाइल नाम (रिक्त स्थान, तारांकन, क्या नहीं) इन विधियों में वर्णित nb विफल हो जाएंगे। किसी भी अजीब तरह से नामित फ़ाइलों से बचने के लिए, का उपयोग करें:IFS=$(echo -en "\n\b"); for file in $(git diff --name-only); do git add "$file"; done
ऑरवेलोफाइल

3
git add -uके लिए कम है git add --updateऔर git commit -aके लिए कम हैgit commit --all
ह्यूगो

95

यह मेरे लिए काम किया:

#!/bin/bash

git add `git status | grep modified | sed 's/\(.*modified:\s*\)//'`

या इससे भी बेहतर:

$ git ls-files --modified | xargs git add

यदि आप समूह का पुन: उपयोग नहीं करने जा रहे हैं, तो आपको ग्रुपिंग (()) की आवश्यकता नहीं है, और मेरे लिए फाइलनाम के सामने व्हाट्सएप छोड़ दिया है। ऐसा नहीं है कि यह इस मामले में अंतिम परिणाम को प्रभावित करेगा, लेकिन उदाहरण के लिए यहां मेरे द्वारा इस्तेमाल किए गए सेड कमांड का उपयोग करने के लिए: sed 's /.* संशोधित: * //'। मैक ओएस एक्स 10.9.5 पर सत्यापित।
शमूएल

@Samuel Grouping अभिव्यक्ति का परीक्षण करते समय अच्छा है। फिर मैं स्क्वायर ब्रैकेट के अंदर मैच को प्रिंट कर सकता हूं कि मैं सही हूं।
user877329

1
@ Untрослав आपके समाधान में संशोधित और अनटैक की गई फ़ाइलें जोड़ता है और इसके बराबर है git add -u, इसलिए यह प्रश्न का उत्तर नहीं देता है।
निक वोल्किन

7
DMart

2
git diff-files -z --diff-filter = M --name-only | xargs -0 git add --dry-run अच्छी तरह से काम करता है।
DMart

10
git commit -a -m "message"

-a: इसमें वर्तमान में सभी परिवर्तित / हटाई गई फ़ाइलें शामिल हैं। हालांकि, ध्यान रखें कि अनट्रैक की गई (नई) फाइलें शामिल नहीं हैं।

-m: कमिट का संदेश सेट करता है


4

आपने यह नहीं बताया कि वर्तमान में आपका क्या है .gitignore, लेकिन .gitignoreआपकी रूट डायरेक्टरी में निम्नलिखित सामग्री के साथ ट्रिक करना चाहिए।

.metadata
build

3
मैं अपने .itignore का सभी गलत उपयोग कर रहा था। मेरे पास हर निर्देशिका में एक खाली .gitignore फ़ाइल थी जिसे मैं इसमें सामग्री के साथ एक एकल gignignore होने के बजाय अनदेखा करना चाहता था।
स्टीव

1
@ साइट: यह काम करेगा अगर प्रत्येक। gitognoreएक शुरुआत (सब कुछ अनदेखा) किया। लेकिन .gitignoreशीर्ष निर्देशिका में एक एकल आमतौर पर उपयोग करने और पर्याप्त करने के लिए बहुत सरल है।
Maaartinus

2

मैं इसे आज़माने के लिए हुआ था इसलिए मैं पहले फाइलों की सूची देख सकता था:

git status | grep "modified:" | awk '{print "git add  " $2}' > file.sh

cat ./file.sh

निष्पादित:

chmod a+x file.sh
./file.sh 

संपादित करें: (टिप्पणियां देखें) यह एक चरण में हासिल किया जा सकता है:

git status | grep "modified:" | awk '{print $2}' | xargs git add && git status

1
यह एक चरण में प्राप्त किया जा सकता है:git status | grep modified | awk '{print $2}' | xargs git add && git status
चॉयलटन बी। हिगिनबॉटम

हाँ, मुझे वह समाधान भी उपलब्ध कराना चाहिए था, धन्यवाद, मैंने पोस्ट अपडेट कर दी है।
माइक क्यू।

1

यकीन नहीं होता कि यह एक फीचर या बग है लेकिन यह हमारे लिए काम कर रहा है:

git commit '' -m "Message"

खाली फ़ाइल सूची '' पर ध्यान दें। Git इसकी व्याख्या सभी संशोधित ट्रैक की गई फ़ाइलों को करने के लिए करता है, भले ही उनका मंचन न किया गया हो, और अनट्रैक की गई फ़ाइलों को अनदेखा करें।


यह निश्चित रूप से काम नहीं करता है - जब उपयोग करते हैं।
घोस्टकट

1

संशोधित और हटाई गई फ़ाइलों को स्टेज करने के लिए

git add -u

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