Git: सूची केवल "अनट्रैक" फ़ाइलें (साथ ही, कस्टम कमांड)


339

क्या कमांड का उपयोग करने का एक तरीका है जैसे git ls-filesकि केवल अनट्रैक की गई फाइलें दिखाना?

कारण मैं पूछ रहा हूँ क्योंकि मैं सभी हटाए गए फ़ाइलों को संसाधित करने के लिए निम्न आदेश का उपयोग करता हूं:

git ls-files -d | xargs git rm

मुझे अनट्रैक फ़ाइलों के लिए कुछ समान चाहिए:

git some-command --some-options | xargs git add

मैं -oविकल्प खोजने में सक्षम था git ls-files, लेकिन यह वह नहीं है जो मैं चाहता हूं क्योंकि यह अनदेखा फाइलों को भी दिखाता है। मैं भी निम्नलिखित लंबी और बदसूरत आदेश के साथ आने में सक्षम था:

git status --porcelain | grep '^??' | cut -c4- | xargs git add

ऐसा लगता है कि मुझे एक बेहतर कमान मिल गई है जिसका मैं यहां उपयोग कर सकता हूं। और अगर वहाँ नहीं है, तो मैं कस्टम git कमांड कैसे बनाऊँ?


क्या आप बता सकते हैं कि आपको इसकी आवश्यकता क्यों है git ls-files -d | xargs git rm?
ताकेशिन

यह उन सभी फ़ाइलों को हटा देता है जो गिट नोटिस गायब हैं। मेरा सवाल संबंधित ऑपरेशन करने के बारे में था - वर्तमान में ट्रैक नहीं होने वाली सभी फ़ाइलों को जोड़ें। मैं आमतौर पर इन दोनों का नाम बदलने, संयोजन, और / या मेरी कोड फ़ाइलों को विभाजित करने के बाद करूँगा।
वी आर ऑल मोनिका

यदि वे गायब हैं, तो क्या वे पहले से ही नष्ट नहीं हुए हैं? जब तक ... आपने कहीं और से खींच लिया और फिर आप रिमोट से सिंक करने की कोशिश कर रहे हैं ... मुझे लगता है कि मुझे मिल गया।
बुटिक बटुक

मैंने सभी उत्तरों का परीक्षण किया है, यदि कोई खाली फ़ोल्डर नहीं है, तो कोई भी उसे नहीं पा सकता है।
किटीगर्ल

@ किटीगर्ल यह सही है। क्योंकि gitकेवल फाइलों पर काम करता है, इसमें खाली फ़ोल्डरों को ट्रैक करने का कोई तरीका नहीं है। find . -type d -emptyइसके बजाय कोशिश करें ।
वी आर ऑल मोनिका

जवाबों:


529

अनटैक की गई फ़ाइलों को सूचीबद्ध करने का प्रयास करें:

git ls-files --others --exclude-standard

यदि आपको आउटपुट को पाइप करने की आवश्यकता है xargs, तो सफेद रिक्त स्थान का उपयोग करने के लिए समझदारी है git ls-files -zऔर xargs -0:

git ls-files -z -o --exclude-standard | xargs -0 git add

अनियोजित फ़ाइलों को जोड़ने के लिए अच्छा उपनाम:

au = !git add $(git ls-files -o --exclude-standard)

संपादित करें: संदर्भ के लिए: git-ls-files


7
उत्तम! !उर्फ लाइन की शुरुआत में इसका क्या मतलब है, या वह दस्तावेज कहां है?
वी आर ऑल मोनिका

@takeshin केवल मूल निर्देशिका नाम कैसे प्राप्त करें? सबफ़ोल्डर्स नहीं। इन अनट्रैक की गई फाइलों में इसका मतलब है: / P / a / files, / P / a / images, / P / a / P /, ... - I just
to

