𝗜𝗻𝘀𝗶𝗱𝗲 𝗚𝗶𝘁: 𝗢𝗯𝗷𝗲𝗰𝘁𝘀 & 𝗛𝗮𝘀𝗵𝗶𝗻𝗴
Git డేటాను నిల్వ చేసే విధానం వల్ల అది చాలా వేగంగా మరియు నమ్మదగినదిగా ఉంటుంది. Git లో నైపుణ్యం సాధించాలంటే, మీరు .git డైరెక్టరీని తప్పనిసరిగా అర్థం చేసుకోవాలి. మీ ప్రాజెక్ట్ను ట్రాక్ చేయడానికి Git కి అవసరమైనవన్నీ ఈ హిడెన్ (hidden) ఫోల్డర్లో ఉంటాయి.
మీ పనిని నిర్వహించడానికి Git నాలుగు ప్రధాన ఆబ్జెక్ట్ రకాలను ఉపయోగిస్తుంది:
- Blobs: ఇవి ఫైల్ కంటెంట్ను నిల్వ చేస్తాయి.
- Trees: ఇవి డైరెక్టరీ స్ట్రక్చర్లను మరియు ఫైల్ పేర్లను నిల్వ చేస్తాయి.
- Commits: ఇవి మీ ప్రాజెక్ట్ యొక్క స్నాప్షాట్లను మరియు మెటాడేటాను నిల్వ చేస్తాయి.
- Tags: ఇవి నిర్దిష్ట వెర్షన్లకు సంబంధించిన రిఫరెన్స్లను నిల్వ చేస్తాయి.
Git ప్రతిదీ హాషింగ్ (hashing) ఉపయోగించి గుర్తిస్తుంది. డేటాను ఒక ప్రత్యేకమైన IDగా మార్చడానికి ఇది SHA-1 అల్గారిథమ్ను ఉపయోగిస్తుంది. ఈ ID ఒక వేలిముద్ర (fingerprint) వలె పనిచేస్తుంది. మీరు ఫైల్లో ఒక అక్షరాన్ని మార్చినా, హాష్ పూర్తిగా మారిపోతుంది.
Git స్నాప్షాట్ను ఎలా నిర్మిస్తుంది:
మీరు ఒక ఫైల్ను కమిట్ చేసినప్పుడు, Git ఆబ్జెక్ట్ల గొలుసును (chain of objects) సృష్టిస్తుంది.
- 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
