গিট জিসি মারাত্মক কীভাবে পরিচালনা করবেন: খারাপ অবজেক্ট রেফ / রিমোটস / অরিজিন / হেড ত্রুটি?


131

গিট আবর্জনা সংগ্রহ চালানোর চেষ্টা করার সময় আমি আজ এলোমেলোভাবে আঘাত করেছি :

$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack

আমি কীভাবে এটি মোকাবেলা করব?

উত্তর:


162

আমি এর প্রভাব বুঝতে পারি না, তবে এই থ্রেডে যেমন পরামর্শ দেওয়া হয়েছিল , যখন আমি এটির মুখোমুখি হয়েছিলাম তখনই করেছি

$ mv .git/refs/remotes/origin/HEAD /tmp

(কেবলমাত্র ক্ষেত্রে এটি রাখা) এবং তারপরে

$ git gc

অভিযোগ না করেই কাজ করেছেন; আমি কোন সমস্যায় পড়ি না।


6
এটি আমার পক্ষে কাজ করেছে এবং আমি মনে করি যে আমি এই সমস্যায় পড়েছি কারণ আমি ডিফল্ট শাখাটি পরিবর্তিত masterঅন্য একটিতে পরিবর্তন করেছি develop। আগের দিন আমি থেকে ফিরে এটি পরিবর্তন developকরতে masterএবং আমি বৃদ্ধ ডিফল্ট শাখা মোছাdevelop , কিন্তু আমার কাজ ডিরেক্টরির মধ্যে, ফাইল .git/refs/remotes/origin/HEADএখনও প্রতি নির্দেশ ছিল refs/remotes/origin/developআর বিদ্যমান নেই পারে। এই পরিস্থিতিতে ফাইল অপসারণ কাজ করে।
স্টাভারেঙ্গো

4
git pruneআমার জন্য কাজ করেছে, এমন একটি উপাত্ত মুছে ফেলার উপায় যা গিটে জমা হয়েছে তবে দরকারী কোনও বিষয় দ্বারা এটি রেফারেন্স করা হচ্ছে না।
সোভেন মালভিক

তাদের $ mv .git/refs/remotes/origin/HEAD /tmp $ git gc git prune
মৃত্যুদণ্ড

2
আমি সন্দেহ সবচেয়ে ভালো উপায় হবে @ WilQu এর উত্তর ( stackoverflow.com/a/49944297/660339 )। কেউ কি এটি নিশ্চিত করতে পারবেন?
ইভান পেরেজ

.git ফোল্ডারের বাইরে ঐ ফাইল মুছে ফেলার চেয়ে git gcআমার জন্য কাজ
Vino

68

আমি যে সমস্যার মধ্যে দৌড়েছি (এটি একই সমস্যা যা @ স্টাভারেঙ্গো উপরে উপরে এই মন্তব্যে উল্লেখ করেছেন ) হ'ল ডিফল্ট দূরবর্তী শাখাটি ( developআমার ক্ষেত্রে) মুছে ফেলা হয়েছিল, তবে এখনও এটি উল্লেখ করা হয়েছে .git/refs/remotes/origin/HEAD

.git/refs/remotes/origin/HEADআমার সম্পাদক খোলার মাধ্যমে এটি প্রদর্শিত হয়েছিল:

ref: refs/remotes/origin/develop

আমি এটি আমার নতুন ডিফল্ট শাখায় সতর্কতার সাথে সম্পাদনা করেছি এবং সবকিছু ঠিকঠাক ছিল:

ref: refs/remotes/origin/master

যে ক্লু আমাকে শিখিয়েছিল তা হ'ল দৌড় git pruneএই ত্রুটিটি দেখিয়েছিল:

> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD

1
এটি আমার
ফিক্সটিও

1
এটি আমার সঠিক সমাধান ছিল। আমাদের দল সম্প্রতি একটি ডিফল্ট শাখা বিকাশ থেকে মাস্টার হিসাবে পরিবর্তন করেছে
jmancherje

40

ট্রেনটনের উত্তর দেখার পরে আমি আমার দিকে তাকিয়ে .git/refs/remotes/origin/HEADদেখলাম যে এটি একটি পুরানো শাখার দিকেও ইঙ্গিত করছে যা এখন মুছে ফেলা হয়েছে।

