Git
Chapters ▾ 2nd Edition

1.3 Başlanğıc - Git Nədir?

Git Nədir?

Beləliklə, Git qısaca nədir? Bu anlamaq üçün vacib bir hissədir, çünki Git’in nə olduğunu və bunun necə işlədiyinin əsaslarını başa düşsəniz, Git’dən səmərəli istifadə etmək çox güman ki, sizin üçün daha asan olacaq. Git’i öyrəndiyiniz zaman, CVS, Subversion və ya Perforce kimi digər VNS-lər haqqında bilə biləcəyiniz şeylərdən fikrinizi təmizləməyə çalışın - bu alətdən istifadə edərkən incə qarışıqlıqların qarşısını almağa kömək edəcəkdir. Git’in istifadəçi interfeysi digər digər VCS-lərə kifayət qədər bənzəsə də, Git məlumatları saxlayır və çox fərqli bir şəkildə düşünür və bu fərqləri anlamaq istifadə edərkən çaşqınlıq yaratmamağa kömək edəcək.

Snapshot’lar, Fərqlər Yox

Git və digər hər hansı bir VNS (Subversiya və daxil olan dostlar) arasındakı əsas fərq Git’in məlumatları düşünməsidir. Konseptual olaraq, digər sistemlərin əksəriyyəti məlumatları fayl əsaslı dəyişikliklərin siyahısı kimi saxlayır. Digər sistemlər (CVS, Subversion, Perforce, Bazaar və s.) saxladıqları məlumatları sənədlər toplusu və zaman keçdikcə hər bir sənəddə edilən dəyişikliklər kimi düşünürlər (bu adətən delta-based version kontrolu kimi təsvir olunur).

Hər bir sənədin əsas versiyasında dəyişiklik kimi məlumatların saxlanması
Figure 4. Hər bir sənədin əsas versiyasında dəyişiklik kimi məlumatların saxlanması

Git məlumatlarını bu şəkildə düşünmür və saxlamır. Bunun əvəzinə, Git, məlumatlarını daha çox miniatür bir fayl sisteminin bir sıra görüntüləri *(snapshot’ları) kimi düşünür. Git ilə hər dəfə etdiyiniz və ya proyektinizin vəziyyətini qoruduğunuz zaman, Git əsasən bütün sənədlərinizin o anda necə göründüyünün şəklini çəkir və həmin görünüşə istinad edir. Əgər fayllar dəyişməyibsə, səmərəli olmaq üçü Git yenə də saxlamır, sadəcə əvvəllər saxladığı eyni sənədlə əlaqələndirir. Git məlumatları daha çox snapshot axını kimi düşünür.

Git məlumatları zamanla layihənin görüntüləri olaraq saxlayır
Figure 5. Zamanla məlumatları layihənin snapshot’ları olaraq saxlamaq

Bu Git və təxminən digər bütün VNS’lər arasında vacib bir fərqdir. Git, digər sistemlərin əvvəlki nəsildən kopyalanan versiya nəzarətinin demək olar ki, hər tərəfini yenidən nəzərdən keçirir. Bu, Git’i sadəcə bir VNS’dən çox üstün qurulmuş inanılmaz dərəcədə güclü alətlərə sahib mini bir fayl sistemi edir.

Git’də Branch bölümündə Git budaqlanmasını əhatə edərkən məlumatlarınızı bu şəkildə düşünərək qazandığınız üstünlüklərin bir qismini araşdıracağıq.

Təxminən Hər Əməliyyat Lokaldır

Git’də əksər əməliyyatların həyata keçirilməsi üçün yalnız lokal sənədlər və mənbələrə ehtiyac duyulur - ümumiyyətlə şəbəkənizdəki başqa bir kompüterdən heç bir məlumat tələb olunmur. Əksər əməliyyatlarda şəbəkə gecikməsinin olduğu MVNS-ə alışmış olsanız, Git’in bu tərəfi sürət tanrılarının Git’i bilinməyən güclərlə xeyir-dua verdiyini düşünməyə vadar edəcəkdir. Layihənin bütün tarixi lokal diskinizdə olduğundan əksər əməliyyatlar demək olar ki, ani görünür.

Məsələn, Git layihənin tarixini nəzərdən keçirmək üçün, tarixi əldə etmək və sizə göstərmək üçün serverə getməyə ehtiyac duymur - sadəcə lokal məlumat bazanızdan oxuyur. Bu o deməkdir ki, siz dərhal layihənin tarixini görə bilirsiniz. Bir ay əvvəl mövcud bir versiya ilə fayl arasında edilən dəyişiklikləri görmək istəyirsinizsə, Git bir ay əvvəl faylı axtara və uzaq bir serverdən bunu etməyi istəmək əvəzinə lokal fərq hesablamasını həyata keçirə bilər və ya lokal olaraq bunu etmək üçün uzaq serverdən faylın köhnə versiyasını çəkə bilər.

Bu da offline və ya VPN-dən kənarda olsanız edə bilməyəcəyiniz çox az şey olduğu deməkdir. Bir təyyarədə və ya bir qatarda olsanız və bir az iş görmək istəsəniz, yükləmək üçün şəbəkə bağlantısına çatana qədər məmnuniyyətlə (lokal nüsxənizi xatırlayırsızmı?) işləyə bilərsiniz. Evə gedib VPN müştərinizlə düzgün işləyə bilmirsinizsə,o olmadan yenə də rahatlıqla işləyə bilərsiniz. Bir çox digər sistemlərdə bunu etmək ya mümkün deyil, ya da əziyyətlidir. Məsələn, Perforce-də serverə qoşulmadığınız zaman çox şey edə bilməzsiniz; Subversion və CVS-də sənədləri redaktə edə bilərsiniz, ancaq verilənlər bazanıza dəyişiklik edə bilməzsiniz (çünki verilənlər bazanız offlinedir).

