কোনও সংগ্রহস্থলের প্রথম ক্লোন চলাকালীন গিট প্রথমে বস্তুগুলি গ্রহণ করে (যা যথেষ্ট পরিমাণে সুস্পষ্ট) এবং তারপরে "রেজোলিউজিং ডেল্টাস" প্রায় একই পরিমাণ সময় ব্যয় করে। ক্লোনটির এই পর্যায়ে আসলে কী ঘটছে?
কোনও সংগ্রহস্থলের প্রথম ক্লোন চলাকালীন গিট প্রথমে বস্তুগুলি গ্রহণ করে (যা যথেষ্ট পরিমাণে সুস্পষ্ট) এবং তারপরে "রেজোলিউজিং ডেল্টাস" প্রায় একই পরিমাণ সময় ব্যয় করে। ক্লোনটির এই পর্যায়ে আসলে কী ঘটছে?
উত্তর:
গিট কিছু বস্তুকে প্যাকফাইলে সংরক্ষণ করার জন্য ডেল্টা এনকোডিং ব্যবহার করে । যাইহোক, যদি আপনি না ফিরে প্রতিটি পরিবর্তন খেলতে করতে চান কি কখনো অর্ডার বর্তমান সংস্করণটি পেতে একটি প্রদত্ত ফাইলে, তাই গীত এছাড়াও পাশাপাশি সংরক্ষণ করা ফাইলের বিষয়বস্তু অনিয়মিত স্ন্যাপশট হয়েছে। "সমাধান ডেল্টাস" হ'ল এমন পদক্ষেপ যা নিশ্চিত করে যে সমস্ত কিছুই ধারাবাহিক থাকে।
অনলাইনে উপলব্ধ প্রো গিট বইয়ের "গিট ইন্টারনাল" বিভাগের একটি অধ্যায় এখানে এই বিষয়ে কথা বলেছে।
git gcবা যখনই গিট এটি প্রয়োজনীয় নির্ধারণ করে) গিট স্থান সংরক্ষণের জন্য সমস্ত "আলগা" ফাইলকে একটি প্যাকফাইলে সংকুচিত করবে এবং সেই প্যাকফাইলে একটি সূচক ফাইল তৈরি হবে। সুতরাং জিলিব তার নিজস্ব ডেল্টা অ্যালগরিদম দিয়ে সংকোচিত করবে তবে গিট পূর্ববর্তী সংস্করণগুলি সংরক্ষণ করতে ডেল্টা-এনকোডিং ব্যবহার করে না। যেহেতু সর্বাধিক সাধারণ এবং ঘন ঘন অ্যাক্সেস সর্বশেষতম সংস্করণ, এটি স্ন্যাপশট হিসাবে সঞ্চিত।
এর পর্যায়গুলি হ'ল git clone:
"রেজলভিং ডেল্টাস" হ'ল বার্তাটি দ্বিতীয় পর্বের জন্য দেখানো হয়েছে, প্যাক ফাইলটিকে সূচক করে ("গিট ইনডেক্স-প্যাক")।
প্যাক ফাইল না না তাদের মধ্যে প্রকৃত বস্তু আইডি, শুধুমাত্র বস্তু কন্টেন্ট আছে। সুতরাং অবজেক্ট আইডি কী তা নির্ধারণ করতে, গিটকে প্যাকের প্রতিটি অবজেক্টের ডিসকপ্রেস + এসএএএ 1 করতে হবে যা আইডিকে আইডি তৈরি করতে হবে, যা পরে সূচী ফাইলটিতে লেখা হয়।
একটি প্যাক ফাইলে থাকা কোনও বস্তু ব-দ্বীপ হিসাবে সংরক্ষণ করা হতে পারে অর্থাৎ কিছু অন্যান্য অবজেক্টে পরিবর্তনগুলির ক্রম। এই ক্ষেত্রে, গিটকে বেস অবজেক্টটি পুনরুদ্ধার করতে হবে, আদেশগুলি প্রয়োগ করতে হবে এবং ফলাফলটি SHA1 করতে হবে। বেল্ট কমান্ডের ক্রম প্রয়োগ করে বেস অবজেক্টটি নিজেই উত্পন্ন হতে পারে। (যদিও কোনও ক্লোনর ক্ষেত্রে, বেস অবজেক্টটি ইতিমধ্যে মুখোমুখি হবে, কতগুলি উত্পাদিত বস্তু স্মৃতিতে ক্যাশে রয়েছে তার সীমা রয়েছে)।
সংক্ষেপে, "রিলিজিং ডেল্টাস" পর্যায়ে পুরো রেপো ডাটাবেসটি সংক্ষেপিত করে এবং চেকসাম্পিং করা জড়িত, এতে অবাক হওয়ার মতো কিছুটা সময় লাগে না। সম্ভবত SHA1 গুলি সংক্ষেপণ এবং গণনা করতে ডেল্টা কমান্ড প্রয়োগ করার চেয়ে বেশি সময় নেয়।
পরবর্তী সময় আনার ক্ষেত্রে, প্রাপ্ত প্যাক ফাইলটিতে অন্যান্য বস্তুর সাথে রেফারেন্স (ডেল্টা অবজেক্ট বেস হিসাবে) থাকতে পারে যা প্রাপ্তি গিটটি ইতিমধ্যে প্রত্যাশিত। এই ক্ষেত্রে, প্রাপ্ত গিটটি আসলে এই জাতীয় কোনও রেফারেন্সযুক্ত বিষয় অন্তর্ভুক্ত করার জন্য প্রাপ্ত প্যাক ফাইলটি পুনরায় লেখায় যাতে কোনও সঞ্চিত প্যাক ফাইলটি স্বয়ংসম্পূর্ণ হয়। এটিই হতে পারে যেখানে "সমাধানকারী ডেল্টাস" বার্তাটির উদ্ভব হয়েছিল।
অ্যাম্বারটি মার্কুরিয়াল বা অনুরূপ ব্যবহারকারী অবজেক্টের মডেলটি বর্ণনা করছে বলে মনে হচ্ছে। গিট কোনও বস্তুর পরবর্তী সংস্করণগুলির মধ্যে ডেল্টা সংরক্ষণ করে না, বরং প্রতিবারই বস্তুর পুরো স্ন্যাপশট। এরপরে এটি ডেল্টা সংকোচনের সাহায্যে এই স্ন্যাপশটগুলি সংকুচিত করে, ইতিহাসে যেখানে রয়েছে তা নির্বিশেষে ব্যবহার করার জন্য ভাল ডেল্টা সন্ধান করার চেষ্টা করছে।