git - एसएलआर - डिस्क से पहले से हटाए गए गिट रेपो से कई फ़ाइलों को हटा रहा है




सीआरआर दर 2018 (19)

गिट 1.x के लिए

$ git add -u

यह स्वचालित रूप से ट्रैक की गई फ़ाइलों को स्टेज करने के लिए गिट को बताता है - जिसमें पहले ट्रैक की गई फ़ाइलों को हटाया जा सकता है।

गिट 2.0 के लिए

अपने पूरे काम करने वाले पेड़ को मंचित करने के लिए:

$ git add -u :/

केवल वर्तमान पथ को मंचित करने के लिए:

$ git add -u .

मेरे पास एक गिट रेपो है कि मैंने rm ( git rm नहीं ) का उपयोग करने से चार फाइलें हटा दी हैं, और मेरी गिट स्थिति इस तरह दिखती है:

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

मैं इन फ़ाइलों को गिट से मैन्युअल रूप से पार करने के बिना कैसे हटा सकता हूं और इस तरह की प्रत्येक फ़ाइल को जोड़ूं:

git rm file1 file2 file3 file4

आदर्श रूप से, मैं ऐसा कुछ ढूंढ रहा हूं जो उसी तरह काम करता है जो git add . करता है, अगर यह संभव है।


'--all' या '--update' विकल्पों के साथ गिट-ऐड का उपयोग करके आप जितना चाहें उतना अधिक प्राप्त कर सकते हैं। नई और / या संशोधित फाइलें भी इंडेक्स में जोड़ दी जाएंगी। जब मैं अन्य फ़ाइलों को छूए बिना गिट से हटाई गई फ़ाइलों को हटाना चाहता हूं तो मेरे पास एक बैश उपनाम सेटअप है:

alias grma='git ls-files --deleted -z | xargs -0 git rm'

फाइल सिस्टम से हटाई गई सभी फाइलों को हटाए गए इंडेक्स में जोड़ा जाता है।


अब तक का सबसे लचीला समाधान मिला है

git cola

और उन सभी हटाए गए फ़ाइलों का चयन करें जिन्हें मैं मंच बनाना चाहता हूं।

(नोट मैं आमतौर पर गिट में सबकुछ कमांडलाइन करता हूं, लेकिन गिट को फ़ाइलों को थोड़ा अजीब संभालता है)।


आप उपयोग कर सकते हैं

git add -u

हटाए गए फ़ाइलों को स्टेजिंग क्षेत्र में जोड़ने के लिए, फिर उन्हें प्रतिबद्ध करें

git commit -m "Deleted files manually"

आप शायद खोज रहे हैं -ए:

git add -A

यह गिट ऐड-यू के समान है, लेकिन नई फाइलें भी जोड़ता है। यह लगभग एचजी के addremove कमांड के बराबर है (हालांकि चाल पहचान स्वचालित है)।


उल्लेखानुसार

git add -u

हटाए गए फ़ाइलों को हटाने के लिए चरणबद्ध करता है, लेकिन अद्यतन के लिए भी संशोधित फाइलें।

संशोधित फ़ाइलों को अस्थिर करने के लिए आप कर सकते हैं

git reset HEAD <path>

यदि आप अपने कामों को संगठित और साफ रखना चाहते हैं।
नोट: यह हटाए गए फ़ाइलों को भी अस्थिर कर सकता है, इसलिए उन वाइल्डकार्ड से सावधान रहें।


कृपया यह देखने के लिए उपयोग करें कि वास्तव में कौन सी कमांड चल रही है

मैंने बस वीरेंडर जवाब को ऐसा करने के लिए tweaked:

git ls-files --deleted -z | xargs -t -0 git rm

कोशिश करो।

-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.

git add . && git commit -m -a "Your commit"

या

git add --all && git commit -m "Your commit"

गिट-एड में झंडे में से कोई भी केवल चरण हटाए गए फाइलों को ही नहीं करेगा; यदि आपके द्वारा संशोधित सभी फ़ाइलें हटा दी गई हैं, तो आप ठीक हैं, लेकिन अन्यथा, आपको गिट-स्टेटस चलाने और आउटपुट को पार्स करने की आवश्यकता है।

