गिट को आपके प्रोजेक्ट फ़ोल्डर के अंदर .git/ नामक निर्देशिका में फ़ाइलों पर लिखने की अनुमति की आवश्यकता है। यदि Git कमांड लाइन की इस फ़ोल्डर तक पहुंच नहीं है, तो जब आप किसी फ़ाइल को खींचने का प्रयास करते हैं, तो आपको ".git/FETCH_HEAD:अनुमति अस्वीकृत" जैसी त्रुटि का सामना करना पड़ेगा।
इस गाइड में, हम चर्चा करने जा रहे हैं कि इस त्रुटि का क्या अर्थ है और इसका कारण क्या है। हम एक उदाहरण के माध्यम से चलेंगे ताकि आप सीख सकें कि इसे अपने कार्यक्रम में कैसे ठीक किया जाए।
.git/FETCH_HEAD नहीं खोल सकता:अनुमति अस्वीकृत
Git रिपॉजिटरी में .git/ नामक एक विशेष फ़ोल्डर होता है। आपने यह फ़ोल्डर नहीं देखा होगा क्योंकि यह छिपा हुआ है। इस फ़ोल्डर की छिपी हुई स्थिति को पूर्ण विराम ("।") द्वारा दर्शाया जाता है जो फ़ोल्डर नाम के प्रारंभ में आता है।
इस फ़ोल्डर में भंडार के बारे में मेटाडेटा के विभिन्न टुकड़े हैं। यह आपके प्रोजेक्ट-विशिष्ट कॉन्फ़िगरेशन विकल्पों, आपके प्रोजेक्ट के संदर्भों, आपके वर्तमान HEAD, और आपके रिपॉजिटरी के बारे में अन्य महत्वपूर्ण जानकारी को ट्रैक करता है।
गिट को इस फ़ोल्डर में पढ़ने और लिखने की आवश्यकता है। ऐसा इसलिए है क्योंकि जैसे ही आप git config और git pull जैसे कमांड चलाते हैं, इसकी सामग्री बदल जाएगी।
एक उदाहरण परिदृश्य
हम GitHub से ck-git नामक रिपॉजिटरी को क्लोन करने जा रहे हैं। इस रिपॉजिटरी में README.md नाम की एक फाइल है। इस रिपॉजिटरी को क्लोन करने के लिए, हम git क्लोन कमांड का उपयोग कर सकते हैं:
sudo git clone https://github.com/Career-Karma-Tutorials/ck-git
हमारी README.md फ़ाइल की सामग्री वर्तमान में है:
# ck-git
हम इस फ़ाइल को अधिक वर्णनात्मक README.md शामिल करने के लिए बदलना चाहते हैं। हम इस फ़ाइल को एक टेक्स्ट एडिटर में खोलने जा रहे हैं और इसकी सामग्री को निम्नलिखित में बदल देंगे:
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
# Career Karma Git Demo
करियर कर्म के गिट ट्यूटोरियल के लिए डेमो फाइलों के साथ एक भंडार।
वह बेहतर है। हमारी फ़ाइल हमारे Git रिपॉजिटरी के उद्देश्य का अधिक सटीक वर्णन करती है। अब, इस परिवर्तन को स्टेजिंग क्षेत्र में जोड़ें ताकि हम एक कमिट बना सकें:
sudo git add README.md
गिट जानता है कि हम अपनी अगली प्रतिबद्धता में 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
हमारे फ़ोल्डर की सभी फाइलें "रूट" के स्वामित्व में हैं, जो "स्टाफ" खाते का हिस्सा है। जब हम "सुडो" का उपयोग किए बिना अपने रिमोट रिपोजिटरी को खींचने का प्रयास करते हैं, तो एक त्रुटि वापस आती है। ऐसा इसलिए है क्योंकि हमारे मानक उपयोगकर्ता खाते में फ़ोल्डर में फ़ाइलों को संशोधित करने की अनुमति नहीं है।
इस समस्या को ठीक करने के लिए, हम अपने फ़ोल्डर में फ़ाइलों के स्वामित्व को बदलने जा रहे हैं। हम इसे chown कमांड का उपयोग करके कर सकते हैं:
sudo chown -R james:staff .
यह कमांड हमारे रिपॉजिटरी में .git/ फ़ोल्डर सहित सभी फाइलों और फ़ोल्डरों के स्वामित्व विवरण को बदल देता है। अब हम निर्देशिका के स्वामी हैं और प्रोजेक्ट फ़ोल्डर तक हमारी पूर्ण पहुंच है। अब हमें अपना कोड खींचने में सक्षम होना चाहिए:
git pull
यह आदेश सफलतापूर्वक निष्पादित होता है और वापस आता है:
Already up to date.
अब हम जानते हैं कि हमारे रिमोट रिपोजिटरी में कोई बदलाव नहीं किया गया है क्योंकि हमने आखिरी बार अपना कोड निकाला था। हमने आखिरी बार कोड तब निकाला था जब हमने रिपॉजिटरी बनाई थी।
निष्कर्ष
Git ".git/FETCH_HEAD नहीं खोल सकता:अनुमति अस्वीकृत" त्रुटि तब होती है जब आप किसी दूरस्थ रिपॉजिटरी से कोड खींचने का प्रयास करते हैं जब आपके प्रोजेक्ट फ़ोल्डर में .git/ निर्देशिका आपके वर्तमान उपयोगकर्ता के लिए दुर्गम होती है।
इस त्रुटि को हल करने के लिए, सुनिश्चित करें कि आपके वर्तमान उपयोगकर्ता के पास Git रिपॉजिटरी में पढ़ने-लिखने के विशेषाधिकार हैं, जिसके साथ आप काम कर रहे हैं।