फ़ाइल का अनलिंक विफल हुआ


169

मैं एक पुल खींचने की कोशिश कर रहा हूं और मुझे निम्नलिखित त्रुटि मिलती है:

फ़ाइल 'lib / xxx.jar' का अनलिंक विफल रहा। क्या मुझे फिर से कोशिश करनी चाहिए? (Y n)

कोई फर्क नहीं पड़ता अगर मैं y या n का चयन करता हूं तो ऐसी स्थिति में पहुंचना संभव नहीं है जहां मैं खींच या धक्का दे सकता हूं।


क्या आपने जांचा कि क्या आपके पास उस फ़ाइल को लिखने के अधिकार हैं?
राफेल मिशेल

1
दाईं ओर chmodऔर / या chownउक्त फ़ाइल चलाएं ।
Not_a_Golfer

मेरे पास अधिकार होना चाहिए, अन्यथा मैं इसे चोद / चोद दूंगा!
मार्को


जवाबों:


204

आमतौर पर इसका मतलब है कि एक प्रक्रिया अभी भी उस विशिष्ट फ़ाइल का उपयोग कर रही है (अभी भी उस पर एक हैंडल है)
(विंडोज पर, ProcessExplorerउस तरह की प्रक्रिया को ट्रैक करने में अच्छा है)

अपने अन्य कार्यक्रमों को बंद करने का प्रयास करें, और फिर से अपना प्रयास करें git pull

ध्यान दें कि आपके पास GIT_ASK_YESNOचर के साथ एक विकल्प है ।


अपडेट जनवरी 2019:

Git 2.21 (Q1 2019) के साथ यह और भी अधिक निश्चित होना चाहिए, क्योंकि " git gc" और " git repack" ने खुले पैकेट को बंद नहीं किया था जो उन्हें हटाने से पहले अनावश्यक पाया गया था, जो एक खुली फाइल को हटाने में असमर्थ मंच पर काम नहीं करता था।
इसे सुधारा गया।

देखें प्रतिबद्ध 5bdece0 द्वारा (15 दिसंबर 2018) जोहानिस Schindelin ( dscho)
(द्वारा विलय Junio सी Hamano - gitster- में 5104f8f प्रतिबद्ध , 18 जनवरी 2019)

gc/ repack: रिलीज पैक जब जरूरत

विंडोज पर, फ़ाइलों को हटाया नहीं जा सकता है और न ही नाम बदला जा सकता है अगर कोई प्रक्रिया अभी भी संभालती है।
उस उपाय को करने के लिए, हमने close_all_packs()फंक्शन की शुरुआत की ।

इससे पहले, हमने यह सुनिश्चित किया है कि पैक को रिहा करने से ठीक पहले रिलीज़ किया git gcजाता है, ऐसे मामलों में जो gcअब और आवश्यक पैक को निकालना चाहते हैं।

लेकिन यह डेवलपर भूल गया कि विकल्प के gcमाध्यम से सभी पैक्स को समेकित करते समय खुद को भी पैक्स को जाने देना चाहिए --aggressive

इसी तरह, git repack -dअप्रचलित पैक को हटाना चाहता है और इसलिए सभी पैक हैंडल को भी बंद करने की आवश्यकता है।


अपडेट जनवरी 2016

इसे Git 2.8 (मार्च 2016) में ठीक किया जाना चाहिए (और नीचे Git 2.19, Q3 2018 देखें)

देखें d562102 प्रतिबद्ध , dcacb1b प्रतिबद्ध , df617b5 प्रतिबद्ध , प्रतिबद्ध 0898c96 से (13 जनवरी 2016) जोहानिस Schindelin ( dscho)
( जूनियो सी gitsterहमानो द्वारा विलय - - में ३ सी ,० ९ ४० , २६ जनवरी २०१६)

fetch: कचरा एकत्र करने से पहले पैक फाइल जारी करें

ऑटो-gc'ing से पहले, हमें यह सुनिश्चित करने की ज़रूरत है कि पैक फ़ाइलों को रिहा करने और कचरा एकत्र करने की आवश्यकता के मामले में जारी किया जाए।

कई कोडपाथ जो कि पैकफाइल्स को gc --autoबाहर रखने से पहले " " चलते हैं और फाइल डिस्क्रिप्टर को खुला छोड़ देते हैं, जो उन प्रणालियों के अनुकूल नहीं था जो खुली हुई फाइलों को नहीं निकाल सकते।
अब वे ऐसा करने से पहले पैक्स को बंद कर देते हैं।

