Git ની અંદર: Objects અને Hashing
Git ડેટા કેવી રીતે સ્ટોર કરે છે તેના કારણે તે ઝડપી અને વિશ્વસનીય છે. Git માં નિપુણતા મેળવવા માટે, તમારે .git ડિરેક્ટરી સમજવી આવશ્યક છે. આ છુપાયેલું ફોલ્ડર તમારા પ્રોજેક્ટને ટ્રેક કરવા માટે Git ને જરૂરી તમામ વસ્તુઓ ધરાવે છે.
Git તમારા કામનું સંચાલન કરવા માટે મુખ્ય ચાર પ્રકારના object પ્રકારોનો ઉપયોગ કરે છે:
- Blobs: આ ફાઇલની સામગ્રી (contents) સ્ટોર કરે છે.
- Trees: આ ડિરેક્ટરી સ્ટ્રક્ચર અને ફાઇલના નામો સ્ટોર કરે છે.
- Commits: આ તમારા પ્રોજેક્ટના સ્નેપશોટ્સ અને મેટાડેટા સ્ટોર કરે છે.
- Tags: આ ચોક્કસ વર્ઝનના સંદર્ભો (references) સ્ટોર કરે છે.
Git હેશિંગ (hashing) નો ઉપયોગ કરીને બધું ઓળખે છે. તે ડેટાને એક અનન્ય (unique) ID માં રૂપાંતરિત કરવા માટે SHA-1 અલ્ગોરિધમનો ઉપયોગ કરે છે. આ ID ફિંગરપ્રિન્ટ તરીકે કામ કરે છે. જો તમે ફાઇલમાં એક અક્ષર પણ બદલો છો, તો હેશ સંપૂર્ણપણે બદલાઈ જાય છે.
Git સ્નેપશોટ કેવી રીતે બનાવે છે:
જ્યારે તમે ફાઇલ કમિટ (commit) કરો છો, ત્યારે Git objects ની એક ચેઈન બનાવે છે.
- Blob તમારી ફાઇલમાં રહેલા વાસ્તવિક ટેક્સ્ટ અથવા ડેટાને સ્ટોર કરે છે.
- Tree તે blob ને ચોક્કસ ફાઇલના નામ અને ફોલ્ડર પાથ સાથે મેપ કરે છે.
- Commit tree ને લેખક (author), ટાઈમસ્ટેમ્પ અને મેસેજ સાથે લિંક કરે છે.
Git ફેરફારો અથવા "deltas" સ્ટોર કરતું નથી. તે સ્નેપશોટ્સ સ્ટોર કરે છે. દર વખતે જ્યારે તમે કમિટ કરો છો, ત્યારે Git નવા objects બનાવે છે. આ તમારા ઇતિહાસને અપરિવર્તનીય (immutable) બનાવે છે અને તેને રિકવર કરવો સરળ બનાવે છે.
આ સ્ટ્રક્ચર સમજવાથી તમને ભૂલો સુધારવામાં, ગુમ થયેલ ડેટા રિકવર કરવામાં અને જટિલ બ્રાન્ચનું સંચાલન કરવામાં મદદ મળે છે.
તેને કાર્યરત જોવા માટે આ મિની પ્રોજેક્ટ અજમાવો:
રિપો (repo) ઇનિશિયલાઇઝ કરો: mkdir git-lab cd git-lab git init
ફાઇલ બનાવો અને તેનો હેશ શોધો: echo 'Hello Git' > hello.txt git hash-object hello.txt
ફાઇલને બ્લોબ (blob) તરીકે સ્ટોર કરો: git hash-object -w hello.txt
ઓબ્જેક્ટ પ્રકાર અને સામગ્રી તપાસો: git cat-file -t [YOUR_HASH] git cat-file -p [YOUR_HASH]
કમિટ બનાવો અને ટ્રી જુઓ: git add hello.txt git 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
