Git işləmə prinsipi
İlk öncə xatırladım ki, git SHA-1 kodlaşdırma sistemi ilə işləyir. Və hər bir faylın daxilində olan məlumata əsasən bizə həş (hash) kod təqdim edib onu obyekt kimi saxlayır.
Ümumiyyətlə git sistemində 3 əsas fundamental obyekt növü var: Commit, tree( ağac ), blob (Binary Large OBject).
Blob gitdə minimal atomar informasiya saxlamaq üçün xanadır. Hər komit özündə faylı saxlaya bildiyi kimi, faylların dirrektoriyasında saxlaya bilər. Hər commit hansısa ağaca ünvanlanır. Ağaclarda da commit etdiyimiz faylın adının və dirrektoriyasının məlumatı saxlanılır.
Misal: Commit 1 (0feac) yalnız bir ağaca (1015b) ünvanlanır. Ağac özündə mahnının adını və həmin fayla aid yolu saxlayır. Ağac da bloba ünvanlanır. Blob isə daxilində mahnının bir başa kontentini saxlayır. Yəni biz bloba müraciət edərək faylın daxilində olan məlumatı almış olacayıq. Bu arada deyim ki, bir neçə ağac bir bloba müraciət edə bilər. Yəni bizim mahnı faylımız dəyişmədən biz Readme faylını əlavə etdik (commit 2 (7ca79)). Mahnı faylımız dəyişmədiyinə görə hər iki ağacımız mahnı blobuna (f9571) ünvanlanıb. Əlavə olaraq Readme.md faylı üçün də yeni blob yaradılıb. Şəkilə fikir versəniz nəzərinizə ikinci kommitin birinciyə ünvanlandığı çarpar. Bu da qaydadır ki, hər növbəti komit əvvəlki komitə ünvanlanmalıdı. Əlbətdə birinci komitə bu aid deyil.
git log əmri vasitəsi ilə gəlin komitlərimizə baxaq və onların üzərində yuxarıda izah etdiklərimi anlamaq üçün başqa əmrlərdən istifadə edək.
Gördüyünüz kimi 3 dənə komitimiz var və hərəsinin uzun bir həş kodu. Çox vaxtı kodun ilk 5 simvolu kifayət edir həmin obyektə müraciət etmək üçün. Mən də elə 5 simvoldan istifadə edərək yuxarıdakı şəkli hazırladım. Nə isə keçək əsas mətləbə.
git show -s --pretty=raw {comitin ilk 5 simvolu}
Nəticədə kommitin hansı ağaca ünvanlandığını görə bilirik.
Həmin ağacın hansı bloba aid olduğunu öyrənmək üçün isə
git ls-tree {ağacın həş kodunun ilk 5 simvolu}
əmrini yığırıq.
Eyni əmrləri ikinci komitimizə edirik və komitin həş kodunu görürük, bununla da biz ikinci komitin hansı ağaca ünvanlandığını görə bilərik.
Ağacı yoxlasaq, özündə iki fayl haqqında məlumat saxladığını görürük və iki bloba ünvanlandığının şahidiyik.
Yuxarıda qeyd etdiyim kimi, bloba müraciət edərək faylın kontentini görə bilirik. Gəlin ikinci komitin mahnı blobuna ( f9571 ) baxaq.
Həqiqətən də maraqlıdır, razısınız?
Bir də yadınızdadırsa sizə .git qovluğunun daxilində “objects” qovluğu haqqında demişdim. Bəli git bütün bu obyektləri “objects” qovluğunda saxlayır. Sadəcə məlumatın daha rahat və tez tapılması üçün. Hər obyektin ilk iki rəqəmindən qovluq yaradır. Faylı həmin qovluğa yerləşdirir. Diqqət edin ki, faylın adında artıq ilk iki simvol olmur. dediklərimi özünüz proyektlarınızda yoxlaya bilərsiniz.
Əvvəl bütün obyektlərin qovluqlarını, sonra isə 7c qovluğuna daxil olaraq ikinci kommitimizin faylınının skrinşotunu paylaşdım.
Diqqətiniz üçün təşəkkür edirəm.