वह फिक्स git-for-widows500 जारी करता है ।

उस नए दृष्टिकोण को मान्य करने के लिए उपयोग किए जाने वाले परीक्षण को देखते हुए , एक संभावित वर्कअराउंड (चूंकि जीआईटी 2.8 अभी तक बाहर नहीं है) कृत्रिम रूप से उठाना होगा gc.autoPackLimit

git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value

git 2.8.4 (जून 2016) में 755 मुद्दे का उल्लेख है जो इस मुद्दे को कम करना चाहिए ( 2db0641 पर ):

सुनिश्चित करें कि अस्थायी फ़ाइल हैंडल बच्चे प्रक्रियाओं द्वारा विरासत में नहीं मिले हैं


वास्तव में, ऊपर उल्लेख किया गया git-for-windowsमुद्दा 500 वास्तव में Git 2.19, Q3 2018
के साथ तय किया गया है। देखें " Git - फाइल की अनलिंक .idxऔर .packविफल (इस फाइल का एकमात्र प्रक्रिया स्वामित्व हैंडल है git.exe) "


5
सबसे अधिक संभावना है कि उस जार-फ़ाइल का उपयोग करके एक जेवीएम चल रहा है।
थोर्बोजर्न रेवन एंडरसन

2
मेरे मामले में यह स्काइप था। मैंने पहले फ़ाइल दूसरों को हस्तांतरित की थी और कुछ ने अभी तक स्वीकार या रद्द नहीं किया था।
विवेक कोडिरा

6
मैंने विंडोज एक्सप्लोरर को दोषी पाया। TortoiseGit के आइकन ओवरले या TGitCache के कारण यह सबसे अधिक संभावना थी। सभी खुले फ़ोल्डरों को बंद करने का काम किया, लेकिन आपको केवल प्रोजेक्ट फ़ोल्डर को बंद करने की आवश्यकता हो सकती है यदि वह खुला हो।
एलन बोग

4
मेरे मामले में यह VS2013 था क्योंकि यह खुले समाधान के लिए बाध्य था।
ब्रदरऑन

2
Explorer.exe मेरी समस्या थी - मेरे पास TortoiseGit नहीं है। मैंने टास्क मैनेजर से एक्सप्लोरर को मार डाला और CTRL-ALT-DELETE => टास्क मैनेजर => फ़ाइल => रन न्यू टास्क => "एक्सप्लोरर।
Exe

57

यह एक विंडोज विशिष्ट उत्तर है, इसलिए मुझे पता है कि यह आपके लिए प्रासंगिक नहीं है ... मैं भविष्य के खोजकर्ताओं के लाभ के लिए इसे शामिल कर रहा हूं।

मेरे मामले में, यह इसलिए था क्योंकि मैं गैर-एलिवेटेड कमांड लाइन से गिट चला रहा था। "Run as Administrator" ने इसे मेरे लिए तय किया।


4
मैंने इस समस्या को विंडोज 7 पर मारा जब एक पुल और गिट ने एक ऑटो पैक किया। इसने "आईडीएक्स" फाइलों पर शिकायत की। मैंने तब एक व्यवस्थापक के रूप में एक कंसोल विंडो खोली और एक git gc चलाया और कोई समस्या नहीं थी। तो यह एक अच्छा उपाय है।
ग्रहमैड्स

1
git gc ने विंडोज 7 पर मेरे लिए यह किया है। यह हुआ b / c मैं WebStorm पर एक पुश करते हुए cmder पर एक git पुल कर रहा था
Alessandro

2
वाह। धन्यवाद नील इसने मेरे लिए भी इसे ठीक कर दिया। GIT को Windows में थोड़ा और पोर्ट करना अच्छा होगा।
मार्टिन डोबिक

खैर ... 6 साल पहले इसकी जरूरत थी। अभी? कौन जानता है? ¯_ (¯) _ / ¯
नील जूल

30

मेरे लिए, ऐसा इसलिए था क्योंकि विजुअल स्टूडियो पुल से परिवर्तित सभी फाइलों को फिर से लोड करने की कोशिश कर रहा था। विज़ुअल स्टूडियो ताज़ा करें, फिर चलाएं git gc


3
मेरे लिए भी ऐसा ही है। Git gc चलाने से पहले ग्रहण को बंद करने की आवश्यकता है।
अल्फोकस

