গিট মেটাডাটা ইন্টিগ্রেটি চেক করে?


1

আমি আজ বিস্মিত ছিলাম কিভাবে গিট তার মেটাডেটাটির সংখ্যাগরিষ্ঠতা নিশ্চিত করে এবং আমি যা দেখেছি তাতে বিস্মিত। আমি পরীক্ষার জন্য নিম্নলিখিত সহজ সেটআপ ব্যবহার:

  • দুই কাজ রিপোজিটরি, বলা হয় x এবং y
  • একটি বেয়ার সংগ্রহস্থল, বলা হয় xy.git

সুতরাং, প্রাথমিকভাবে x এবং y থেকে ধাক্কা এবং pulling হয় x.git এবং সবকিছু ঠিক সূক্ষ্ম কাজ করে। এখন, আসুন মেটাডেটা বস্তুর একটি বলি ( .git/objects/... ) মধ্যে x.git যাই হোক না কেন কারণে দূষিত হয়ে যায় (আপনার প্রিয় র্যান্ডম ঘটনা নির্বাচন করুন)।

আমি আসলে ধীরে ধীরে ধীরে ধীরে ধাক্কা মেরে বা টানতে কিছু ভাঙ্গব, কিন্তু আমার অবাক, সবকিছু ঠিকঠাক কাজ করতে লাগলো। আরো commits, আরো ধাক্কা এবং pulling, কোন সমস্যা। প্রথমবারের মতো কিছুটা দূষিত হওয়ার খবর পাওয়া গিয়েছিল যখন আমি অপ্রয়োজনীয় অবস্থায় আমার ক্লোনটি রেখে, বেয়ার রিপোজিটরি থেকে অন্য কোনও কাজের সংগ্রহস্থল ক্লোন করার চেষ্টা করলাম।

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

এটি কেবল তখনই ঘটে না যখন আমি ন্যাং সংগ্রহস্থল থেকে একটি দূষিত ফাইল দিয়ে শুরু করি, এটি এমনভাবে একটি দুর্নীতিগ্রস্ত ফাইল থেকে একটি বিরক্তিকর ফাইলটিকে এই ভাবে পরিচয় করানো সম্ভব।

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

যে কেউ এখানে পুনরুত্পাদন করা চেষ্টা করতে ইচ্ছুক? আমি গিট সংস্করণ 2.7.4 সঙ্গে পরীক্ষা।

এ ধরনের দুর্নীতির বিরুদ্ধে কীভাবে তদন্ত করা যায় সে বিষয়ে কোন পরামর্শ অত্যন্ত স্বাগত।

উত্তর:


1

আমি আসলে ধীরে ধীরে ধীরে ধীরে ধাক্কা মেরে বা টানতে কিছু ভাঙ্গব, কিন্তু আমার অবাক, সবকিছু ঠিকঠাক কাজ করতে লাগলো। আরো commits, আরো ধাক্কা এবং pulling, কোন সমস্যা।

প্রতিটি বস্তু - ফাইল, কমিট, ইত্যাদি - এর বিষয়বস্তুগুলির SHA1 হ্যাশের পরে নামকরণ করা হয় (প্লাসটি একটি ছোট শিরোনাম)। যখনই একটি পৃথক বস্তু ব্যবহারের জন্য স্মৃতিতে পড়তে হয়, তখন তথ্যটি হাশে এবং বস্তুর নামের সাথে তুলনা করা হয়; কোন দ্বিধা একটি ত্রুটি প্রদর্শিত হবে।

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

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

এটি কেবল তখনই ঘটে না যখন আমি ন্যাং সংগ্রহস্থল থেকে একটি দূষিত ফাইল দিয়ে শুরু করি, এটি এমনভাবে একটি দুর্নীতিগ্রস্ত ফাইল থেকে একটি বিরক্তিকর ফাইলটিকে এই ভাবে পরিচয় করানো সম্ভব।

প্রথমত, মনে রাখবেন যে একই কম্পিউটার, একই-ফাইল সিস্টেম ক্লোন বস্তুগুলি প্যাক এবং স্থানান্তর করে না - এটি কেবল স্থান এবং সময় উভয় সংরক্ষণ করতে ফাইলগুলিকে হার্ডলিঙ্ক করে। আপনি স্পষ্টভাবে আছে অপ্ট আউট এই থেকে cloning দ্বারা file:// পরিবর্তে একটি সহজ পথ URL।

যাইহোক, এসএসএইচ বা HTTPS (অথবা উল্লিখিত ফাইল: // ইউআরএল) উপর একটি ক্লোন আসলে ট্রান্সফার প্যাক তৈরি করার জন্য বস্তুর ডেটা পড়ে এবং লিখতে থাকে, তাই যে কোনও দূষিত বস্তু স্থানান্তরের অংশ হিসাবে অনুমিত হয় ইচ্ছাশক্তি প্রক্রিয়া বাতিল করুন।

আপনি যদি একরকম একটি দূষিত বস্তু ধাক্কা পরিচালনা দূরবর্তী সার্ভার - এটি স্থানীয় প্যাকিং এবং রিমোট অপপ্যাকিংয়ের মাধ্যমে স্লিপিং করে - এটি একটি বিট অস্বাভাবিক (বিশেষ করে পরে 2013 git.kde.org গল্প ) এবং আমি জিট মেইলিং লিস্টে সেই উদ্বেগ বাড়িয়ে তুলতে চাই।

(ডকুমেন্টেশন সম্পর্কে আলোচনা যে চিন্তা করবেন না transfer.fsckObjects ডিফল্টরূপে নিষ্ক্রিয় করা হচ্ছে - এটি শুধুমাত্র বস্তু গঠন এবং সিনট্যাক্স যাচাই করা অক্ষম করে, হ্যাশ যাচাইকরণ নয়।)

কোথাও, কোথাও, এই বিরুদ্ধে চেক করা উচিত নয়?

একটি পূর্ণ চেক নিজে ব্যবহার করা যাবে git fsck কমান্ড। এটি আপনার 'কেন্দ্রীয়' সংগ্রহস্থলগুলিতে ক্রোজোজ করা একটি ভাল ধারণা। সম্পূর্ণ পরীক্ষাটি স্বয়ংক্রিয় হয় না কারণ প্রতিটি কমিট / পুশ / পুল / ছোট্ট গিট রিপোজিটরির জন্য যাই হোক না কেন সম্পূর্ণ রিপোজিটরিটি পুনরায় পরীক্ষা করার জন্য এটি একটি অযৌক্তিক সময় লাগবে।

একজন আংশিক Git চালানোর সিদ্ধান্ত নেয় যখন implicitly চেক git gc --auto পটভূমি রক্ষণাবেক্ষণ প্রক্রিয়া। এই রক্ষণাবেক্ষণটি সমস্ত সম্প্রতি নির্মিত 'আলগা' বস্তুগুলি পড়ে এবং তাদের একটি .pack ফাইলে সংরক্ষণাগার করে, তাই সেই বস্তুর যাচাইকরণ বিনামূল্যে করা হয়। (তবে, পূর্বনির্ধারিত সময়সূচীতে চলার পরিবর্তে, যখন সেট সীমিতের চেয়ে আপনার বেশি আলগা বস্তু থাকে তখন এটি চালানো হয়।)

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