Git रिपॉजिटरी से मर्ज होने के बाद .orig फ़ाइलों को कैसे हटाएं?


160

मर्ज के दौरान मेरी git रिपॉजिटरी में कुछ .orig फाइलें कैसे चेक की जाती हैं, जो अब संशोधित और अन-ट्रैक किए गए सेक्टर में प्रदर्शित होती हैं। लेकिन मैं इस फाइल को अब अपने रिपॉजिटरी में नहीं चाहता। उसको कैसे करे।

    modified:   Gemfile.lock.orig
    #   modified:   Gemfile.orig
    #   modified:   app/assets/images/bg_required.png.orig
    #   modified:   app/assets/javascripts/application.js.orig

    etc...

किसी भी तरह की सहायता को आभार समझेंगे।


संभावित डुप्लिकेट stackoverflow.com/questions/61212/...
ziu

@ziu, मैं उन फाइलों को हटाना चाहता हूं जो पहले से ही मेरी रिपॉजिटरी में मौजूद हैं, git मर्ज द्वारा या किसी अन्य डेवलपर द्वारा चेक किया गया है
maximus

1
मैं जाँच की गई फ़ाइलों के बारे में याद किया। हालाँकि, .orig फ़ाइलों को mergetool द्वारा लिखा जाता है। यह मुझे एक गैर-स्वच्छ संघर्ष प्रस्ताव के रूप में लगता है।
जिउ

क्या आपको संपूर्ण इतिहास से फ़ाइल को पूरी तरह से हटाने की आवश्यकता है?
linquize

1
यह बाहर की जाँच करें stackoverflow.com/questions/872565/…
ziu

जवाबों:


253

इस मामले में सबसे अच्छा समाधान यह है कि इसे सरल रखें और उन फाइलों से स्वतंत्र रूप से छुटकारा पायें:

cd /your/repo/directory
find . -name '*.orig' -delete 

वैकल्पिक रूप से, विंडोज / पॉवरशेल में, आप निम्न कमांड चला सकते हैं

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item

14
यदि आपको एक विधेय त्रुटि का उपयोग मिलता है: खोजें। -नाम '* .orig' | xargs rm -f
नील

एक चेतावनी के रूप में, 'खोज -delete' का उपयोग करना खतरनाक हो सकता है। कृपया जांच लें कि निर्देशिका (इस मामले में '।') यह सुनिश्चित करने के लिए सही है कि आप केवल वही हटा रहे हैं जिसे आप हटाना चाहते हैं
Kingledion

8
यह एक दर्द है जो git clean -dfऐसा नहीं करता है। हमें कचरे को मैन्युअल रूप से साफ करना चाहिए जो इसे पीछे छोड़ देता है?
श्रीधर सरनोबत

विंडोज के बारे में क्या?
पैंजरक्रिस

3
@Panzercrisis यदि आप विंडोज का उपयोग कर रहे हैं, तो आपके पास संभवतः पहले से ही एक टर्मिनल एमुलेटर होगा जिसके माध्यम से आप गिट के साथ इंटरफेस करेंगे। मैं "gitforwindows" की सिफारिश करूंगा जिसमें अन्य सभी आवश्यक उपकरणों के साथ BASH शामिल है।
TheChymera

151

git cleanअधिक जानकारी का प्रयास करें आप यहां या यहां पा सकते हैं


1
मैं अनट्रैक की गई फ़ाइलों को साफ कर सकता हूं, लेकिन ऐसी फाइलों को हटाने के बारे में जो पहले से ही रिपॉजिटरी में हैं।
अधिकतम

आपको पहले फ़ाइल को रिपॉजिटरी से हटाना होगा git rm <filename>और फिर कमिट करना होगा। इसके बाद * .orig फ़ाइल को git इग्नोर करें।
अमर

4
मुझे लगता है कि यह उत्तर के रूप में चिह्नित एक बेहतर समाधान है।
ऑर्गमीर

51
git clean -iये वाकई अच्छा है। यह आपको उन फ़ाइलों की एक सूची देगा जो हटा दी जाएंगी और आपको सूची से निपटने के तरीके के बारे में विकल्प प्रदान करेगी (सूची को फ़िल्टर करें, सूची में सब कुछ और कुछ अन्य विकल्पों को हटाने में सक्षम हो)।
PPPaul

1
आप केवल * .orig फ़ाइलों को हटाने में मदद करने के लिए पैटर्नों के साथ जिट क्लीन का उपयोग कर सकते हैं: git clean -f -e '*.*' -e '!*.orig' केवल एक अपवर्जित पैटर्न है, लेकिन इसमें नकारात्मक पैटर्न के लिए थोड़ा समर्थन है। इसलिए हम सभी फ़ाइलों को बाहर कर सकते हैं *.*, और फिर केवल *.origफ़ाइलों के बहिष्करण को नकार सकते हैं।
लेओलेर


6

आप .gitignore का उपयोग करके फ़ाइलों को अनदेखा कर सकते हैं

यहाँ दी गई सूची की तरह * .orig डालें

https://help.github.com/articles/ignoring-files

वर्तमान फ़ाइलों को हटाने के लिए आप शेल स्क्रिप्ट बना सकते हैं और प्रोजेक्ट फ़ोल्डर से नीचे की तरह चला सकते हैं

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done