Git’in Bütövlüyü Var

Git-dəki hər şey saxlanılmadan əvvəl yoxlanılır və sonra həmin yoxlama nömrəsi tərəfindən istinad edilir. Bu o deməkdir ki, Git-in xəbəri olmadan hər hansı bir fayl və ya qovluğun məzmununu dəyişdirmək mümkün deyil. Bu funksionallıq ən aşağı səviyyələrdə qurulmuşdur və fəlsəfəsinin ayrılmaz hissəsidir. Git aşkarlanmadan məlumatı itirə və ya köçürmə zamanı fayl pozğunluğunu ala bilməzsiniz.

Git-in bu yoxlanış üçün istifadə etdiyi mexanizmə SHA-1 hash deyilir. Bu, altıbucaqlı simvollardan (0-9 və a – f) ibarət olan 40 simvollu bir string-dir və Git-də bir fayl və ya qovluq quruluşunun məzmunu əsasında hesablanır. Bir SHA-1 hash aşağıdakı nümunəyə bənzəyir:

24b9da6552252987aa493b52f8696cd6d3b00373

Bu hash dəyərlərini Git-də hər yerdə görəcəksiniz, çünki Git onları çox istifadə edir. Əslində, Git verilənlər bazasında hər şeyi fayl adı ilə deyil, tərkibindəki hash dəyəri ilə saxlayır.

Ümumiyyətlə Git Sadəcə Məlumat Əlavə Edir

Git-də hərəkətlər etdikdə demək olar ki, hamısı yalnız Git verilənlər bazasına add məlumat verir. Sistemi geri qaytarılmayan bir şey etmək və ya məlumatları hər hansı bir şəkildə məcbur silmək çətindir. Hər hansı bir VNS-də olduğu kimi hələ etmədiyiniz dəyişiklikləri itirə və ya qarışdıra bilərsiniz, ancaq Git-də bir anlıq görüntüsünü aldıqdan sonra itirmək çox çətindir, xüsusən də verilənlər bazasını mütəmadi olaraq başqa bir anbara köçürsəniz.

Git-dən istifadə etmək çox xoşdur, çünki ciddi şeyləri korlamaq təhlükəsi olmadan bir çox şeyləri sınaya biləcəyimizi bilirik. Git-in məlumatlarını necə saxladığı və itirilmiş məlumatları necə bərpa edə biləcəyinizə daha ətraflı baxmaq üçün Ləğv Edilən İşlər (Geri qaytarılan)-ə baxın.

Üç Əsas Vəziyyət

İndi diqqət yetirin - burada öyrənmə prosesinin qalan hissəsinin rahat keçməsini istəyirsinizsə, Git haqqında yadda saxlamağınız vacib olan şeydir. Git sənədlərinizin yerləşə biləcəyi üç əsas vəziyyətə malikdir: modified, stagedcommissions:

  • Modified - faylı dəyişdirdiyinizi, lakin hələ verilənlər bazanıza verməmisiniz deməkdir.

  • Staged - növbəti snapshot-a daxil olmaq üçün hazırkı versiyasında dəyişdirilmiş bir faylı qeyd etdiyiniz deməkdir.

  • Commissions - məlumatların etibarlı olaraq lokal verilənlər bazasında saxlanıldığını bildirir.

Bu bizi Git layihəsinin üç əsas hissəsinə aparır: iş ağacı (the working tree), quruluş sahəsi (the staging area) və Git qovluğu (Git Directory).

İş ağacı, quruluş sahəsi və Git qovluğu.
Figure 6. İş ağacı, quruluş sahəsi və Git qovluğu

İş ağacı, layihənin bir versiyasının tək bir yoxlanılmasıdır. Bu fayllar Git qovluğundakı sıxılmış verilənlər bazasından çıxarılır və istifadə və ya dəyişdirmək üçün diskə yerləşdirilir.

Quruluş sahəsi ümumiyyətlə Git qovluğunuzda olan sonrakı commit-inizə nə daxil olacağı barədə məlumat saxlayan bir sənəddir. Git dilində texniki adı “index”-dir, lakin “staging area” ifadəsi də eyni şəkildə işləyir.

Git qovluğu Git layihəniz üçün metadata və obyekt verilənlər bazasını saxladığı yerdir. Bu, Git’in ən vacib hissəsidir və başqa bir kompüterdən depo yerləşdirdiyiniz zaman klon olan şeydir.

Əsas Git iş axını aşağıdakı kimidir:

  1. İş ağacınızdakı faylları dəyişdirirsiniz.

  2. Seçimlə yalnız sonrakı öhdəliyinizin bir hissəsi olmağını istədiyiniz dəyişiklikləri mərhələli şəkildə həyata keçirirsiniz, bu yalnız quruluş sahəsinə əlavə edir.

  3. Sənədləri quruluş sahəsindəki kimi götürən və anlıq görüntünü Git qovluğunuzda daimi olaraq saxlayan bir öhdəlik kimi yerinə yetirirsiniz.

Bir faylın müəyyən bir versiyası Git qovluğunda varsa, bu committed hesab olunur. Dəyişdirilmiş və quruluş sahəsinə əlavə edilmişdirsə, bu staged hesab olunur. Yoxlanılandan bəri dəyişdirilmiş, lakin mərhələli olmamışdırsa, bu modified hesab olunur.

Git’in Əsasları-də bu vəziyyətlər haqqında daha çox məlumat əldə edəcəksiniz və onlardan necə yararlanmağı və ya mərhələli hissəni tamamilə keçə biləcəyinizi öyrənəcəksiniz.