গিট ব্যবহার করার সময় কীভাবে "ত্রুটি: খারাপ সূচক - মারাত্মক: সূচক ফাইল দূষিত" সমাধান করবেন


611

এর পরে git init, আমি কয়েকটি ফাইল যুক্ত এবং প্রতিশ্রুতিবদ্ধ করেছি, কিছু পরিবর্তন করেছি, যুক্ত এবং প্রতিশ্রুতিবদ্ধ। গিট ডিমন সেট করুন (উইনএক্সপিতে সিগউইনের অধীনে চলমান) এবং একবার সংগ্রহস্থলটিকে ক্লোন করেছেন। ক্লোন করা সংগ্রহস্থলের সাহায্যে এখন আমি এই ত্রুটিটি পেয়েছি:

$ git status
error: bad index file sha1 signature
fatal: index file corrupt

ভান্ডারটির নতুন কপি পাওয়া ছাড়া এটি ঠিক করার কোনও উপায় আছে কি?


এটি কি ক্লোন করা ভাণ্ডারগুলিতে, না মূল সংগ্রহস্থলে? ক্লোন কমান্ড আউটপুট কোন ত্রুটি আছে?
সিবি বেইলি

উত্তর:


1254

যদি সমস্যাগুলি সূচকের সাথে কমিটের (যেমন .git/index) মঞ্চের অঞ্চল হিসাবে থাকে তবে আপনি কেবল সূচকটি সরিয়ে ফেলতে পারেন (আপনি চাইলে ব্যাকআপ কপি তৈরি করতে পারেন) এবং তারপরে শেষ প্রতিশ্রুতিতে সূচকটি সংস্করণে পুনরুদ্ধার করতে পারেন:

ওএসএক্স / লিনাক্সে:

rm -f .git/index
git reset

উইন্ডোজে:

del .git\index
git reset

( resetউপরের আদেশটি একই রকম git reset --mixed HEAD)

আপনি বিকল্পের পরিবর্তে নিম্ন স্তরের নদীর গভীরতানির্ণয় ব্যবহার করতে পারেন ।git read-treegit reset


যদি সমস্যাটি প্যাকফাইলে সূচক নিয়ে থাকে তবে আপনি এটি ব্যবহার করে এটি পুনরুদ্ধার করতে পারেন git index-pack


27
আমি দুর্ঘটনাক্রমে :w!একটি :Gstatus(পলাতক.ভিম থেকে) এ করেছি। এই উত্তরটি আমাকে চুল টানতে অনেক রক্ষা করেছিল।
লরেন্স গনসাল্ভেস

5
আমি জানি আমরা "আমাকে খুব" বার্তা পছন্দ করি না - তবে "আমাকেও" পছন্দ করি না। উইন্ডোতে সমান erase /s .git\index, আমারও erase .git\index.lockখুব দরকার ছিল ।
জেরেমি ম্যাকজি

1
হাই, আমার সন্ধান এবং প্রতিস্থাপনের ক্ষেত্রে আমার একই সমস্যা ছিল তবে গিট রিসেট আমাকে বলে দেয় .git / অবজেক্টস / প্যাক / এ দুটি প্যাক ফাইল রয়েছে যা অ্যাক্সেস করা যায় না। তোমার কি কোন ধারনা আছে ?
epsilones

13
git reset --keepপরিবর্তে এটি ব্যবহার করা কি নিরাপদ হবে না ? ইন টাওয়ার গীত চিট শিট হিসাবে এটি ব্যাখ্যা করা হয়: একটি পূর্ববর্তী আপনার মাথা পয়েন্টার রিসেট কমিট এবং সংরক্ষণ মুক্ত স্থানীয় পরিবর্তনগুলি
Pjetr

10
আমি যখন এই উত্তরটি লিখছিলাম তখন এটি বিদ্যমান ছিল না ... যাইহোক এটির git reset --keepসুরক্ষিত রূপ git reset --hard; git reset --mixedওয়ার্কডির মোটেও স্পর্শ করে না।
জাকুব নারেবস্কি

76

আপনি দুর্ঘটনাক্রমে আপনার প্রকল্পের মূলের উপর একটি সেড দিয়ে .git / সূচী ফাইলটি দূষিত করেছেন (সম্ভবত রিফ্যাক্টরিং?) এর মতো কিছু দিয়ে:

sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr "$SEARCHPATERN" "$PROJECTROOT")

ভবিষ্যতে এড়াতে, কেবল আপনার গ্রেপ / সেড দিয়ে বাইনারি ফাইলগুলি উপেক্ষা করুন:

sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr --binary-files=without-match "$SEARCHPATERN" "$PROJECTROOT")

6
আপনি যদি পরিবর্তনগুলি হারাতে আপত্তি না করেন তবে আপনি .git/indexসর্বদা এটি মুছতে পারেন এবং git reset(ছাড়া --hard!) দিয়ে পুনরায় তৈরি করতে পারেন ।
জাকুব নারেবস্কি 12