2
हालांकि आपको किस स्थिति में उपनाम की आवश्यकता होगी? git add *एक ही काम करेगा: मानक को छोड़कर सभी अनट्रैक की गई फ़ाइलों को जोड़ें (जिन रास्तों को कवर किया गया है .gitignore)।
टूनेटो

1
मैं रेपो में सभी निर्देशिकाओं में लगातार काम करने के लिए अपने उपनाम को पसंद करता हूं (ls-files कमांड केवल वर्तमान पेड़ में परिवर्तित फ़ाइलों को दिखाता है), इसलिए मेरे पास है[alias] lso = "!f() { cd $(git rev-parse --show-toplevel); git ls-files -o; }; f"
qneill

धन्यवाद। अच्छी टिप्पणी है।
डार्थ एलीगस जूल

71

यदि आप केवल अनट्रैक की गई फ़ाइलों को हटाना चाहते हैं, तो यह करें:

git clean -df

xयदि आप विशेष रूप से उपेक्षित फ़ाइलों को भी शामिल करना चाहते हैं तो उसमें जोड़ें । मैं दिन भर बहुत उपयोग git clean -dfxकरता हूं ।

आप केवल एक स्क्रिप्ट लिखकर git-whateverऔर उसे अपने पथ में रखकर कस्टम git बना सकते हैं ।


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

5
बस करो git add -Aया git add -u(पर निर्भर करता है कि तुम और अधिक समझ में आता है)
डस्टिन

1
आपकी टिप्पणी वास्तविक उत्तर है, जिसे बाद में @ माइक लोकोको द्वारा भी दोहराया जाता है
-7

2
और "git clean -dfxn" को एक सूखे रन के लिए "n"
चार

50

git add -A -nजो चाहोगे, करोगे। -Aरेपो के लिए सभी ट्रैक न किए गए फ़ाइलों कहते हैं, -nबनाता है यह एक dry-runजहां ऐड नहीं किया जाता है, लेकिन स्थिति उत्पादन कि प्रत्येक फ़ाइल लिस्टिंग दिया जाता है होता जोड़ा गया है।


7
यह एक महान जवाब है! ध्यान दें कि यह फाइलों में .gitignoreफाइलों को बाहर करता है , जो आमतौर पर हम चाहते हैं, लेकिन यदि नहीं, तो git add -fAn
cdunn2001

1
यह सबसे अच्छा उत्तर लगता है।
रोब ग्रांट

1
यह सबसे अच्छा जवाब है। यह स्पष्ट रूप से उपयोगकर्ता को बताता है कि यह क्या करेगा (इसे किए बिना) और वास्तव में इसे जोड़ने से पहले इसकी समीक्षा करने का मौका देता है। उत्तम। धन्यवाद!
डिजिटुगी

यह संशोधित फ़ाइलों को भी सूचीबद्ध करता है।
फ्रैंक-रेने शॅफर

अच्छा है, लेकिन मैं इसे लपेटा जाता हूं add '$file':। जबकि git ls-files --exclude-standard -oएक नंगे आउटपुट देता है, पाइपिंग हॉट।
हाइपरपैलियम

28

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

git ls-files -z -o --exclude-standard | xargs -0 git add

मुझे लगता है कि यह सही उत्तर है, क्योंकि यह बाद में उन पर कार्रवाई (जैसे गिट जोड़ें) करने के लिए प्रत्येक फ़ाइल का मार्ग प्रदान करता है
पाब्लो बर्गोस

27

सब कुछ बहुत सरल है

सभी अनटैक की गई फ़ाइलों की सूची प्राप्त करने के लिए, विकल्प -u (--untracked-files) के साथ कमांड गिट स्थिति का उपयोग करें

git status -u

कैसे के बारे में एक गैर पुनरावर्ती संस्करण?
डेविड

दुर्भाग्य से, यह भी फ़ाइल को अनदेखा कर देता है।
प्लॉफ

8
यह केवल जवाब यह है कि प्रारंभिक पर प्रतिबद्ध मेरी नजरअंदाज कर दिया फ़ाइलों से पता चला है, लेकिन मैं जोड़ने के लिए किया था --ignoredकरने के लिए git status -uआदेश
डीएन

