𝗜𝗻𝘀𝗶𝗱𝗲 𝗚𝗶𝘁: 𝗢𝗯𝗷𝗲𝗰𝘁𝘀 & 𝗛𝗮𝘀𝗵𝗶𝗻𝗴
Git দ্রুত এবং নির্ভরযোগ্য কারণ এটি যেভাবে ডেটা সংরক্ষণ করে। Git-এ দক্ষ হতে হলে আপনাকে .git ডিরেক্টরি সম্পর্কে বুঝতে হবে। এই লুকানো ফোল্ডারটি আপনার প্রজেক্ট ট্র্যাক করার জন্য Git-এর প্রয়োজনীয় সবকিছু ধারণ করে।
আপনার কাজ পরিচালনা করার জন্য Git চারটি প্রধান অবজেক্ট টাইপ ব্যবহার করে:
- Blobs: এগুলো ফাইলের বিষয়বস্তু (contents) সংরক্ষণ করে।
- Trees: এগুলো ডিরেক্টরি স্ট্রাকচার এবং ফাইলের নাম সংরক্ষণ করে।
- Commits: এগুলো আপনার প্রজেক্টের স্ন্যাপশট এবং মেটাডেটা সংরক্ষণ করে।
- Tags: এগুলো নির্দিষ্ট ভার্সনের রেফারেন্স সংরক্ষণ করে।
Git হ্যাশিং (hashing) ব্যবহার করে সবকিছু শনাক্ত করে। এটি ডেটাকে একটি অনন্য (unique) ID-তে রূপান্তর করতে SHA-1 অ্যালগরিদম ব্যবহার করে। এই ID একটি ফিঙ্গারপ্রিন্টের মতো কাজ করে। আপনি যদি একটি ফাইলের একটি অক্ষরও পরিবর্তন করেন, তবে হ্যাশ সম্পূর্ণ বদলে যাবে।
Git কীভাবে একটি স্ন্যাপশট তৈরি করে:
যখন আপনি একটি ফাইল কমিট করেন, Git অবজেক্টের একটি চেইন তৈরি করে।
- Blob আপনার ফাইলের প্রকৃত টেক্সট বা ডেটা সংরক্ষণ করে।
- Tree সেই blob-টিকে একটি নির্দিষ্ট ফাইলের নাম এবং ফোল্ডার পাথের সাথে যুক্ত করে।
- Commit tree-টিকে একজন লেখক (author), একটি টাইমস্ট্যাম্প এবং একটি মেসেজের সাথে যুক্ত করে।
Git পরিবর্তন বা "deltas" সংরক্ষণ করে না। এটি স্ন্যাপশট সংরক্ষণ করে। প্রতিবার যখন আপনি কমিট করেন, Git নতুন অবজেক্ট তৈরি করে। এটি আপনার হিস্ট্রিকে অপরিবর্তনীয় (immutable) করে তোলে এবং ডেটা রিকভার করা সহজ করে দেয়।
এই গঠনটি বুঝতে পারলে আপনাকে ত্রুটি সংশোধন করতে, হারিয়ে যাওয়া ডেটা পুনরুদ্ধার করতে এবং জটিল ব্রাঞ্চগুলো পরিচালনা করতে সাহায্য করবে।
এটি বাস্তবে দেখতে এই মিনি প্রজেক্টটি চেষ্টা করুন:
একটি রিপোজিটরি (repo) শুরু করুন:
mkdir git-labcd git-labgit initএকটি ফাইল তৈরি করুন এবং এর হ্যাশ খুঁজুন:
echo 'Hello Git' > hello.txtgit hash-object hello.txtফাইলটিকে একটি blob হিসেবে সংরক্ষণ করুন:
git hash-object -w hello.txtঅবজেক্টের টাইপ এবং বিষয়বস্তু পরীক্ষা করুন:
git cat-file -t [YOUR_HASH]git cat-file -p [YOUR_HASH]একটি কমিট তৈরি করুন এবং tree দেখুন:
git add hello.txtgit commit -m 'Initial commit'git ls-tree HEAD
এর অভ্যন্তরীণ কার্যপদ্ধতি দেখলে আপনি বুঝতে পারবেন যে Git কেবল একটি ভার্সন কন্ট্রোল টুল নয়। এটি কন্টেন্ট-অ্যাড্রেসড অবজেক্টের (content-addressed objects) একটি অত্যন্ত সুসংগঠিত ডেটাবেস।
Source: https://dev.to/lotanna_obianefo/inside-git-objects-hashing-44gc
Optional learning community: https://t.me/GyaanSetuAi
