Gitignore काम नहीं कर रहा है


274

मेरी .gitignoreफ़ाइल किसी कारण से काम नहीं कर रही है, और Googling की कोई भी राशि इसे ठीक करने में सक्षम नहीं है। यही सब कुछ मेरे पास है:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

यह निर्देशिका में है master, जो कि मेरा git रेपो है। मैं Git 1.8.4.2 चला रहा हूं क्योंकि मैं MacBook OSX 10.8.6 पर चल रहा हूं।


4
1. क्या फ़ाइलों को अनुक्रमित किया जाता है, हालांकि उन्हें नहीं करना चाहिए? 2. जब आप इन फ़ाइलों को रेपो में जोड़ते हैं तो आपने .gitignore को जोड़ा था?
अहमद

2
@ कई प्रोजेक्ट में /bin/फ़ोल्डर तब भी दिखाई देता है जब मैं करता हूं git status। मैंने उन फ़ाइलों को नहीं बदला है जब से मैंने.gitignore
user3280133

1
"चूंकि मैंने .gitignore को जोड़ा है" - इसलिए आपने फ़ाइलों को जोड़ने के बाद .gitignore को जोड़ा है?
अहमद

3
संभव नहीं डुप्लिकेट। नॉटिग्नोर काम नहीं कर रहा है
Liam

जवाबों:


683

आपके संस्करण नियंत्रण में मौजूद फ़ाइलें / फ़ोल्डर केवल स्वयं को केवल इसलिए नहीं हटाएंगे क्योंकि आपने उन्हें इसमें जोड़ा था .gitignore। वे पहले से ही भंडार में हैं और आपको उन्हें निकालना होगा। आप इसके साथ बस इतना कर सकते हैं:

( ऐसा करने से पहले आपने जो कुछ भी बदला है, उसे याद रखना। )

git rm -rf --cached .
git add .

यह रिपॉजिटरी से सभी फाइलों को हटा देता है और उन्हें वापस जोड़ता है (इस समय आपके नियमों का सम्मान करते हुए .gitignore)।


2
या आप उन फ़ाइलों / फ़ोल्डरों को पुनः प्राप्त करने का प्रयास कर सकते हैं, जिन्हें आपने .itignore में git checkout folder_to_ignore / * का उपयोग करके जोड़ा है
Zahra

1
@Greenish लेकिन यह है कि अगर वे पहले से प्रतिबद्ध किया गया है काम नहीं होगा, केवल काम अगर वे किया गया है का मंचन किया जाएगा, जिस स्थिति में फ़ोल्डर पहले से ही था में .gitignore ऐसा नहीं होना चाहिए (जब तक आप ऐड मजबूर) :)
अहमद

1
मेरे लिए काम नहीं करता है जब मैं परिवर्तन को धक्का देता हूँ। कहते हैं सब कुछ अप टू डेट है !!!!
डॉ। यूनिस हेन्नी

1
क्षमा करें, अहमद मैंने gitignore फाइल को डिलीट करके और रिमोट रेपो पर फिर से खींच कर अपना मुद्दा ठीक किया। मुझे अब याद नहीं है कि जब मैंने git स्टेटस टाइप किया था तो उसने क्या कहा था। मेरा मुद्दा तय हो गया है। बहुत बहुत धन्यवाद।
डॉ। युनूस हेंनी

3
मुझे लगता है कि इसे बेहतर बनाने के लिए 'git अनदेखा' कमांड जोड़ना बेहतर है। इस प्रकार हम git ignore path/fileकभी भी उपयोग कर सकते हैं ।
तिवारी

123

एक ऐसी फ़ाइल को अनट्रैक करने के लिए जो पहले से ही आपकी रिपॉजिटरी में जोड़ी गई है / आरंभिक है, यानी फ़ाइल को ट्रैक करना बंद करें लेकिन इसे अपने सिस्टम के उपयोग से हटाएं नहीं: git rm --cached filename

अब आपके पास मौजूद प्रत्येक फ़ाइल को अनट्रैक करने के लिए .gitignore:

पहले कोई भी बकाया कोड परिवर्तन करें, और फिर यह कमांड चलाएँ:

git rm -r --cached .