यह सरल और अच्छा है।
एरिक वांग

1
यह संशोधित फ़ाइलों को भी दिखाता है। तो, सवाल का जवाब नहीं: केवल अनटैक की गई फ़ाइलों को दिखाएं।
वाइल्डकार्ड

6

संभावित रूप से जोड़ने के लिए फ़ाइलों की तलाश करते समय। आउटपुट से git showऐसा होता है लेकिन इसमें अन्य सामान भी शामिल होता है। निम्न कमांड फाइलों की समान सूची प्राप्त करने के लिए उपयोगी है, लेकिन अन्य सभी सामानों के बिना।

 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

यह तब उपयोगी होता है जब किसी विशिष्ट पैटर्न से मेल खाती फ़ाइलों को खोजने के लिए पाइप लाइन में संयोजित किया जाता है और फिर उस तक पाइपिंग की जाती है git add

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add

6

मुझे इसका एक पुराना सवाल पता है, लेकिन अनकैप्ड फाइलों को सूचीबद्ध करने के संदर्भ में, मुझे लगा कि मैं एक और जोड़ दूंगा जिसमें अनट्रैक किए गए फ़ोल्डरों को भी सूचीबद्ध किया गया है:

आप जीएन क्लीन ऑपरेशन के साथ एन (ड्राय रन) का उपयोग कर सकते हैं ताकि आप यह दिखा सकें कि यह कौन सी फाइलों को हटाएगा (इसके अलावा .ignignore फाइलें भी:

git clean -xdn

इससे उन सभी फ़ाइलों और सभी फ़ोल्डरों को दिखाने का फायदा है, जिन्हें ट्रैक नहीं किया गया है। पैरामीटर:

  • x - सभी अनटैक की गई फ़ाइलों को दिखाता है (जिसमें git और अन्य द्वारा अनदेखा किया गया है, जैसे बिल्ड आउटपुट आदि ...)
  • d - अनकही निर्देशिका दिखाएं
  • n- और सबसे महत्वपूर्ण बात! - ड्राईरुन, वास्तव में कुछ भी नहीं हटाते हैं, केवल परिणामों को प्रदर्शित करने के लिए स्वच्छ तंत्र का उपयोग करते हैं।

यह एक छोटा सा असुरक्षित हो सकता है इसे इस तरह से करें जैसे आप भूल जाते हैं -n। इसलिए मैं आमतौर पर इसे git config में उपनाम देता हूं।


2

पिछले सभी उत्तर जो मैंने जांचे थे, वह भी प्रतिबद्ध होने के लिए फाइलों को सूचीबद्ध करेगा। यहां एक सरल और आसान समाधान है जो केवल उन फ़ाइलों को सूचीबद्ध करता है जो अभी तक रेपो में नहीं हैं और जिनके अधीन नहीं हैं .gitignore

git status --porcelain | awk '/^\?\?/ { print $2; }'

या

git status --porcelain | grep -v '\?\?'

यह उन फ़ाइलों के साथ अच्छी तरह से काम नहीं करता है जिनके नाम में जगह है
ssc

-2

मुझे लगता है कि यह मूल पोस्टर के रूप में एक ही बात होगी:

git add .


2
हर बार जब आप करते हैं git/svn add ., बिल्ली का बच्चा मर जाता है।
नैकिलन

हेह, केवल अगर आपको दूरस्थ शाखाओं की अपनी स्थानीय प्रतियों में क्रॉफ्ट का एक गुच्छा मिला है;) स्थानीय शाखाएं बनाएं और आप git add .अशुद्धता के साथ कर सकते हैं !
टिम फुलमर

@Nakilon, यही कारण है कि आप .gitignoreठीक से कॉन्फ़िगर करते हैं । फिर भी बचने के लिए अच्छा है git add ., हालांकि। बेहतर है git add -u
वाइल्डकार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.