𝗜𝗻𝘀𝗶𝗱𝗲 𝗚𝗶𝘁: 𝗢𝗯𝗷𝗲𝗰𝘁𝘀 & 𝗛𝗮𝘀𝗵𝗶𝗻𝗴
ഡാറ്റ സംഭരിക്കുന്ന രീതി കാരണം Git വേഗതയേറിയതും വിശ്വസനീയവുമാണ്. Git-ൽ വൈദഗ്ധ്യം നേടുന്നതിന്, നിങ്ങൾ .git ഡയറക്ടറിയെക്കുറിച്ച് മനസ്സിലാക്കണം. നിങ്ങളുടെ പ്രോജക്റ്റ് ട്രാക്ക് ചെയ്യാൻ Git-ന് ആവശ്യമായതെല്ലാം ഈ ഹിഡൻ ഫോൾഡറിൽ അടങ്ങിയിരിക്കുന്നു.
നിങ്ങളുടെ വർക്ക് മാനേജ് ചെയ്യാൻ Git പ്രധാനമായും നാല് തരം ഒബ്ജക്റ്റുകൾ ഉപയോഗിക്കുന്നു:
- Blobs: ഇവ ഫയലിലെ ഉള്ളടക്കം സംഭരിക്കുന്നു.
- Trees: ഇവ ഡയറക്ടറി ഘടനകളും ഫയൽ പേരുകളും സംഭരിക്കുന്നു.
- Commits: ഇവ നിങ്ങളുടെ പ്രോജക്റ്റിന്റെ സ്നാപ്ഷോട്ടുകളും മെറ്റാഡേറ്റയും സംഭരിക്കുന്നു.
- Tags: ഇവ പ്രത്യേക പതിപ്പുകളിലേക്കുള്ള (versions) റഫറൻസുകൾ സംഭരിക്കുന്നു.
ഹാഷിംഗ് (hashing) ഉപയോഗിച്ചാണ് Git എല്ലാ കാര്യങ്ങളെയും തിരിച്ചറിയുന്നത്. ഡാറ്റയെ ഒരു യുണീക് ഐഡി (unique ID) ആക്കി മാറ്റാൻ ഇത് SHA-1 അൽഗോരിതം ഉപയോഗിക്കുന്നു. ഈ ഐഡി ഒരു ഫിംഗർപ്രിന്റ് പോലെ പ്രവർത്തിക്കുന്നു. ഒരു ഫയലിലെ ഒരു അക്ഷരം പോലും നിങ്ങൾ മാറ്റിയാൽ, ഹാഷ് പൂർണ്ണമായും മാറുന്നു.
Git എങ്ങനെയാണ് ഒരു സ്നാപ്ഷോട്ട് നിർമ്മിക്കുന്നത്:
നിങ്ങൾ ഒരു ഫയൽ കമ്മറ്റ് ചെയ്യുമ്പോൾ, Git ഒബ്ജക്റ്റുകളുടെ ഒരു ശൃംഖല (chain) നിർമ്മിക്കുന്നു.
- Blob നിങ്ങളുടെ ഫയലിലെ യഥാർത്ഥ ടെക്സ്റ്റോ ഡാറ്റയോ സംഭരിക്കുന്നു.
- Tree ആ ബ്ലോബിനെ ഒരു പ്രത്യേക ഫയൽ നാമത്തിലേക്കും ഫോൾഡർ പാത്തിലേക്കും മാപ്പ് ചെയ്യുന്നു.
- Commit ആ ട്രീയെ ഒരു ഓതർ (author), ഒരു ടൈംസ്റ്റാമ്പ്, ഒരു മെസ്സേജ് എന്നിവയുമായി ബന്ധിപ്പിക്കുന്നു.
Git മാറ്റങ്ങളോ "ഡെൽറ്റകളോ" (deltas) അല്ല സംഭരിക്കുന്നത്. പകരം സ്നാപ്ഷോട്ടുകളാണ് സംഭരിക്കുന്നത്. ഓരോ തവണ നിങ്ങൾ കമ്മറ്റ് ചെയ്യുമ്പോഴും Git പുതിയ ഒബ്ജക്റ്റുകൾ നിർമ്മിക്കുന്നു. ഇത് നിങ്ങളുടെ ഹിസ്റ്ററി മാറ്റമില്ലാത്തതായും (immutable) എളുപ്പത്തിൽ വീണ്ടെടുക്കാവുന്നതായും മാറ്റുന്നു.
ഈ ഘടന മനസ്സിലാക്കുന്നത് പിശകുകൾ പരിഹരിക്കാനും, നഷ്ടപ്പെട്ട ഡാറ്റ വീണ്ടെടുക്കാനും, സങ്കീർണ്ണമായ ബ്രാഞ്ചുകൾ മാനേജ് ചെയ്യാനും നിങ്ങളെ സഹായിക്കുന്നു.
ഇത് പ്രവർത്തിക്കുന്നത് നേരിട്ട് കാണാൻ ഈ മിനി പ്രോജക്റ്റ് പരീക്ഷിച്ചു നോക്കൂ:
Initialize a repo:
mkdir git-labcd git-labgit initCreate a file and find its hash:
echo 'Hello Git' > hello.txtgit hash-object hello.txtStore the file as a blob:
git hash-object -w hello.txtCheck the object type and content:
git cat-file -t [YOUR_HASH]git cat-file -p [YOUR_HASH]Create a commit and see the 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
