Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

Git "Cannot open .git/FETCH_HEAD: Permission denied" समाधान

Cannot open .git/FETCH_HEAD: Permission denied

Git रिपॉजिटरी में .git/ नामक एक विशेष फ़ोल्डर होता है। आपने यह फ़ोल्डर नहीं देखा होगा क्योंकि यह छिपा हुआ है। इस फ़ोल्डर की छिपी हुई स्थिति फ़ोल्डर नाम की शुरुआत में आने वाले फुल स्टॉप (".") द्वारा दर्शाई जाती है।

यह फ़ोल्डर रिपॉजिटरी के बारे में मेटाडेटा के विभिन्न टुकड़ों को समाहित करता है। यह आपके प्रोजेक्ट-विशिष्ट कॉन्फिगरेशन विकल्पों, आपके प्रोजेक्ट में रेफरेंस, आपके वर्तमान HEAD, और आपके रिपॉजिटरी के बारे में अन्य महत्वपूर्ण जानकारी को ट्रैक करता है।

Git को इस फ़ोल्डर पर पढ़ने और लिखने की पहुंच की आवश्यकता होती है। ऐसा इसलिए है क्योंकि जब आप git config और git pull जैसे कमांड चलाते हैं तो इसकी सामग्री बदल जाएगी।

एक उदाहरण परिदृश्य

हम GitHub से ck-git नामक एक रिपॉजिटरी को क्लोन करने जा रहे हैं। इस रिपॉजिटरी में README.md नामक एक फ़ाइल है। इस रिपॉजिटरी को क्लोन करने के लिए, हम git clone कमांड का उपयोग कर सकते हैं:

sudo git clone https://github.com/Career-Karma-Tutorials/ck-git

हमारी README.md फ़ाइल की सामग्री वर्तमान में है:

# ck-git

हम इस फ़ाइल को अधिक वर्णनात्मक README.md रखने के लिए बदलना चाहते हैं। हम इस फ़ाइल को टेक्स्ट एडिटर में खोलने जा रहे हैं और इसकी सामग्री को निम्नलिखित में बदल देंगे:

# Career Karma Git Demo
A repository with demo files for Career Karma's Git tutorials.

यह बेहतर है। हमारी फ़ाइल अब हमारे Git रिपॉजिटरी के उद्देश्य का अधिक सटीक वर्णन करती है। अब, आइए इस परिवर्तन को स्टेजिंग एरिया में जोड़ें ताकि हम एक कमिट बना सकें:

sudo git add README.md

Git जानता है कि हम README.md को अपने अगले कमिट में जोड़ना चाहते हैं। अपने परिवर्तनों को अपने रिमोट रिपॉजिटरी में दिखाने के लिए, हमें उन्हें एक कमिट में जोड़ना होगा:

sudo git commit -m "docs: Make README.md more descriptive"

हमारा कमिट अब हमारे रिमोट रिपॉजिटरी में पुश करने के लिए तैयार है। अपना कोड पुश करने से पहले, हम अपने रिपॉजिटरी के रिमोट वर्जन को पुल करने जा रहे हैं। यह हमें यह सुनिश्चित करने देगा कि हम उन परिवर्तनों के साथ अद्यतित हैं जो हमारे रिपॉजिटरी को क्लोन करने के बाद से किए गए हैं:

git pull

यह कमांड वापस लौटाता है:

error: cannot open .git/FETCH_HEAD: Permission denied

यह त्रुटि हमें बताती है कि Git अपनी कॉन्फिगरेशन फ़ाइलों में से एक, FETCH_HEAD तक नहीं पहुंच सकता।

समाधान

हमने "sudo" कमांड का उपयोग करके ck-git रिपॉजिटरी को क्लोन किया। इसका मतलब है कि हमारा रिपॉजिटरी रूट यूजर के रूप में क्लोन किया गया था। क्योंकि रूट यूजर ने रिपॉजिटरी को क्लोन किया, रिपॉजिटरी में फ़ाइलें रूट यूजर के स्वामित्व में हैं।