यह इंडेक्स (स्टेजिंग एरिया) से किसी भी बदली हुई फाइल को हटा देता है, फिर बस चलाएं:

git add .

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

git commit -m ".gitignore is now working"

अपनी शाखाओं को फिर से मास्टर करने या अपने पॉइंटर को स्थानांतरित करने के लिए सुनिश्चित करें क्योंकि जब मैंने यह कोशिश की तो मैंने अपनी दोनों फीचर शाखाओं को खो दिया। सौभाग्य से मैंने कोई काम नहीं खोया, मेरे कामकाजी शाखा से हाल के सभी अपडेट मास्टर शाखा में रीसेट किए गए थे लेकिन आपके सेटअप के आधार पर यह व्यवहार अवांछनीय हो सकता है।
स्लेज करें

फ़ाइल के बजाय कैश से फ़ोल्डर हटाने के लिए आप इस कमांड का उपयोग कैसे करेंगे?
RealMJDev

15

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

  1. फ़ाइल को काटें और पेस्ट करें (मैं) अब एक अस्थायी स्थान में ट्रैक नहीं करना चाहता

  2. उन फ़ाइलों का "विलोपन" करें

  3. .gitignoreअस्थायी रूप से स्थानांतरित की गई फ़ाइलों को बाहर करने के लिए एक संशोधन करें

  4. फ़ाइलों को फ़ोल्डर में वापस ले जाएं।

मुझे इसके बारे में जाने के लिए सबसे सीधा आगे का रास्ता मिला (कम से कम एक दृश्य स्टूडियो में, या मैं अन्य IDE हीट आधारित वातावरण को एंड्रॉइड स्टूडियो की तरह मानूंगा), गलती से अपने आप को पैर में गोली मारकर खुद को गोली मार सकता है git rm -rf --cached ., जिसके बाद मैं जिस स्टूडियो में काम कर रहा था वह दृश्य स्टूडियो लोड नहीं था।


2
मुझे यह दृष्टिकोण बहुत पसंद है - कम विनाशकारी लगता है, भले ही इसे "उचित" न माना जाए।
वेइतिमान

6

मेरे मामले में यह फ़ाइल की शुरुआत में एक रिक्त स्थान था जो मैंने नोटपैड में फ़ाइल खोलने पर स्पष्ट रूप से दिखाया था, विज़ुअल स्टूडियो कोड में स्पष्ट नहीं था।


4

मैंने अपने लिए सामान्य उत्पन्न करने के लिए कुछ का उपयोग किया .gitignoreऔर मैं इसमें भाग गया। @ ओजेश उत्तर को पढ़ने के बाद मैंने वीएस कोड में खोला क्योंकि इसमें नीचे दायीं ओर लाइन एंडिंग दिखाते हुए एक अच्छा संकेतक है। यह LF था इसलिए मैंने सुझाव के रूप में CRLF में बदल दिया लेकिन कोई पासा नहीं।

फिर मैंने लाइन एंडिंग के बगल में देखा और देखा कि यह UTF16 का उपयोग करके बचाया गया था। इसलिए मैंने यूटीएफ 8 का उपयोग करके एक वॉयस एन्कोडिंग का उपयोग किया, यह काम किया। मुझे नहीं लगा कि CRLF ने कोई बात की इसलिए मैंने इसे LF में बदल दिया ताकि यह सुनिश्चित हो सके और यह अभी भी काम कर सके।

बेशक यह ओपी मुद्दा नहीं था क्योंकि वह पहले से ही फाइलों को प्रतिबद्ध कर चुका था, इसलिए वे पहले से ही अनुक्रमित थे, लेकिन मुझे लगा कि मैं इस मामले में किसी और को चुरा लूंगा।

TLDR ; यदि आपने पहले से ही फाइल को कमिट नहीं किया है और .ignignore का अभी भी सम्मान नहीं किया जा रहा है, तो फाइल एन्कोडिंग की जांच करें और सुनिश्चित करें कि इसका UTF8 है और यदि यह काम नहीं करता है, तो हो सकता है कि लाइन एंडिंग में गड़बड़ी की कोशिश करें।


