আমি কেবল এটিই অনুভব করেছি - গিট রেপোতে লেখা অবস্থায় আমার মেশিন ক্র্যাশ হয়ে গেছে এবং এটি দূষিত হয়ে গেছে। আমি নিম্নলিখিত হিসাবে এটি স্থির।
আমি কতটা প্রতিশ্রুতি রিমোট রেপোতে ঠেলাতে পারি নি তা এইভাবে শুরু করেছিলাম:
gitk &
আপনি যদি এই সরঞ্জামটি ব্যবহার না করেন তবে এটি খুব সহজ - যতটা আমি জানি সমস্ত অপারেটিং সিস্টেমে উপলব্ধ। এটি ইঙ্গিত করে যে আমার দূরবর্তীটিতে দুটি কমিট অনুপস্থিত ছিল। অতএব আমি লেশটি ক্লিক করে সর্বশেষ দূরবর্তী প্রতিশ্রুতি নির্দেশ করে (সাধারণত এটি হবে /remotes/origin/master
) হ্যাশটি পেতে (হ্যাশটি 40 অক্ষর দীর্ঘ, তবে সংক্ষিপ্ততার জন্য আমি এখানে 10 ব্যবহার করছি - এটি সাধারণত যেভাবে কাজ করে)।
এটা এখানে:
14c0fcc9b3
আমি তারপরে নিম্নলিখিত প্রতিশ্রুতিতে ক্লিক করুন (যেমন প্রথমটি যা রিমোটের নেই) এবং হ্যাশটি সেখানে পেয়েছি:
04d44c3298
আমি এই দুটিই এই প্রতিশ্রুতির জন্য প্যাচ তৈরি করতে ব্যবহার করি:
git diff 14c0fcc9b3 04d44c3298 > 1.patch
আমি তখন অন্যান্য অনুপস্থিত প্রতিশ্রুতিগুলির সাথে একইভাবে কাজ করেছিলাম, অর্থাত্ আমি প্রতিশ্রুতিটির হ্যাশ এবং প্রতিশ্রুতির হ্যাশ নিজেই ব্যবহার করেছি:
git diff 04d44c3298 fc1d4b0df7 > 2.patch
আমি তখন একটি নতুন ডিরেক্টরিতে চলে এসেছি, রিমোট থেকে রেপো ক্লোন করেছি:
git clone git@github.com:username/repo.git
আমি তখন প্যাচ ফাইলগুলি নতুন ফোল্ডারে সরিয়ে নিয়েছি এবং প্রয়োগ করেছি এবং তাদের যথাযথ প্রতিশ্রুতি বার্তাগুলির সাথে প্রতিশ্রুতিবদ্ধ করেছি (এগুলি উইন্ডো থেকে git log
বা পেস্ট করা যেতে পারে gitk
):
patch -p1 < 1.patch
git commit
patch -p1 < 2.patch
git commit
এটি আমার জন্য পুনরুদ্ধার করা জিনিসগুলি (এবং নোট করুন যে এটি প্রচুর সংখ্যক কমিটের জন্য করার একটি দ্রুত উপায় আছে)। তবে আমি এটি দেখতে আগ্রহী ছিলাম যে দুর্নীতিগ্রস্ত রেপোতে গাছটি মেরামত করা যায় কিনা, এবং উত্তরটি এটি পারে। উপরের মতো মেরামত করা রেপো সহ, ভাঙ্গা ফোল্ডারে এই কমান্ডটি চালান:
git fsck
আপনি এরকম কিছু পাবেন:
error: object file .git/objects/ca/539ed815fefdbbbfae6e8d0c0b3dbbe093390d is empty
error: unable to find ca539ed815fefdbbbfae6e8d0c0b3dbbe093390d
error: sha1 mismatch ca539ed815fefdbbbfae6e8d0c0b3dbbe093390d
মেরামতটি করতে, আমি ভাঙা ফোল্ডারে এটি করব:
rm .git/objects/ca/539ed815fefdbbbfae6e8d0c0b3dbbe093390d
cp ../good-repo/.git/objects/ca/539ed815fefdbbbfae6e8d0c0b3dbbe093390d .git/objects/ca/539ed815fefdbbbfae6e8d0c0b3dbbe093390d
অর্থাৎ দূষিত ফাইলটি সরান এবং এটি একটি ভাল ফাইলের সাথে প্রতিস্থাপন করুন। আপনি এই বেশ কয়েকবার কাজ করতে হতে পারে। অবশেষে একটি পয়েন্ট থাকবে যেখানে আপনি fsck
ত্রুটি ছাড়াই চালাতে পারবেন । প্রতিবেদনে সম্ভবত আপনার "ঝুঁকিপূর্ণ প্রতিশ্রুতি" এবং "ঝুঁকিপূর্ণ ব্লব" লাইন থাকবে, এগুলি এই ফোল্ডারে আপনার পুনর্বাসনা এবং সংশোধনীর ফলাফল এবং ঠিক আছে। আবর্জনা সংগ্রহকারী যথাযথ সময়ে তাদের সরিয়ে দেবে।
সুতরাং (অন্ততপক্ষে আমার ক্ষেত্রে) একটি দূষিত গাছের অর্থ এই নয় যে শৃঙ্খলাবদ্ধ কমিটগুলি হারিয়ে গেছে।