पहले से मौजूद बड़ी संख्या में फ़ाइलों को ट्रैक करने वाले मौजूदा भंडार पर .ignignore को लागू करें


314

मेरी रिपॉजिटरी में एक मौजूदा विजुअल स्टूडियो प्रोजेक्ट है। मैंने हाल ही में अपनी परियोजना के तहत एक .gitignore फ़ाइल जोड़ी है और मेरा मानना ​​है कि Git को फ़ाइल में सूचीबद्ध फ़ाइलों को अनदेखा करना बताता है।

मेरी समस्या यह है कि उन सभी फ़ाइलों को पहले से ही ट्रैक किया जा रहा है और जहाँ तक मुझे पता है Git एक फ़ाइल को अनदेखा नहीं करेगा जो पहले से नज़र रखी गई थी एक नियम को इस फ़ाइल में अनदेखा करने के लिए जोड़ा गया था।

यह उपयोग करने का सुझाव दिया गया था: git rm --cachedऔर मैन्युअल रूप से उन्हें ट्रैक करें लेकिन वह मुझे हमेशा के लिए एक-एक करके जाने के लिए ले जा रहा है।

मैंने रिपॉजिटरी को हटाने और फिर से इसे फिर से बनाने के बारे में सोचा लेकिन इस बार .gitignore फाइल मौजूद है, लेकिन इसे करने का एक बेहतर तरीका होना चाहिए।


1
आप विकल्प के git rm --cachedसाथ पूरी निर्देशिका कर सकते हैं -r, अगर वह मददगार है
नाथन वालेस



जवाबों:


870

इस जवाब ने मेरी समस्या हल कर दी:

सबसे पहले, सभी लंबित परिवर्तन करें।

फिर इस कमांड को चलाएं:

git rm -r --cached .

यह सब कुछ सूचकांक से हटा देता है, फिर बस चलता है:

git add .

इसे प्रतिबद्ध करें:

git commit -m ".gitignore is now working"

9
एकदम सही जवाब! कृपया git push originदूरस्थ रिपॉजिटरी में परिवर्तनों को प्रतिबिंबित करने के लिए भी जोड़ें ।
संकटा बेर्दे

8
मैंने इस उत्तर का उपयोग करना शुरू कर दिया ... और इसने मेरी परियोजना में लगभग सब कुछ हटा दिया! जाहिर है कि मैं कुछ गलत कर रहा था। लेकिन मैं लोगों को आगाह करना चाहता हूं कि इस सुझाव का लापरवाही से पालन न करें।
मार्क ऑल्बर्ट

4
जब आप हटाते हैं और उन्हें फिर से जोड़ते हैं तो क्या यह फाइलों के लिए इतिहास खो देता है
अरन मुल्होलैंड

10
मुझे आश्चर्य है कि इस .gitignore is now workingसंदेश का उपयोग करने वाले कितने हैं । :)
ihavenoidea

1
इस विधि ने मेरे लिए अच्छा काम किया। मैंने एक gitignore फ़ाइल बनाई, एक पूरी निर्देशिका को अनदेखा किया, फिर gitignore बनाने के इस बदलाव के लिए प्रतिबद्ध किया। मैंने तब इन तीन आदेशों का पालन किया जैसा उन्होंने कहा था। यह पूरी तरह से काम करता है, लेकिन मुझे यह कहना चाहिए कि आपको "सभी लंबित परिवर्तनों को करना होगा" पहले जैसा कि ऊपर कहा गया है।
एरिक मीस्नरर

61
  1. A .ignignore फ़ाइल बनाएँ, ताकि आप कोई भी खाली .txt फ़ाइल बना सकें।

  2. फिर आपको इसका नाम बदलकर cmd पर निम्नलिखित पंक्ति लिखना होगा (जहाँ git.txtआपने अभी-अभी बनाई गई फ़ाइल का नाम है):

    rename git.txt .gitignore

  3. फिर आप फ़ाइल को खोल सकते हैं और उन सभी अनट्रैक फ़ाइलों को लिख सकते हैं जिन्हें आप अच्छे के लिए अनदेखा करना चाहते हैं। उदाहरण के लिए, मेरा ऐसा दिखता है:

`` `

OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

GitHub द्वारा उपयोगी .gitignore फ़ाइलों का एक पूरा संग्रह है

  1. एक बार जब आपके पास यह हो जाता है, तो आपको इसे किसी भी अन्य फ़ाइल की तरह अपने गिट रिपॉजिटरी में जोड़ना होगा, केवल इसे रिपॉजिटरी की जड़ में होना चाहिए।

  2. फिर अपने टर्मिनल में आपको निम्नलिखित पंक्ति लिखनी होगी:

    git config --global core.excludesfile ~ / .gitignore_global

Oficial डॉक्टर से:

आप एक वैश्विक .gitignore फ़ाइल भी बना सकते हैं, जो आपके कंप्यूटर पर हर Git रिपॉजिटरी में फ़ाइलों को अनदेखा करने के नियमों की एक सूची है। उदाहरण के लिए, आप फ़ाइल को ~ / .gitignore_global पर बना सकते हैं और उसमें कुछ नियम जोड़ सकते हैं।

टर्मिनल खोलें। अपने टर्मिनल में निम्न कमांड चलाएँ: git config --global core.excludesfile ~ / .gitignore_global

यदि रिपॉजिटरी पहले से मौजूद है तो आपको ये कमांड चलाने होंगे:

git rm -r --cached .
git add .
git commit -m ".gitignore is now working"

यदि चरण 2 काम नहीं करता है, तो आपको उन फ़ाइलों के छेद मार्ग को लिखना चाहिए जिन्हें आप जोड़ना चाहते हैं।


4
@Karen_Wiznia "git config ... _global" कंप्यूटर पर सभी Git repos के लिए एक वैश्विक gitingore बनाता है। ओपी ऐसा नहीं चाहता था।
ivan7707

काश मैं इसे एक से अधिक बार पसंद कर सकता, मैं लगातार इस सवाल पर वापस आता हूं जो इस अनुस्मारक की मांग करता है।
एंटनी

1
यह "नाम बदलें git.txt" .ignignore के बजाय "mv git.txt .gitignore" होना चाहिए।
अहमद एफ

30

यहाँ निर्दिष्ट के रूप में आप सूचकांक को अपडेट कर सकते हैं:

git update-index --assume-unchanged /path/to/file

ऐसा करने से, फ़ाइलों में git statusया नहीं दिखाई देगा git diff

फ़ाइलों को फिर से ट्रैक करने के लिए आप चला सकते हैं:

git update-index --no-assume-unchanged /path/to/file

5
यह बेहतर उत्तर है - यह केवल एकल फ़ाइल पर केंद्रित है, वह फ़ाइल जिसे आप रिपॉजिटरी द्वारा ट्रैक नहीं करना चाहते हैं। उच्चतम चिह्नित उत्तर भी काम करेगा, लेकिन यह एक फ़ाइल को ट्रैक करने से नज़रअंदाज़ करने की तुलना में बहुत अधिक है।
क्रिस मज्का

1
यह अच्छा है। लेकिन अगर हम खींच लें तो क्या होगा? क्या कोई मर्ज टकराव हैं?
प्रमोद

@ प्रमोद, महान प्रश्न। मैं बहुत पक्का नहीं हूँ। एक परीक्षण नीचे रिपॉजिटरी में यह कोशिश करो?
पैट्रिक जेम्स मैकडॉगल

15

यदि आपने अपना .gitignoreबहुत देर से जोड़ा है , तो git की परवाह किए बिना पहले से ही आरंभ की गई फ़ाइलों को ट्रैक करना जारी रखा जाएगा। इसे ठीक करने के लिए, आप हमेशा अवांछित फ़ाइलों के सभी कैश्ड इंस्टेंसेस को हटा सकते हैं।

सबसे पहले, यह जांचने के लिए कि आप वास्तव में किन फ़ाइलों को ट्रैक कर रहे हैं, आप चला सकते हैं:

git ls-tree --name-only --full-tree -r HEAD

मान लें कि आपको किसी निर्देशिका में अवांछित फ़ाइलें मिलीं cache/, जैसे कि आपकी सभी फ़ाइलों के बजाय उस निर्देशिका को लक्षित करना सुरक्षित है।

इसलिए इसके बजाय:

git rm -r --cached .

यह अवांछित फ़ाइल या निर्देशिका को लक्षित करने के लिए सुरक्षित है:

git rm -r --cached cache/

फिर सभी परिवर्तनों को जोड़ने के लिए आगे बढ़ें,

git add .

और प्रतिबद्ध ...

git commit -m ".gitignore is now working"

संदर्भ: https://amyetheredge.com/code/13.html


यह सबसे अच्छा और साफ जवाब है यदि आप केवल कुछ फ़ाइलों को निकालना चाहते हैं, न कि संपूर्ण रिपॉजिटरी को। मैं तुम्हें अपना अंगूठा देता हूं।
एपिग

2

यहाँ किसी भी फाइल को "अनट्रैक" करने का एक तरीका है, जिसे अन्यथा बाहर रखे गए पैटर्न के मौजूदा सेट के तहत अनदेखा किया जाएगा:

(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --

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

यहाँ इस्तेमाल की जाने वाली ट्रिक को गैर-मौजूद इंडेक्स फाइल को gs ls-files को उपलब्ध कराना है ताकि यह सोचे कि इसमें कोई ट्रैक की गई फाइल नहीं है। ऊपर दिया गया शेल कोड उन सभी फ़ाइलों के लिए पूछता है जिन्हें अनदेखा किया जाएगा यदि सूचकांक खाली थे और फिर उन्हें वास्तविक सूचकांक से grm के साथ हटा दिया।

फ़ाइलों के "अनट्रैक" होने के बाद, यह सत्यापित करने के लिए गिट स्थिति का उपयोग करें कि कुछ भी महत्वपूर्ण नहीं हटाया गया था (यदि ऐसा है तो अपने बहिष्कृत पैटर्न को समायोजित करें और हटाए गए अनुक्रमणिका प्रविष्टि को पुनर्स्थापित करने के लिए गिट रीसेट - पथ का उपयोग करें)। फिर एक नया कमिट करें जो "क्रूड" को छोड़ देता है।

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


एक ठोस समाधान की तरह लगता है :) मुझे लगता है कि यह लिनक्स शेल के लिए सही है? दुर्भाग्य से मैं एक Win7 उपयोगकर्ता हूं। किसी भी तरह से मैं खिड़कियों में यह कर सकता हूं?
Tohid

0

मचान क्षेत्र से फ़ाइलें निकालें

git reset HEAD .

सभी परिवर्तन जोड़ें

git add .

इसे प्रतिबद्ध करें:

git commit -m ".gitignore is now working"

-1

मुझे लगता है कि मौजूदा रिपॉजिटरी में .gitignore फ़ाइल को जोड़ने का यह एक आसान तरीका है।

शर्त :

आपको अपने github खाते तक पहुंचने के लिए एक ब्राउज़र की आवश्यकता है।

कदम

  1. अपनी आवश्यक (मौजूदा) परियोजना में एक नई फ़ाइल बनाएं और इसे .गितिग्नोर नाम दें । जैसे ही आप फ़ाइल को .गितिग्नोर नाम देते हैं, आपको .ignignore टेम्पलेट के लिए विचारोत्तेजक संकेत मिल जाएगा । या तो इन टेम्प्लेट का उपयोग करें या अपनी gitignore फ़ाइल की सामग्री उत्पन्न करने के लिए gitignore.io का उपयोग करें ।
  2. परिवर्तन करें।
  3. अब इस भंडार को क्लोन करें।

मज़े करो!


-3

git clean
इस चलाने पर सहायता प्राप्त करें का उपयोग करें

git clean -h

यदि आप यह देखना चाहते हैं कि पहले क्या होगा, तो सूखे रन के लिए एन स्विच को पास करना सुनिश्चित करें:

git clean -xn

Gnnored कचरा हटाने के लिए

git clean -xdf

सावधान: आप डेटाबेस की तरह स्थानीय कॉन्फिग फाइलों को अनदेखा कर रहे होंगे। यह भी हटाया जाएगा। अपने जोखिम पार इस्तेमाल करें।

फिर

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