কম্পিউটার টিউটোরিয়াল

Git Cannot open .git/FETCH_HEAD: Permission denied সমাধান

Git-এর আপনার প্রজেক্ট ফোল্ডারের ভিতরে .git/ নামক ডিরেক্টরির ফাইলগুলোর ওপর রাইট পারমিশন দরকার। যদি 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 অ্যাক্সেস করতে পারছে না।

সমাধান

আমরা ck-git রিপোজিটরি "sudo" কমান্ড ব্যবহার করে ক্লোন করেছিলাম। এর মানে আমাদের রিপোজিটরি রুট ইউজার হিসেবে ক্লোন করা হয়েছে। কারণ রুট ইউজার রিপোজিটরি ক্লোন করেছিল, রিপোজিটরির ফাইলগুলো রুট ইউজারের দখলে।

আমরা এটি 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

আমাদের ফোল্ডারের সকল ফাইল "root"-এর দখলে, যেটি "staff" অ্যাকাউন্টের অংশ। যখন আমরা "sudo" ছাড়া আমাদের রিমোট রিপোজিটরি পুল করার চেষ্টা করি, একটি এরর রিটার্ন হয়। এর কারণ হলো আমাদের স্ট্যান্ডার্ড ইউজার অ্যাকাউন্টের ফোল্ডারের ফাইলগুলো মডিফাই করার পারমিশন নেই।

এই সমস্যাটি ফিক্স করতে, আমরা আমাদের ফোল্ডারের ফাইলগুলোর আওনারশিপ পরিবর্তন করব। আমরা এটি chown কমান্ড ব্যবহার করে করতে পারি:

sudo chown -R james:staff .

এই কমান্ড আমাদের রিপোজিটরির সকল ফাইল এবং ফোল্ডারের আওনারশিপ ডিটেইলস পরিবর্তন করে, .git/ ফোল্ডার সহ। এখন আমরা ডিরেক্টরির আওনার এবং প্রজেক্ট ফোল্ডারের পূর্ণ এক্সেস আছে। আমরা এখন আমাদের কোড পুল করতে পারব:

git pull

এই কমান্ড সফলভাবে এক্সিকিউট হয় এবং রিটার্ন করে:

Already up to date.

এখন আমরা জানি আমাদের রিমোট রিপোজিটরিতে কোনো পরিবর্তন হয়নি যেহেতু আমরা শেষবারের পুল করেছি। আমরা শেষবারের কোড পুল করেছি যখন আমরা রিপোজিটরি তৈরি করেছি।

উপসংহার

Git "Cannot open .git/FETCH_HEAD: Permission denied" এরর ঘটে যখন আপনি একটি রিমোট রিপোজিটরি থেকে কোড পুল করার চেষ্টা করেন যখন আপনার প্রজেক্ট ফোল্ডারের .git/ ডিরেক্টরি আপনার কারেন্ট ইউজারের কাছে অ্যাক্সেসযোগ্য নয়।

এই এরর সমাধান করতে, নিশ্চিত করুন যে আপনার কারেন্ট ইউজারের রিপোজিটরিতে রিড-রাইট প্রিভিলেজ আছে যেটির সাথে আপনি কাজ করছেন।


  1. Git Reset: কমিট রিয়ার্ন করার টুল

  2. Git Stash: কোড সাময়িকভাবে সংরক্ষণ করার পদ্ধতি

  3. Git এবং GitHub-এ শুরু করার গাইড

  4. কমান্ড-লাইন বেস্ট প্র্যাকটিস দিয়ে ওপেন-সোর্স রিপোজিটরি মাস্টার করুন