তবে ফাইলটি নিজে সম্পাদনা করার পরিবর্তে আমি রায়ের সমাধানটি চেষ্টা করেছি:

git remote set-head origin --auto

এটি স্বয়ংক্রিয়ভাবে ফাইলটিকে নতুন শাখায় সেট করেছে এবং এর git gcপরে দুর্দান্ত কাজ করেছে।


হ্যাঁ, এটি আমার পক্ষে কাজ করে - যেমনটি আমি ঠিক একই দৃশ্যে ছিলাম। git remote set-head $REMOTE --autoআমার ক্ষেত্রে, EM REMOTE হ'ল রিমোট ওরফে, ডিফল্ট "উত্স" নয়, কারণ আমার একাধিক রিমোট সেটআপ রয়েছে।
ডেভি

29

আমি ভেবেছিলাম যে সমাধানটি নিম্নলিখিত হিসাবে কাজ করেছে বলে মনে হচ্ছে, তবে এটি আসলে সমস্যার সমাধান না করে দেখা যাচ্ছে।

git remote set-head origin --auto

1
দেখে মনে হচ্ছে এই আদেশটি আমাকে একই সমস্যা থেকে মুক্তি পেতে সহায়তা করেছে। তবে, এই কমান্ডের পরে, আমিও ব্যবহার করেছি git prune(যেমন প্রথম কমান্ড আউটপুট হিসাবে প্রস্তাবিত হয়েছিল), তাই আমাকে ঠিক কী সাহায্য করেছে - প্রথম, দ্বিতীয়, বা উভয়ই তা বলতে পারছি না।
বোরিস পাইলহুন

1
git remote set-head origin --auto আমাকে ব্যবহার না করেই আমার রেফস / রিমোটস / উত্স / হেড ফাইলটি স্থির করে git prune
ড্যানিও

আমি এই ত্রুটির মুখোমুখি হয়েছি: error: Multiple remote HEAD branches. Please choose one explicitlyএবং ত্রুটিটি সরে যাওয়ার জন্য git remote set-head origin mybranch('মাইব্র্যাঞ্চ' শাখাটি চেকআউট করার সময়) ব্যবহার করতে হয়েছিল।
derekmx271

3
ডাউনভোটিং কারণ একটি সম্পূর্ণ উত্তর নয় এবং বিভ্রান্তিকর হতে পারে।
খ্রিস্টান ভাইলমা

9

দেখে মনে হচ্ছে আপনার প্রতীকী রেফগুলি ভেঙে যেতে পারে ... এটির পরিবর্তে এটির পরিবর্তে আপনার ডিফল্ট শাখার চেষ্টা করুন: উদাহরণস্বরূপ, আমার ডিফল্ট শাখাটি মাস্টার

$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc

এটি ঠিক করা উচিত।


0

আপনি যদি গিট ওয়ার্ক ট্রি ব্যবহার করছেন তবে নিশ্চিত হন যে আপনি একটি করছেন

git worktree prune

দৌড়ানোর আগে

git gc

আমার একটি ওয়ার্করি গাছ দুর্নীতিগ্রস্থ হয়েছিল এবং এটি মনে হয়েছে যে দুর্নীতিগ্রস্থ কর্মশক্তিটি সরানোর পরে কৌশলটি করা হয়েছে। git pruneনিজে থেকে কাজ করা হয়নি বলে মনে হয়।


0

আমার জন্য এর কারণটি উইন্ডোজের একটি সংকুচিত ফোল্ডারে কাজ করছিল। যখন ফোল্ডারটি সঙ্কুচিত ছিল, তখন এটি প্যাক ফাইলগুলিকে দূষিত করেছিল, অজানা শাখাগুলি ছাঁটাই করতে না পারার মতো অন্যান্য বিজোড় সমস্যাগুলিকে ক্যাসকেড করছে।

একমাত্র ফিক্সটি ছিল ওয়ার্কিং ডিরেক্টরি মুছতে এবং পুনরায় রিমোট (গুলি) ক্লোন করে। ভাগ্যক্রমে, কিছুই হারিয়ে গেছে তা নিশ্চিত করতে আমি এখনও ধাক্কা দিয়ে আপডেটগুলি টানতে পারি। এখন সব ঠিক আছে।

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