1
UTF16 मेरे लिए अपराधी था। खुला वी.एस. कोड> खोला गया। नितिनगोर> ने कमांड प्रॉम्प्ट खोला> "फ़ाइल बदलें एन्कोडिंग"> "UTF-8"> फ़ाइल सहेजें
माइकल

3

मेरे मामले में .itignore की तर्ज पर व्हाट्सएप कारण था। तो .gitignore में व्हाट्सएप के लिए बाहर देखो!


1

मैंने अपनी समस्या को निम्न हल किया:

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

एक साधारण कारण है कि कभी-कभी .gitignore काम नहीं करता है, जैसे कि यह माना जाता है। यह ईओएल रूपांतरण व्यवहार के कारण है।

यहाँ इसके लिए एक त्वरित सुधार है

संपादन> ईओएल रूपांतरण> विंडोज प्रारूप> सहेजें

आप इसके लिए अपनी टेक्स्ट एडिटर सेटिंग को दोष दे सकते हैं ।

उदाहरण के लिए:

जैसा कि मैं एक विंडोज़ डेवलपर हूं, मैं आमतौर पर विम उपयोगकर्ताओं के विपरीत अपने पाठ को संपादित करने के लिए नोटपैड ++ का उपयोग करता हूं।

तो क्या होता है, जब मैं Notepad ++ का उपयोग करके अपनी .gitignore फ़ाइल खोलता हूं, तो यह कुछ इस तरह दिखाई देती है:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

यदि मैं डिफ़ॉल्ट नोटपैड का उपयोग करके उसी फ़ाइल को खोलता हूं, तो यह वही है जो मुझे मिलता है

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

तो, आप आउटपुट को देखकर पहले ही अनुमान लगा सकते हैं। .Gitignore में सब कुछ एक लाइनर बन गया है, और चूंकि शुरुआत में ## है, यह ऐसा काम करता है जैसे कि सब कुछ टिप्पणी की गई हो।

इसे ठीक करने का तरीका सरल है: बस नोटपैड ++ के साथ अपनी .gitignore फ़ाइल खोलें, फिर निम्न कार्य करें

संपादन> ईओएल रूपांतरण> विंडोज प्रारूप> सहेजें

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


1

इसके अलावा, टिप्पणियों को अपनी लाइन पर होना चाहिए। उन्हें एक प्रविष्टि के बाद नहीं रखा जा सकता है। तो यह काम नहीं करेगा:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

लेकिन यह काम करेगा:

# fine to comment here
/node_modules

0

किसी git reset --hardके लिए काम करता है? मैं यह नहीं कह रहा हूं कि यह एक अच्छा समाधान है, यह सिर्फ पहली बार मैंने कोशिश की काम करने के लिए लग रहा था।


कृपया मेरी टिप्पणी को अनदेखा करें। काम पर किसी ने Git में कुछ गलत किया, इससे डुप्लिकेट फ़ोल्डर बन गए और मैं काफी समय से अवगत नहीं था। धन्यवाद।
user1889992

0

मैंने अपने डॉकटराइन को संपादित करने की बड़ी गलती की, मुझे सही इग्नोर की गई फाइल: पी के बाद बहुत अच्छा लगा


0

मेरा बिट जोड़ना क्योंकि यह एक लोकप्रिय प्रश्न है।

मैं .history निर्देशिका को अंदर नहीं रख सकता। क्योंकि कोई भी बात नहीं है कि मैंने कौन सी कॉम्बो की कोशिश की, यह काम नहीं किया। विंडोज हर सेव पर नई फाइल जेनरेट करता रहता है और मैं ये बिल्कुल नहीं देखना चाहता।

यहां छवि विवरण दर्ज करें

लेकिन तब मुझे एहसास हुआ, यह मेरी मशीन पर सिर्फ व्यक्तिगत विकास का माहौल है। .History या .vscode जैसी चीजें मेरे लिए विशिष्ट हैं, इसलिए यह अजीब होगा अगर हर कोई अपनी खुद की .itignore प्रविष्टियों को शामिल करता है जो आईडीई या ओएस के आधार पर उपयोग कर रहे हैं।

तो यह मेरे लिए काम करता है, बस ".history" को .it / info / बहिष्कृत करें

echo ".history" >> .git/info/exclude
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.