हम इसे ls -la कमांड चलाकर देख सकते हैं:

total 8
drwxr-xr-x 4 root staff 128 Sep 17 07:15 .
drwxr-xr-x+ 90 James staff 2880 Sep 17 07:15 ..
drwxr-xr-x 12 root staff 384 Sep 17 07:15 .git
-rw-r--r-- 1 root staff 1 Sep 17 07:15 README.md

हमारे फ़ोल्डर में सभी फ़ाइलें "रूट" के स्वामित्व में हैं, जो "स्टाफ" खाते का हिस्सा है। जब हम "sudo" का उपयोग किए बिना अपने रिमोट रिपॉजिटरी को पुल करने का प्रयास करते हैं, तो एक त्रुटि वापस आती है। ऐसा इसलिए है क्योंकि हमारे मानक यूजर खाते में फ़ोल्डर में फ़ाइलों को संशोधित करने की अनुमति नहीं है।

इस समस्या को ठीक करने के लिए, हम अपने फ़ोल्डर में फ़ाइलों के स्वामित्व को बदलने जा रहे हैं। हम chown कमांड का उपयोग करके ऐसा कर सकते हैं:

sudo chown -R james:staff .

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

git pull

यह कमांड सफलतापूर्वक निष्पादित होता है और वापस लौटाता है:

Already up to date.

अब हम जानते हैं कि हमारे रिमोट रिपॉजिटरी में कोई परिवर्तन नहीं किया गया है क्योंकि हमने आखिरी बार अपना कोड पुल किया था। हमने आखिरी बार कोड तब पुल किया था जब हमने रिपॉजिटरी बनाई थी।

निष्कर्ष

Git "Cannot open .git/FETCH_HEAD: Permission denied" त्रुटि तब होती है जब आप रिमोट रिपॉजिटरी से कोड पुल करने का प्रयास करते हैं जब आपके प्रोजेक्ट फ़ोल्डर में .git/ निर्देशिका आपके वर्तमान यूजर के लिए दुर्गम होती है।

इस त्रुटि को हल करने के लिए, सुनिश्चित करें कि आपके वर्तमान यूजर के पास उस Git रिपॉजिटरी पर पढ़ने-लिखने का विशेषाधिकार है जिसके साथ आप काम कर रहे हैं।

  1. Git Reset: कमिट पूर्ववत करने की पूरी गाइड Git Reset: कमिट पूर्ववत करने की पूरी गाइड

    Git का ट्रैकिंग तंत्र git reset पर जाने से पहले, हमें git की अंतर्निहित संरचना को समझने की आवश्यकता है। Git नोड्स और पॉइंटर्स के साथ ट्री-जैसी संरचनाओं के माध्यम से फ़ाइलों को प्रबंधित और ट्रैक करता है। आपके स्थानीय git रिपॉजिटरी पर मूल रूप से इन तीन ट्रीज़ हैं: वर्किंग डायरेक्टरी: या वर्किंग ट्री,

  1. Git और GitHub के साथ शुरुआत कैसे करें Git और GitHub के साथ शुरुआत कैसे करें

    GitHub वर्तमान में ओपन-सोर्स प्रोजेक्ट्स का दुनिया का सबसे बड़ा होस्ट है। GitHub पेज के कई लोकप्रिय उदाहरण हैं जिनमें Atom टेक्स्ट एडिटर, Google द्वारा TensorFlow और Facebook द्वारा React शामिल हैं। यह Big Data, Artificial Intelligence या Internet of Things पर उन्नत परियोजनाओं को रखने के लिए सबसे अच

  1. - कमांड-लाइन सर्वोत्तम प्रथाओं के साथ अपने ओपन-सोर्स रिपॉजिटरी में महारत हासिल करें

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