1
আমি এটি # সন্ধান। / -প্রকার এফ-এক্সেক সেড-আই এর / রাজনীতিবিদ / আইনসভা / g 'with} \ দিয়ে ভেঙেছি; এই উত্তরের যা প্রস্তাব দেয় এটি করা প্রথমে এটি ভেঙে যেতে না পারে তবে গ্রহণযোগ্য উত্তরটি আমার যে ক্ষতি করেছে তা মেরামত করেছে। এটি যদিও দুর্দান্ত প্রতিরোধ।
রায়ান মর্টেনসেন

1
@ রায়ানমোরটেনসেন আপনি এমন sedকিছু দিয়ে আপনার উল্টানোর চেষ্টা করতে পারেন find .git/ -type f -exec sed -i 's/Legislator/Politician/g' {} \; এটি যদি আপনার .git/এত দূষিত হয় যা git resetকাজ করে না তবে এটির সাহায্য হতে পারে । অথবা হতে পারে আপনি নিজের বিদ্যমানটিকে .git/indexমোছা না করে পুনরুদ্ধার করতে চান । এটি অবশ্যই ব্যর্থ হবে, যদি আপনার মূল কোড বা সূচকটিতে ইতিমধ্যে কিছু "বিধায়ক" রয়েছে s
hobs

1
আপনাকে ধন্যবাদ @ হবস আপনি আমাকে অনেক ঝামেলা বাঁচিয়েছেন - আমি sedআমার new_stringসাথে প্রতিস্থাপন করে এটিকে উল্টিয়ে সমাধান করেছি old_string!
tsveti_iko

1
আমি ইন্টেলিজজে 'এসসিআর' ফোল্ডারের পরিবর্তে আমার পুরো প্রকল্পটি রিফেক্টর করেছিলাম এবং এই সমস্যাটি ছিল। এটি কেন আমার এত অদ্ভুত ত্রুটি ছিল তা ব্যাখ্যা করে!
মাইকেল

18

আমার সমস্যা ছিল, এবং আমি এটি দিয়ে টিআই ফিক্স চেষ্টা করি:

rm -f .git/index
git reset

কিন্তু এটি কার্যকর হয়নি। সমাধান ? কিছু কারণে আমার উপ ডিরেক্টরিতে অন্যদের .git ফোল্ডার ছিল। আমি সেই .git ফোল্ডারগুলি মুখ্য (অধ্যক্ষ নয়) এবং git resetআবার মুছে ফেলছি । একবার সেগুলি মুছে ফেলা হলে সবকিছু আবার কাজ করে।


15

এটির মতো খারাপ ক্লোন লাগছে। আরও তথ্য পেতে আপনি নিম্নলিখিত ব্যবহারের চেষ্টা করতে পারেন:

git fsck --full

8

যেহেতু উপরের সমাধানগুলি অবিচ্ছিন্ন সমস্যাগুলি আমাকে ছেড়ে চলেছে, তাই আমি এই নিস্তেজ সমাধানটি ব্যবহার করেছি:

  1. অন্য কোথাও রেপোর একটি নতুন অনুলিপি ক্লোন করুন
  2. (ভাঙা) রেপোতে নতুন .git ডিরেক্টরিটি অনুলিপি করুন যাতে আমি প্রতিশ্রুত করতে চাইছি এমন পরিবর্তনগুলি রয়েছে

কৌতুকটি করেছেন। sedবিটিডব্লিউ, @ হোমস অনুমান করার সাথে সাথে আমি প্রকল্পের মূলটিতে একটি কাজ করেছি । আমার পাঠ শিখেছি।


এটি উজ্জ্বল :)
জেরেমি বেলোলো

এটি সত্যই উজ্জ্বল নয় যদি আপনি একীভূত হওয়ার মাঝখানে থাকেন, শাখা তৈরি করেছিলেন বা ক্লোনিংয়ের পর থেকে কোনও কমিট জারি করেছেন, বা অন্য কোনও পরিস্থিতিতে! ... রেপোর একটি নতুন অনুলিপি ক্লোন করা খুব কমই সমাধান এবং আমি সাহস পাচ্ছি এটি অধৈর্যত্বের স্মাক (সত্য চিমটিযুক্ত অবস্থায় সেরা বাম)। আসলে কী চলছে তা নির্ণয় করা এবং বিদ্যমান রেপোর সূচকগুলি মেরামত করা - এটি করা তুলনামূলকভাবে সহজ। কখনও কখনও আপনি কেবল সূচক ফাইলটির নাম পরিবর্তন করতে পারেন (বা এটি মুছুন, আপনি যদি নিশ্চিত হন যে আপনার আর কখনও প্রয়োজন হবে না) এবং
গিটকে

7

এটি আমার পক্ষে কাজ করেছে। যদিও আমি কৌতূহলবশত আমি প্রথমে ত্রুটিগুলি পেতে শুরু করি। গতকাল যখন আমি লগ আউট করেছি, ঠিক আছে। এই সকালে লগ ইন, এটা ছিল না।

