বিভ্রান্তিকর বিটটি এখানে:
গিট কখনও এগুলিকে স্বতন্ত্র ফাইল হিসাবে দেখেনি। গিট সবকিছুকে সম্পূর্ণ বিষয়বস্তু হিসাবে মনে করে।
গিট প্রায়শই নিজস্ব রেপোতে বস্তুর জায়গায় 160 বিট হ্যাশ ব্যবহার করে। ফাইলগুলির একটি গাছ হ'ল মূলত প্রত্যেকটির সামগ্রীর সাথে যুক্ত নামের এবং হ্যাশগুলির একটি তালিকা (আরও কিছু মেটাডেটা)।
তবে 160 বিট হ্যাশ সামগ্রীটিকে অনন্যভাবে সনাক্ত করে (গিট ডাটাবেসের মহাবিশ্বের মধ্যে)। সুতরাং সামগ্রী হিসাবে হ্যাশযুক্ত একটি গাছ তার রাজ্যের বিষয়বস্তু অন্তর্ভুক্ত করে ।
আপনি যদি কোনও ফাইলের সামগ্রীর স্থিতি পরিবর্তন করেন তবে এর হ্যাশ পরিবর্তন হয়। তবে যদি এর হ্যাশ পরিবর্তন হয় তবে ফাইলের নামের সাথে যুক্ত হ্যাশও পরিবর্তিত হয়। যা পরিবর্তিতভাবে "ডিরেক্টরি ট্রি" এর হ্যাশ পরিবর্তন করে।
যখন একটি গিট ডাটাবেস ডিরেক্টরি ট্রি সংরক্ষণ করে, সেই ডিরেক্টরি ট্রিটি সমস্ত উপ-ডিরেক্টরি এবং এর মধ্যে থাকা সমস্ত ফাইলের সমস্ত সামগ্রী অন্তর্ভুক্ত করে ।
এটি একটি গাছের কাঠামোয় (অপরিবর্তনীয়, পুনরায় ব্যবহারযোগ্য) ব্লবস বা অন্যান্য গাছের পয়েন্টার সহ সংগঠিত, তবে যৌক্তিকভাবে এটি সম্পূর্ণ গাছের সম্পূর্ণ সামগ্রীর একক স্ন্যাপশট। উপস্থাপনা Git ডাটাবেসের মধ্যে ফ্ল্যাট তথ্য বিষয়বস্তু নয়, কিন্তু কথাটি এটা তার ডেটা, অন্য কিছু নয় সব।
যদি আপনি গাছটিকে একটি ফাইল সিস্টেমে সিরিয়ালাইজ করে থাকেন, সমস্ত .git ফোল্ডার মুছে ফেলেছেন এবং গাছটিকে তার ডাটাবেসে ফিরিয়ে আনতে গিটকে বলেছেন, আপনি ডাটাবেসে কোনও কিছুই যুক্ত করবেন না - উপাদানটি ইতিমধ্যে উপস্থিত থাকবে।
গিটের হ্যাশগুলি অপরিবর্তনীয় ডেটা হিসাবে রেফারেন্স গণনা পয়েন্টার হিসাবে ভাবতে সহায়তা করতে পারে।
যদি আপনি তার চারপাশে একটি অ্যাপ্লিকেশন তৈরি করেন তবে একটি নথি হ'ল পৃষ্ঠাগুলির একগুচ্ছ, যার স্তর রয়েছে, যার গোষ্ঠী রয়েছে, যার অবজেক্ট রয়েছে।
আপনি যখন কোনও বস্তু পরিবর্তন করতে চান, আপনাকে এটির জন্য একটি সম্পূর্ণ নতুন গ্রুপ তৈরি করতে হবে। আপনি যদি একটি গোষ্ঠী পরিবর্তন করতে চান তবে আপনাকে একটি নতুন স্তর তৈরি করতে হবে, যার জন্য একটি নতুন পৃষ্ঠা প্রয়োজন, যার জন্য একটি নতুন ডকুমেন্ট দরকার।
যতবারই আপনি একটি একক বস্তু পরিবর্তন করেন, এটি একটি নতুন দস্তাবেজ তৈরি করে। পুরানো নথিটি অবিরত রয়েছে। নতুন এবং পুরানো নথিতে তাদের বেশিরভাগ সামগ্রী ভাগ করা আছে - তাদের একই পৃষ্ঠা রয়েছে (1 বাদে)। এই পৃষ্ঠায় একই স্তর রয়েছে (1 বাদে)। এই স্তরটির একই গ্রুপ রয়েছে (1 বাদে)। এই গোষ্ঠীর একই জিনিস রয়েছে (1 বাদে)।
এবং একইভাবে, আমি যুক্তিযুক্তভাবে একটি অনুলিপি বলতে চাইছি, তবে বাস্তবায়ন অনুসারে এটি একই অপরিবর্তনীয় অবজেক্টের কাছে অন্য একটি রেফারেন্স গণনা করা।
গিট রেপো অনেকটা এরকম।
এর অর্থ হল যে প্রদত্ত গিট চেঞ্জসেটটিতে তার প্রতিশ্রুতি বার্তা রয়েছে (হ্যাশ কোড হিসাবে), এতে তার কাজের গাছ রয়েছে এবং এতে তার পিতামাতার পরিবর্তন রয়েছে।
এই পিতামাতাদের পরিবর্তনগুলিতে সমস্ত পথে ফিরে আসা তাদের পিতামাতার পরিবর্তনগুলি রয়েছে।
ইতিহাস রয়েছে এমন গিট রেপোর অংশটি সেই পরিবর্তনগুলির শৃঙ্খলা। এই ডিরেক্টরিটি "ডিরেক্টরি" গাছের উপরে একটি স্তরকে পরিবর্তিত করে - একটি "ডিরেক্টরি" গাছ থেকে, আপনি স্বতন্ত্রভাবে কোনও পরিবর্তন সেট এবং পরিবর্তনের শৃঙ্খলে যেতে পারবেন না।
কোনও ফাইলের কী হয় তা খুঁজে পেতে আপনি সেই ফাইলটি একটি চেঞ্জসেটে শুরু করেন। এই পরিবর্তনটি একটি ইতিহাস আছে। প্রায়শই সেই ইতিহাসে একই নামযুক্ত ফাইলটি উপস্থিত থাকে, কখনও কখনও একই বিষয়বস্তু সহ। বিষয়বস্তু যদি একই হয় তবে ফাইলটিতে কোনও পরিবর্তন হয়নি। যদি এটি আলাদা হয় তবে পরিবর্তন হয় এবং ঠিক কী কাজ করার জন্য কাজ করা দরকার।
কখনও কখনও ফাইলটি চলে যায়; তবে, "ডিরেক্টরি" ট্রিটিতে একই কন্টেন্টের সাথে একই ফাইল (একই হ্যাশ কোড) থাকতে পারে, সুতরাং আমরা সেভাবে এটি ট্র্যাক করতে পারি (নোট; এই কারণেই আপনি কমিট-টু-ফাইলটি কোনও কমিট-টু-তে আলাদা করতে চান -edit)। বা একই ফাইলের নাম, এবং ফাইল চেক করার পরে যথেষ্ট অনুরূপ।
সুতরাং গিট একটি "ফাইলের ইতিহাস" একসাথে প্যাচওয়ার্ক করতে পারে।
তবে এই ফাইলের ইতিহাস ফাইলটির একটি সংস্করণ থেকে অন্য সংস্করণে কোনও লিঙ্ক থেকে নয়, "পুরো চেঞ্জসেট" এর দক্ষ পার্সিং থেকে আসে।