5

Windows के लिए GitHub का उपयोग करने पर, मुझे चलाते समय शेल में एक समान त्रुटि मिली git gc:

Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)

मैंने इसे GitHub GUI को बंद करके हल किया।


2

अपाचे या अन्य वेब सर्वर को पुनः आरंभ करने का प्रयास करें क्योंकि हो सकता है कि उसने आपकी कुछ फाइलों को लॉक कर दिया हो।


2

बंद विजुअल स्टूडियो और रुबाइन और फिर से त्रुटि नहीं हुई। उनमें से एक अपराधी था।



1

मुझे भी यह समस्या है, लेकिन मुझे पता चला कि यह अल्ट्राएडिट था, क्योंकि मैंने अपने ग्रहण कार्यक्षेत्र को व्यवस्थित करने और संपादित करने के लिए UE का उपयोग किया था ~~

शायद इसलिए कि UE के पास विशिष्ट फ़ाइल के पुराने संस्करण पर एक हैंडल है, Git इसे अनलिंक नहीं कर सका।

मैंने UltraEdit को बंद करने के बाद, समस्या फिर कभी नहीं हुई।



0

समस्या यह है क्योंकि आप इन फ़ाइलों को संभालने वाले कुछ प्रोग्राम कर रहे हैं। मेरा एक सुझाव है कि आपको उस प्रोग्राम को खोजने के लिए अनलॉकर का उपयोग करना चाहिए जो इसे संभाल रहा है:

Unlocker


0

मैंने विंडोज एक्सपी पर ऐसा किया है, दोनों एक लूप में अटके संदेश के साथ, और रिप्लाई करके क्लियर किया जा सकता है।

Git-GUI को बंद करने से अटकी लूप घटना साफ हो गई। (मैं बैश शेल में git मर्ज -i चला रहा था।)

मेरी रिपॉजिटरी में बड़ी संख्या में फाइलों के कारण संभवतः अन्य घटनाएं हुईं। यह मुख्य रूप से .cod फ़ाइलों के साथ हुआ, जिसे मैंने बाद में संस्करण नियंत्रण से बाहर कर दिया। (मेरे पास उन्हें ट्रैक करने के लिए एक कारण है।) मेरा मानना ​​है कि कारण उस दर से संबंधित हो सकता है जिस पर Git फ़ाइल हैंडल का उपयोग करता है।

मुझे आश्चर्य है कि अगर सक्षम-टू-क्लियर-बाय-रिप्लाई समस्या विंडोज से संबंधित है, जैसा कि पिछले दो पोस्टरों ने विंडोज का उल्लेख किया है, और किसी ने भी नहीं कहा है कि उन्हें अन्य ऑपरेटिंग सिस्टम के साथ समस्या है।


0

मेरे पास PHPStorm खुला था, वह बंद था और सब कुछ ठीक था।


0

मेरे पास एक ही मुद्दा था और मैंने विंडो टास्क मैनेजर से संबंधित सभी कार्यक्रमों को बंद कर दिया। हालाँकि, यह अभी भी काम नहीं कर रहा था। दिलचस्प बात यह है कि मैंने "गिट पुल" के बजाय "गिट रीबेस" चलाया और यह काम किया!


0

उपरोक्त में से कोई भी उत्तर मेरे लिए काम नहीं करेगा, लेकिन मैं git gc कमांड को बल विकल्प के साथ चलाता हूं, और इसने मेरे मामले को हल कर दिया।

'git gc --force'

[विंडोज 7, प्रशासक के रूप में चलाएँ => कमांड प्रॉम्प्ट]


0

प्रशासनिक मोड में कमांड लाइन संपादक चलाने की कोशिश करें और कमांड चलाएं। यह समस्या को हल करने और हल करने में मदद करता है। :)


0

मेरे मामले में मेरे पास टैग करने का एक पुराना तरीका था जिससे समस्या पैदा हुई। मैंने इसे मूल को परेशान करके हल किया:

git config --global --unset remote.origin.fetch '\+refs/tags/\*:refs/tags/\*'

फिर सर्वर पर हटाए गए शाखाओं को prune करने के लिए इसे जोड़ना:

git config --global fetch.pruneTags true

0

मैंने उसी त्रुटि का सामना किया और इसे ग्रहण को बंद करके और फिर से खींच लिया क्योंकि फाइल का उपयोग किया जा रहा था।

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