सवाल स्थानीय फाइल सिस्टम से इसे हटाए बिना गिट भंडार से फ़ाइल निकालें


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

git rm mylogfile.log

भंडार से एक फाइल को हटा देगा, लेकिन इसे स्थानीय फाइल सिस्टम से भी हटा देगा।

मैं इस फ़ाइल को रेपो से कैसे हटा सकता हूं के बग़ैर फ़ाइल की मेरी स्थानीय प्रतिलिपि हटाना?


2439
2017-07-17 14:56


मूल


का डुप्लिकेट गिट में फ़ाइल में परिवर्तनों को ट्रैक करना और अनदेखा करना बंद करें


जवाब:


एकल फ़ाइल के लिए:

git rm --cached mylogfile.log

एकल निर्देशिका के लिए:

git rm --cached -r mydirectory

3508
2017-07-17 14:57



धन्यवाद! मुझे यकीन नहीं है कि मैं इसे आदमी में कैसे याद करता हूं ... "जब - कैश किया जाता है, तो चरणबद्ध सामग्री को शाखा की नोक या डिस्क पर फ़ाइल से मेल खाना पड़ता है, जिससे फ़ाइल को इंडेक्स से हटाया जा सकता है । " - mveerman
शायद क्योंकि यह आत्म व्याख्यात्मक के रूप में नहीं है --keep-local। - Martin
@DGGenuine, --keep-local एक तर्क है svn rm - bdonlan
@bdonian धन्यवाद। नए गिट-आरएम संस्करण के लिए एक विकल्प होना चाहिए। विडंबना यह है कि यह पृष्ठ शीर्ष परिणाम है जब "git rm '--keep-local' - Carl G
लेकिन मैं दूरस्थ सर्वर पर फ़ाइलों को कैसे संरक्षित करता हूं? यह मेरा स्थानीय एक रखता है, लेकिन अगर मैं किसी अन्य सर्वर से धक्का और खींचता हूं, तो फ़ाइल हटा दी जाती है। मैंने फ़ाइल के लिए एक .gitignore भी जोड़ा, लेकिन यह अभी भी हटा दिया गया है - spankmaster79


रेपो से एक संपूर्ण फ़ोल्डर को हटाने के लिए (जैसे रिशेर्पर फाइलें), ऐसा करें:

git rm -r --cached folderName

मैंने कुछ रिशेर्पर फाइलें की हैं, और नहीं चाहते थे कि वे अन्य प्रोजेक्ट उपयोगकर्ताओं के लिए बने रहें।


249
2018-04-04 18:14



भविष्य के आगंतुकों के लिए बस एक जोड़ा गया नोट: जीयूआई को रीपो में वापस "सिंक" करने के लिए उपयोग न करें। इससे फ़ाइलों को आपके स्थानीय रेपो में वापस खींच लिया जाएगा। आपको एक करना है Git Push repo branch वास्तव में रिमोट से फ़ाइलों को हटाने के लिए। - RubberDuck
@RubberDuck 3 साल का उत्तर, और मेरे लिए काम करने वाला एकमात्र समाधान :) धन्यवाद - Mariusz


आप स्थानीय फ़ाइल सिस्टम से उन्हें हटाए बिना अपने .gitignore के आधार पर रिपॉजिटरी से फ़ाइलों को भी हटा सकते हैं:

git rm --cached `git ls-files -i -X .gitignore`

या, वैकल्पिक रूप से, विंडोज पावरहेल पर:

git rm --cached $(git ls-files -i -X .gitignore)

163
2018-01-31 10:05



विंडोज पर काम नहीं करता है। git ls-files -i -X ​​.gitignore काम करता है, लेकिन मुझे नहीं पता कि फ़ाइलों को 'git rm' में कैसे भेजना है। क्या आप जानते हैं कि वह काम कैसे करना है? - Erik Z
यदि आप cmd-console के बजाय गिट बैश का उपयोग करते हैं तो विंडोज पर काम करता है - Andreas Zita
इसे प्रेम करें। सिवाय इसके कि मेरे पास कुछ फाइलें थीं जो फ़ाइल नाम में रिक्त स्थान पर थीं। मैंने यहां समाधान को संशोधित किया: git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"। कृपया इस समाधान को यहां उत्तर में संशोधित या जोड़ने पर विचार करें, क्योंकि यह एक अच्छा टूल है ... - mpettis
मैंने कोशिश नहीं की लेकिन इसका परीक्षण किया जाना चाहिए, यह भी फाइलों को हटा देगा .gitkeep जो भंडार में एक खाली फ़ोल्डर को संरक्षित करता है। उदाहरण के लिए। .gitignore फ़ोल्डर है uploads और रेपो को ट्रैक रखने के लिए मजबूर किया जाता है .gitkeep। रेपो से सभी को हटाकर uploads यह भी हटा देगा .gitkeep। - Vladimir Vukanac
नोट: नेस्टेड .gitignore फ़ाइलों के साथ काम नहीं करता है - acidjunk


