𝗜𝗻𝘀𝗶𝗱𝗲 𝗚𝗶𝘁: 𝗢𝗯𝗷𝗲𝗰𝘁𝘀 & 𝗛𝗮𝘀𝗵𝗶𝗻𝗴
Git اپنے ڈیٹا کو محفوظ کرنے کے طریقے کی وجہ سے تیز اور قابل اعتماد ہے۔ Git میں مہارت حاصل کرنے کے لیے، آپ کو .git ڈائریکٹری کو سمجھنا ضروری ہے۔ یہ چھپا ہوا فولڈر وہ تمام چیزیں رکھتا ہے جو Git کو آپ کے پروجیکٹ کو ٹریک کرنے کے لیے درکار ہوتی ہیں۔
Git آپ کے کام کو مینیج کرنے کے لیے چار اہم object types استعمال کرتا ہے:
- Blobs: یہ فائل کے مواد (contents) کو محفوظ کرتے ہیں۔
- Trees: یہ ڈائریکٹری اسٹرکچر اور فائل کے ناموں کو محفوظ کرتے ہیں۔
- Commits: یہ آپ کے پروجیکٹ کے اسنیپ شاٹس (snapshots) اور میٹا ڈیٹا (metadata) کو محفوظ کرتے ہیں۔
- Tags: یہ مخصوص ورژنز کے حوالے (references) کو محفوظ کرتے ہیں۔
Git ہر چیز کی شناخت hashing کے ذریعے کرتا ہے۔ یہ ڈیٹا کو ایک منفرد ID میں تبدیل کرنے کے لیے SHA-1 algorithm استعمال کرتا ہے۔ یہ ID ایک فنگر پرنٹ کے طور پر کام کرتی ہے۔ اگر آپ فائل میں ایک حرف بھی تبدیل کریں، تو ہیش (hash) مکمل طور پر بدل جاتا ہے۔
Git اسنیپ شاٹ کیسے بناتا ہے:
جب آپ کسی فائل کو commit کرتے ہیں، تو Git objects کی ایک زنجیر (chain) تخلیق کرتا ہے۔
- Blob آپ کی فائل میں موجود اصل ٹیکسٹ یا ڈیٹا کو محفوظ کرتا ہے۔
- Tree اس blob کو ایک مخصوص فائل کے نام اور فولڈر کے راستے (path) کے ساتھ جوڑتا ہے۔
- Commit اس tree کو ایک مصنف (author)، ٹائم اسٹیمپ (timestamp) اور ایک پیغام (message) کے ساتھ منسلک کرتا ہے۔
Git تبدیلیوں یا "deltas" کو محفوظ نہیں کرتا، بلکہ یہ اسنیپ شاٹس محفوظ کرتا ہے۔ ہر بار جب آپ commit کرتے ہیں، Git نئے objects تخلیق کرتا ہے۔ یہ آپ کی ہسٹری کو ناقابلِ تبدیلی (immutable) اور بحال کرنے میں آسان بناتا ہے۔
اس اسٹرکچر کو سمجھنا آپ کو غلطیاں درست کرنے، کھویا ہوا ڈیٹا بحال کرنے اور پیچیدہ برانچز (branches) کو مینیج کرنے میں مدد دیتا ہے۔
اسے عملی طور پر دیکھنے کے لیے یہ منی پروجیکٹ آزمائیں:
ایک ریپوزٹری (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