rm .git/index

git reset

এটি আমার পক্ষে কাজ করেছে, যদিও এটি গিট থেকে সমস্ত যুক্ত ফাইল সরিয়ে নিয়েছে। আমাকে এই ফাইলগুলির জন্য গিট অ্যাড চালাতে হয়েছিল
শামসুল আরেফিন সজিব

6

গিট সাবমডিউল ব্যবহারকারীদের জন্য নোট - এখানে সমাধানগুলি যেমন হয় তেমন আপনার জন্য কাজ করবে না।

ধরা যাক আপনার devউদাহরণস্বরূপ একটি প্যারেন্ট রিপোজিটরি রয়েছে এবং আপনার সাবমডিউল সংগ্রহস্থলটি বলা হয় api

যদি আপনি ভিতরে থাকেন apiএবং আপনি এই প্রশ্নের মধ্যে উল্লিখিত ত্রুটিটি পান:

error: bad index file sha1 signature fatal: index file corrupt

indexফাইলটি একটি ভেতরে করা হইনি .gitফোল্ডার। আসলে, এটি .gitএমনকি কোনও ফোল্ডারও হবে না - এটি এই সংগ্রহস্থলের জন্য বাস্তব .git ডেটার অবস্থান সহ একটি পাঠ্য দলিল হবে। সম্ভবত এর মতো কিছু:

~/dev/api $ cat .git gitdir: ../.git/modules/api

সুতরাং, পরিবর্তে rm -f .git/index, আপনাকে এটি করতে হবে:

rm -f ../.git/modules/api/index git reset

বা, আরও সাধারণভাবে,

rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index git reset


4

.gitসাবডাইরেক্টরিগুলির মধ্যে একটির নীচে যখন কোনও ডিরেক্টরি থাকে তখন এই সমস্যাটি দেখা দিতে পারে । এটি ঠিক করতে, সেখানে অন্যান্য .git ডিরেক্টরি রয়েছে কিনা তা পরীক্ষা করে দেখুন এবং সেগুলি সরিয়ে আবার চেষ্টা করুন।


আরও বেশ কয়েকটি উত্তর ইতিমধ্যে এই তথ্য সরবরাহ করেছে।
সাইমন ফোরসবার্গ

-1

আমি একটি সহজ কৌশল। আমি একটি নতুন ফোল্ডারে রেপো ক্লোন করেছি। নতুন ফোল্ডার থেকে .git ফোল্ডারটি অনুলিপি করে পুরানো ফোল্ডারে রেপি করে সেখানে .git প্রতিস্থাপন করুন।


অত্যন্ত বিপজ্জনক কারণ এটি অপ্রকাশিত কমিটস, ট্যাগ এবং শাখাগুলির পাশাপাশি স্ট্যাশ এবং রিফলগের মতো ডেটা মুছে ফেলবে।
Koraktor

অপ্রকাশিত কমিট সম্পর্কে নিশ্চিত না কারণ আমি বিশ্বাস করি সেগুলি .git ফোল্ডারে সঞ্চিত আছে এবং আমি .git ফোল্ডারটি অনুলিপি করেছি। আমি এই পদ্ধতিটি দিয়ে কিছুই হারাতে পারি নি। আমি স্ট্যাশ সম্পর্কে জানি না এবং এ সম্পর্কে কোনও মন্তব্য করতে রিফ্লগ।
অ্যাস্ট্রা উভারোভা - শনি নক্ষত্রের

আপনি সঠিক, তবে আপনার জোর দেওয়া উচিত যে আপনি একটি স্থানীয় ক্লোন করেছেন। তবে আমার মন্তব্য স্ট্যাশ এবং রিফলগের জন্য এখনও সত্য নয়।
কোরাাক্টর

ঠিক আছে, সেই মন্তব্যে আমার আর কোনও অভিজ্ঞতা নেই, তবে এটি আমার পক্ষে কাজ করেছে এবং কিছু ব্যবহারকারী সম্ভবত এটি দরকারী বলে মনে করছেন। এটি ডাউনভোট করার দরকার নেই।
অ্যাস্ট্রা উভারোভা - শনি রাশির তারা


-7

এটি হাস্যকর হলেও আমি কেবল আমার মেশিনটি (ম্যাক) রিবুট করেছি এবং সমস্যাটি এমনভাবে চলে গেছে যেমনটি কখনও ঘটেছিল না। আমি একটি সমর্থন লোক মত শব্দ শুনতে ঘৃণা ...


-9

আপনি ফাইলটির পূর্ববর্তী সংস্করণে পুনরুদ্ধার করার চেষ্টা করতে পারেন (যদি আপনি উইন্ডোজ ওএস ব্যবহার করছেন)


1
আপনি জানেন না এমন উত্তর দিন না।
আলতাফ প্যাটেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.