साथ ही, यदि आपने संवेदनशील डेटा (जैसे पासवर्ड वाली फ़ाइल) का उपयोग किया है, तो आपको इसे रिपोजिटरी के इतिहास से पूरी तरह से हटा देना चाहिए। यहां एक गाइड है जो यह बताता है कि यह कैसे करें: http://help.github.com/remove-sensitive-data/


66
2017-08-21 12:16



इस उत्तर में किसी अन्य वेबसाइट से जोड़ने के बजाय इस कार्य को पूरा करने के लिए आवश्यक आदेश शामिल होना चाहिए। - Florian Lemaitre


मेरे उत्तर के अनुसार यहां: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

फ़ोल्डर / निर्देशिका या फ़ाइल को केवल गिट भंडार से निकालने के लिए और स्थानीय से नहीं, 3 सरल चरणों का प्रयास करें।


निर्देशिका को हटाने के लिए कदम

git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master

अगले फ़ोल्डर में उस फ़ोल्डर को अनदेखा करने के चरण

अगली प्रतिबद्धताओं से उस फ़ोल्डर को अनदेखा करने के लिए नामित रूट में एक फ़ाइल बनाएं .gitignore   और उस फ़ोल्डर का नाम उसमें डाल दें। आप जितना चाहें उतना डाल सकते हैं

.gitignore फ़ाइल इस तरह दिखेगी

/FolderName

remove directory


58
2017-08-24 12:16



जिज्ञासा से, आप धुंधला कैसे किया? - kmort
@kmort हाहा, मैंने इसे Google क्रोम ब्राउज़र के "विस्मयकारी स्क्रीनशॉट" टूल का उपयोग करके किया था, वास्तव में तेज़ था इसलिए मैसी लग रहा था। उसके लिए खेद है!! awesomescreenshot.com - eirenaios


एक और सामान्य समाधान:

  1. संपादित करें .gitignore फ़ाइल।

    ECHO mylogfile.log >> .gitignore

  2. इंडेक्स से सभी आइटम निकालें।

    git rm -r -f --cached .

  3. सूचकांक पुनर्निर्माण।

    git add .

  4. नई प्रतिबद्धता बनाएं

    git commit -m "Removed mylogfile.log"


54
2017-12-13 11:42



क्या यह वास्तव में फाइल को हटा देगा? - Mr_and_Mrs_D
गिटहब से? नहीं। यदि आप पहले ही जिथब पर धकेल चुके हैं तो यह इसे साइट से नहीं हटाएगा। लेकिन यह आपके स्थानीय गिट भंडार को अपडेट करेगा। - mAsT3RpEE
मुझे लगता है कि आप यह चाहते हैं: help.github.com/articles/remove-sensitive-data - mAsT3RpEE
आपके द्वारा हटाई गई टिप्पणी वास्तव में अधिक समाप्त हो गई थी :) समाधान के साथ समस्या rm --cashed यह है कि जब कोई खींचता है तो यह अंततः फ़ाइल को हटा देगा - है ना? और यह वही नहीं है जब लोग कहते हैं कि "भंडार से फ़ाइल निकालें इसे स्थानीय फाइल सिस्टम से हटाए बिना"अब ऊपर दिए गए समाधान को मेरे बाहर क्यों रखा गया था - शायद ओपी अकेले काम कर रहा था और कभी नहीं खींचा? डुनो। मैं समझता हूं कि" एक बार हमेशा वहां धकेल दिया जाता है "मुद्दा - Mr_and_Mrs_D
मेरी समस्या जिथूब नहीं है - यह वह है जब वे खींचते हैं तो फ़ाइल वास्तव में सहकर्मियों से हटा दी जाएगी। मैं नहीं फ़ाइल को हटाना चाहते हैं। इसने मुझे अतीत में बड़े मुद्दों का कारण बना दिया है। तो मैं सोच रहा था कि वास्तव में वास्तव में कोई समाधान है या नहीं नहीं करता फ़ाइल हटाएं। स्वीकृत उत्तर टिप्पणी टिप्पणी भी देखें: stackoverflow.com/questions/1143796/... - Mr_and_Mrs_D


गिट आपको उन फ़ाइलों को अनदेखा करके मानते हैं कि वे अपरिवर्तित हैं। इस   चलकर किया जाता है git update-index --assume-unchanged path/to/file.txt आदेश। एक बार फ़ाइल को चिह्नित करने के बाद, गिट होगा   उस फ़ाइल पर किसी भी बदलाव को पूरी तरह अनदेखा करें; वे कब दिखाई नहीं देंगे   गिट स्थिति या गिट diff चल रहा है, और न ही वे कभी प्रतिबद्ध किया जाएगा।

(से https://help.github.com/articles/ignoring-files)

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

नोट: यह सीधे सवाल का जवाब नहीं दे रहा है, लेकिन अन्य उत्तरों की टिप्पणियों में अनुवर्ती प्रश्नों पर आधारित है।


18
2018-01-28 11:46



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