5
हालांकि वह निश्चित रूप से यह कर सकते हैं, यह यहाँ करने के लिए सही बात नहीं है :)
सर्जियो Tulentsev

1
मुझे लगता है कि यह एक अच्छा विचार है क्योंकि यह बैकअप रखता है, लेकिन मंचन की गई फ़ाइलों में हस्तक्षेप नहीं करता है
akazemis

@akazemis - आप ऐसा सोचते होंगे, लेकिन जब आप कोड के लिए तैयार हो रहे होते हैं, तो आप दो बार जितने चाहें उतने खोज परिणाम देखते हैं (जो आपको नवीनतम कोड में आपके बारे में गलत जानकारी देता है)। यह इतना दुर्लभ है कि मैं सिर्फ फाइलों के न होने के खतरे के साथ रहूंगा। सिर्फ नियमित रूप से कमिट करना बेहतर है।
श्रीधर सरनोबत

5

दुर्भाग्य से git cleanमेरे लिए काम नहीं करता है क्योंकि मैंने *.origअपनी वैश्विक gitignore फ़ाइल में जोड़ा है, इसलिए उन्हें साफ-सुथरे से भी अनदेखा किया गया है। यहां तक ​​कि दौड़ना git clean -xभी अच्छा नहीं है क्योंकि मैं नहीं चाहता कि मेरी सभी उपेक्षित फाइलें हटाई जाएं।git clean -iसहायक है, लेकिन वास्तव में मैं प्रत्येक फ़ाइल की समीक्षा नहीं करना चाहता।

हालांकि, हम एक अपवर्जित पैटर्न का उपयोग कर सकते हैं और मैच को नकार सकते हैं। इस आदेश के साथ पूर्वावलोकन करें:

git clean -e '!*.orig' --dry-run

फिर जब आप आश्वस्त हों, तो forceउन्हें वास्तव में हटाने के लिए ध्वज को पास करें:

git clean -e '!*.orig' -f

Leorleor की टिप्पणी के आधार पर


3

git rm Gemfile.lock.orig और बाकी फाइलें जिनकी आपको जरूरत नहीं है। git commit --amend

उन ब्लब्स को पूरी तरह से हटाने के लिए, git gc --prune=0 --aggressive


glin rm Gemfile.lock.orig के @linquizebut कमिट में संशोधन का उपयोग करते हुए अंतिम प्रतिबद्ध होगा? क्या ऐसी फाइल के लिए कोई कमिटमेंट नहीं है?
मैक्सिमस

2

मेरे लिए git clean -fसभी * .oig फ़ाइलों को हटा दिया। और जो पहले से थे, उन्हें पहले ही रख देता है।

यह वही है जो (लगभग) मर्ज के बाद जैसा दिखता था:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
    .idea/misc.xml.orig

.idea/codeStyles/पहले से ही एक फ़ाइल के रूप में मर्ज करने से पहले था। .idea/misc.xml.orig(और भी बहुत कुछ) हटाना पड़ा।

=> उपयोग करना git clean -f:

$ git clean -f
Removing .idea/misc.xml.orig

परिणामस्वरूप:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/

0

आप बस कर सकते हैं git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

टी एल; डॉ;

git status -s आपको सूचकांक के संबंध में सभी संशोधित / लापता फाइलें प्राप्त करने की अनुमति देता है

grep "\.orig$" ".orig" द्वारा समाप्त होने वाली फ़ाइलों को फ़िल्टर करें

awk '{print $2}' फ़ाइल का नाम सूचीबद्ध करता है (git जानकारी को स्किप करना जैसे A, M, ??)

xargs -n1 -r echo rm प्रिंट हर तर्क पर कमांड हटाते हैं (-n1: one at a -r: and स्किप: जब खाली हो) सिर्फ कॉपी करें और फाइलों को हटाने के लिए कमांड्स को डबल-चेक करें।


हालांकि यह लेखकों के सवाल का जवाब दे सकता है, लेकिन इसमें कुछ स्पष्ट शब्दों और / या प्रलेखन के लिंक का अभाव है। रॉ कोड स्निपेट्स उनके आसपास कुछ वाक्यांशों के बिना बहुत उपयोगी नहीं हैं। आपको यह भी पता चल सकता है कि एक अच्छा उत्तर बहुत उपयोगी कैसे लिखें । कृपया अपना उत्तर संपादित करें।
नरक नोव

-4

git rm <file>

http://git-scm.com/docs/git-rm

उन फ़ाइलों / निर्देशिकाओं को भी जोड़ें जिन्हें आप अपनी .gitignore फ़ाइल को अनदेखा करना चाहते हैं।


git rm <file> <file>बस उन्हें सूचीबद्ध करें।
veritas1

फिर आपको सभी फाइलों को सूचीबद्ध करने की आवश्यकता है, या उन्हें खोजने के लिए एक टूल का उपयोग करें जैसे उन्हें आरएमटी पास करने के लिए, या उन पर एक शेल ग्लोब और लूप का उपयोग करें। Git इस मानक Unix कमांड-लाइन कार्यक्षमता की नकल नहीं करता है।
शुभम

1
मूल फ़ाइलों को रिपॉजिटरी में नहीं जोड़ा जाता है, इसलिए इसका उपयोग करने की कोई आवश्यकता नहीं है git rm, बस rmइसके बजाय उपयोग करें
एडसन मदीना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.