जेरेमी के जवाब से काम करना, मुझे यही मिला:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. फाइलों की स्थिति प्राप्त करें।
  2. हटाए गए फ़ाइलों के लिए, फ़ाइल का नाम अलग करें।
  3. # एस के साथ शुरू होने वाली सभी पंक्तियों को हटाएं, साथ ही उस स्थिति रेखा को जिसमें "हटाया गया" शब्द था; मुझे याद नहीं है कि यह वास्तव में क्या था, और यह अब और नहीं है, इसलिए आपको इसे विभिन्न स्थितियों के लिए संशोधित करना पड़ सकता है। मुझे लगता है कि अभिव्यक्तियों का समूहकरण एक जीएनयू-विशिष्ट सुविधा हो सकता है, इसलिए यदि आप gnutils का उपयोग नहीं कर रहे हैं, तो आपको कई grep -v लाइनों को जोड़ना पड़ सकता है।
  4. आरआईटी git rm करने के लिए फाइल पास करें।

इसे एक खोल उपनाम में चिपका रहा है ...


दृश्य स्टूडियो परियोजना के लिए

'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

जो तब उपयोगी होता है जब हटाए गए फ़ाइल पथ में स्थान होता है


मुझे वही चाहिए और गिट गुई "मंच बदल गया" बटन इस्तेमाल किया। यह सब भी जोड़ता है।

और "चरण बदल गया" के बाद मैंने "प्रतिबद्ध" बनाया ...

तो मेरी कामकाजी निर्देशिका फिर से साफ है।


यदि आप इसे अपने .gitconfig जोड़ना चाहते हैं तो यह करें:

[alias]
  rma = !git ls-files --deleted -z | xargs -0 git rm

तो आपको बस इतना करना है:

git rma

यदि वे एकमात्र परिवर्तन हैं, तो आप बस कर सकते हैं

git commit -a

सभी परिवर्तन करने के लिए। इसमें हटाई गई फाइलें शामिल होंगी।


यह वास्तव में महत्वपूर्ण नहीं है, लेकिन मैं चयनित उत्तर से असहमत हूं:

git add -u 

... अगर सूचक पेड़ में संबंधित फाइलों को हटा दिया गया है, तो सूचकांक से फ़ाइलों को हटा दिया जाएगा, लेकिन यह ट्रैक की गई फ़ाइलों की संशोधित नई सामग्री को भी चरणबद्ध करेगा।

git rm $(git ls-files --deleted)

... दूसरी ओर केवल हटाई गई फ़ाइलों को आरएम करेगा जो ट्रैक किए गए थे।

तो मेरे विचार में उत्तरार्द्ध बेहतर विकल्प है।


हटाए गए फ़ाइलों को कमांड rm-all रूप में व्यवस्थित करने के लिए सिस्टम उपनाम जोड़ना

यूनिक्स alias rm-all='git rm $(git ls-files --deleted)'

विन्डोज़ doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

ध्यान दें

विंडोज़ को bash स्थापित करने की जरूरत है।


केवल हटाई गई फ़ाइलों को मंचित करने के लिए:

for x in `git status | grep deleted | awk '{print $3}'`; do git rm $x; done

या (xargs रास्ता):

git status | awk '/deleted/ {print $3}' | xargs git rm

सुविधाजनक बाद के उपयोग के लिए आप अपने पसंदीदा कमांड सेट को alias कर सकते हैं।


git ls-files --deleted -z | xargs -0 git rm 

हो सकता है कि आप जो खोज रहे हैं .. यह मेरे लिए काम करता है ..


git ls-files --deleted -z | xargs -0 git rm --cached

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

आपके POSIX संस्करण के आधार पर, आपको xargs -0 -r का उपयोग करने की आवश्यकता हो सकती है: इससे पाइप नल सामग्री के दौरान xargs को शानदार रूप से बाहर निकलने का कारण बन जाएगा।

संपादित करें: - --cached और - --deleted झंडे का उपयोग गलती से उन फ़ाइलों को हटाने के खिलाफ सुरक्षा के लिए किया जाता है जिन्हें पहले ही हटाया नहीं गया है।


git rm test.txt

वास्तविक फ़ाइल को हटाने से पहले या बाद में।






git-rm