𝗜𝗻𝘀𝗶𝗱𝗲 𝗚𝗶𝘁: 𝗢𝗯𝗷𝗲𝗰𝘁𝘀 & 𝗛𝗮𝘀𝗵𝗶𝗻𝗴
Git ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವ ರೀತಿಯಿಂದಾಗಿ ಇದು ವೇಗವಾಗಿ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿದೆ. Git ಅನ್ನು ಪರಿಣತವಾಗಿ ಬಳಸಲು, ನೀವು .git ಡೈರೆಕ್ಟರಿಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲೇಬೇಕು. ಈ ಗುಪ್ತ ಫೋಲ್ಡರ್ ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು Git ಗೆ ಬೇಕಾದ ಎಲ್ಲವನ್ನೂ ಒಳಗೊಂಡಿರುತ್ತದೆ.
ನಿಮ್ಮ ಕೆಲಸವನ್ನು ನಿರ್ವಹಿಸಲು Git ನಾಲ್ಕು ಪ್ರಮುಖ ಆಬ್ಜೆಕ್ಟ್ (object) ಪ್ರಕಾರಗಳನ್ನು ಬಳಸುತ್ತದೆ:
- Blobs: ಇವು ಫೈಲ್ನ ವಿಷಯಗಳನ್ನು (contents) ಸಂಗ್ರಹಿಸುತ್ತವೆ.
- Trees: ಇವು ಡೈರೆಕ್ಟರಿ ರಚನೆಗಳು ಮತ್ತು ಫೈಲ್ ಹೆಸರುಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತವೆ.
- Commits: ಇವು ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್ನ ಸ್ನ್ಯಾಪ್ಶಾಟ್ಗಳು (snapshots) ಮತ್ತು ಮೆಟಾಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತವೆ.
- Tags: ಇವು ನಿರ್ದಿಷ್ಟ ವರ್ಷನ್ಗಳಿಗೆ (versions) ಸಂಬಂಧಿಸಿದ ರೆಫರೆನ್ಸ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತವೆ.
Git ಹ್ಯಾಶಿಂಗ್ (hashing) ಬಳಸಿ ಎಲ್ಲವನ್ನೂ ಗುರುತಿಸುತ್ತದೆ. ಇದು ಡೇಟಾವನ್ನು ವಿಶಿಷ್ಟವಾದ ID ಆಗಿ ಪರಿವರ್ತಿಸಲು SHA-1 ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಈ ID ಒಂದು ಫಿಂಗರ್ಪ್ರಿಂಟ್ನಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ನೀವು ಫೈಲ್ನಲ್ಲಿ ಒಂದು ಅಕ್ಷರವನ್ನು ಬದಲಾಯಿಸಿದರೂ, ಹ್ಯಾಶ್ ಸಂಪೂರ್ಣವಾಗಿ ಬದಲಾಗುತ್ತದೆ.
Git ಸ್ನ್ಯಾಪ್ಶಾಟ್ ಅನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸುತ್ತದೆ:
ನೀವು ಫೈಲ್ ಅನ್ನು ಕಮಿಟ್ ಮಾಡಿದಾಗ, Git ಆಬ್ಜೆಕ್ಟ್ಗಳ ಸರಪಳಿಯನ್ನು (chain of objects) ರಚಿಸುತ್ತದೆ.
- Blob ನಿಮ್ಮ ಫೈಲ್ನಲ್ಲಿರುವ ನಿಜವಾದ ಪಠ್ಯ ಅಥವಾ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ.
- Tree ಆ blob ಅನ್ನು ನಿರ್ದಿಷ್ಟ ಫೈಲ್ ಹೆಸರು ಮತ್ತು ಫೋಲ್ಡರ್ ಪಾತ್ಗೆ (folder path) ಮ್ಯಾಪ್ ಮಾಡುತ್ತದೆ.
- Commit ಆ tree ಅನ್ನು ಲೇಖಕ (author), ಸಮಯದ ಮುದ್ರೆ (timestamp) ಮತ್ತು ಸಂದೇಶದೊಂದಿಗೆ ಸಂಪರ್ಕಿಸುತ್ತದೆ.
Git ಬದಲಾವಣೆಗಳನ್ನು ಅಥವಾ "deltas" ಅನ್ನು ಸಂಗ್ರಹಿಸುವುದಿಲ್ಲ. ಇದು ಸ್ನ್ಯಾಪ್ಶಾಟ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. ನೀವು ಪ್ರತಿ ಬಾರಿ ಕಮಿಟ್ ಮಾಡಿದಾಗಲೂ, Git ಹೊಸ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ರಚಿಸುತ್ತದೆ. ಇದು ನಿಮ್ಮ ಇತಿಹಾಸವನ್ನು ಬದಲಾಯಿಸಲಾಗದಂತೆ (immutable) ಮತ್ತು ಸುಲಭವಾಗಿ ಮರುಪಡೆಯುವಂತೆ (recover) ಮಾಡುತ್ತದೆ.
ಈ ರಚನೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ತಪ್ಪುಗಳನ್ನು ಸರಿಪಡಿಸಲು, ಕಳೆದುಹೋದ ಡೇಟಾವನ್ನು ಮರುಪಡೆಯಲು ಮತ್ತು ಸಂಕೀರ್ಣವಾದ ಬ್ರಾಂಚ್ಗಳನ್ನು (branches) ನಿರ್ವಹಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.
ಇದನ್ನು ಕಾರ್ಯರೂಪದಲ್ಲಿ ನೋಡಲು ಈ ಮಿನಿ ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ:
Initialize a repo: mkdir git-lab cd git-lab git init
Create a file and find its hash: echo 'Hello Git' > hello.txt git hash-object hello.txt
Store the file as a blob: git hash-object -w hello.txt
Check 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.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
