Git — 2005-ci ildə Linux nüvəsinin inkişafı üçün Linus Torvalds tərəfindən yaradılmış açıq mənbəli paylanmış versiya idarəetmə sistemidir. SVN kimi mərkəzləşdirilmiş sistemlərdən fərqli olaraq, Git hər bir tərtibatçı cihazında repozitorinin tam surətini saxlayır ki, bu da serverə daimi qoşulma olmadan işləməyə imkan verir. Git SCM, 2024 məlumatlarına görə, Git bütün kommersiya proqram təminatı layihələrinin 90%-dən çoxunda istifadə olunur.
Əsas məqamlar
Git — fayllardakı dəyişiklikləri izləyən və bir neçə tərtibatçıya eyni vaxtda bir layihə üzərində işləməyə imkan verən paylanmış versiya idarəetmə sistemidir (VCS). Mərkəzləşdirilmiş sistemlərdən fərqli olaraq, Git-də hər bir tərtibatçı dəyişikliklərin bütün tarixçəsi daxil olmaqla repozitorinin tam surətinə malikdir ki, bu da sistemi məlumat itkisinə qarşı davamlı edir və mərkəzi serverə daimi qoşulma tələb etmir.
Git-in tarixi 2005-ci ildə, BitKeeper şirkəti Linux nüvəsi tərtibatçıları üçün öz sisteminə pulsuz lisenziyanı ləğv etdikdən sonra Linus Torvalds-ın yeni VCS yaratması ilə başladı. Məqsədlər bunlar idi: sürət, arxitekturanın sadəliyi, filiallar vasitəsilə qeyri-xətti inkişafın dəstəklənməsi və tam paylanmışlıq. 3 ay ərzində Torvalds Git-in nüvəsini yazdı və bir ildən sonra layihə Junio Hamanonun rəhbərliyi altında özünüidarəyə keçdi.
Stack Overflow sorğusuna (2024) görə, peşəkar tərtibatçıların 93,9%-i Git-dən istifadə edir ki, bu da onu sənayedə dominant versiya idarəetmə sisteminə çevirir. Ən yaxın rəqib — Subversion (SVN) — layihələrin yalnız 5,2%-də, əsasən mərkəzləşdirilmiş prosesləri olan böyük korporativ mühitlərdə istifadə olunur.
Git repozitorisi — Git-in bütün fayllardakı dəyişiklikləri izlədiyi qovluqdur. Qovluğun içərisində sistemin bütün obyektlərinin saxlandığı gizli .git qovluğu yerləşir: commitlər, ağaclar, bloblar və istinadlar. Tərtibatçı commit yaratdıqda, Git faylları tamamilə kopyalamır — o, vəziyyətin şəklini (snapshot) yaradır və ona istinad saxlayır.
Hər bir commit ehtiva edir: unikal SHA-1 heşi (40 simvol), əvvəlki commitə istinad (parent), müəllif, tarix, commit mesajı və commit anında faylların vəziyyətini təsvir edən ağaca (tree) istinad. Commitlər zənciri istiqamətlənmiş asiklik qrafik təşkil edir, burada hər bir commit bir və ya bir neçə valideyni göstərir.
# Repozitorinin inisiallaşdırılması
git init my-project
cd my-project
# Commitin yaradılması
echo "Hello, Git" > README.md
git add README.md
git commit -m "Initial commit"
# Tarixçəyə baxış
git log --oneline --graph --all
Git üç əsas sahədən istifadə edir: working directory (diskdəki fayllar), staging area (hazırlanmış faylların düşdüyü indeks) və repository (commit tarixçəsi). git add əmri dəyişiklikləri işçi qovluqdan staging-ə köçürür, git commit isə staging-in məzmununu repozitoridə təsbit edir. Bu bölgü tərtibatçıya hər bir düzəlişi ayrıca təsbit etmədən dəyişikliklər dəstindən mənalı commit toplamağa imkan verir.
Git-in əsas əmrləri tərtibatçının gündəlik əməliyyatlarının 90%-ni əhatə edir. git clone əmri uzaq repozitorinin yerli surətini yaradır, git pull serverdən dəyişiklikləri götürüb cari filialla birləşdirir, git push isə yerli commitləri serverə göndərir. Bu üç əmr Git ilə işin əsas dövrünü təşkil edir.
Vəziyyətə baxmaq üçün git status istifadə olunur — o, hansı faylların dəyişdirildiyini, hansının staging-ə əlavə edildiyini və hansının izlənmədiyini göstərir. git diff staging-ə əlavə etməzdən əvvəl fayllardakı konkret dəyişiklikləri göstərir. Aşağıda ən çox istifadə olunan əmrlərin cədvəli verilmişdir:
| Əmr | Fəaliyyət | Nümunə |
|---|---|---|
| git clone | Uzaq repozitorini kopyalayır | git clone https://example.com/repo |
| git add | Faylları staging-ə əlavə edir | git add src/main.kt |
| git commit | Dəyişiklikləri tarixçədə təsbit edir | git commit -m "Fix login bug" |
| git push | Commitləri serverə göndərir | git push origin main |
| git pull | Serverdən dəyişiklikləri götürür | git pull origin feature |
Dəyişiklikləri ləğv etmək üçün Git bir neçə variant təqdim edir. git reset filial göstəricisini verilmiş commitə köçürür və staging və ya işçi qovluğu sıfırlaya bilər. git revert göstərilən commitin dəyişikliklərini ləğv edən yeni commit yaradır — bu, ümumi filiallar üçün təhlükəsiz ləğv üsuludur, çünki tarixçə yenidən yazılmır.
Git-də filiallar — müəyyən bir commitə yüngül daşınan göstəricilərdir. Yeni filial yaratmaq faylları kopyalamır, sadəcə yeni göstərici yaradır ki, bu da filiallanmanı praktiki olaraq ani edir. main filialı (əvvəllər master) — layihənin sabit, buraxılışa hazır kodu olan əsas filialıdır.
Standart təcrübə Git Flow və ya GitHub Flow istifadə etməkdir. Git Flow-da filiallardan istifadə olunur: main (buraxılış kodu), develop (inteqrasiya filialı), feature/* (yeni funksiyalar), release/* (buraxılışların hazırlanması) və hotfix/* (təcili düzəlişlər). GitHub Flow daha sadədir: yalnız main və feature-filiallar, bütün dəyişikliklər Pull Request vasitəsilə çatdırılır.
# Filialın yaradılması və keçidi
git branch feature-auth
git checkout feature-auth
# və ya bir əmrlə:
git checkout -b feature-auth
# Filialların siyahısı
git branch --list
git branch -a # bütün filiallar, silinmişlər daxil olmaqla
# Filialın silinməsi
git branch -d feature-auth
Git filiallanmasının vacib xüsusiyyəti cherry-pick imkanıdır: ayrıca commitin bir filialdan digərinə git cherry-pick <hash> əmri ilə köçürülməsi. Bu, bütün filialı birləşdirmədən feature-filialdan release-ə səhv düzəlişini köçürmək lazım olduqda faydalıdır. Git həmçinin commitləri yapışdırmaq, sıralamaq və redaktə etmək üçün rebase və interaktiv rebase (git rebase -i) dəstəkləyir.
Merge (birləşdirmə) iki valideyni olan xüsusi merge-commit yaradır. Bu commit iki filialın birləşmə faktını qeyd edir və tam tarixçəni saxlayır — birləşmənin harada və nə vaxt baş verdiyi görünür. Merge tarixçəni yaradıldığı formada saxlayır ki, bu da auditi asanlaşdırır, lakin commit qrafikini daha mürəkkəb edir.
Rebase (yenidən əsaslandırma) merge-commit yaratmaq əvəzinə cari filialın commitlərini hədəf filialın təpəsinə köçürür. Tarixçə xətti olur — inkişafın ardıcıl aparıldığı təəssüratı yaranır. Bununla belə, rebase tarixçəni yenidən yazır, commitlərin SHA-1 heşlərini dəyişdirir ki, bu da onu digər tərtibatçıların girişi olan ümumi filiallar üçün təhlükəli edir.
Seçim üçün tövsiyə: tarixçəni digər tərtibatçıların gördüyü ictimai filiallar üçün merge (feature → develop), Pull Request yaratmazdan əvvəl main-dan təzə dəyişiklikləri öz feature-filialınıza tətbiq etmək lazım olduqda isə rebase istifadə edin. Qayda sadədir: əgər commit artıq serverə göndərilibsə — onu rebase etməyin.
Birləşdirmə münaqişəsi Git bir fayldakı dəyişiklikləri avtomatik birləşdirə bilmədikdə yaranır. Git münaqişəli hissələri faylda xüsusi markerlərlə qeyd edir: <<<<<<< (bizim dəyişikliklər), ======= (ayırıcı), >>>>>>> (onların dəyişiklikləri). Tərtibatçı faylı əl ilə redaktə edir, lazımi variantı seçir və ya hər ikisini birləşdirir və birləşdirməni commitlə tamamlayır.
Uzaq repozitori (remote) — serverdə yerləşən Git repozitorisinin surətidir. GitHub, GitLab və Bitbucket uzaq repozitorilərin hostinqi üçün ən populyar platformalardır. Onlar kodun nəzərdən keçirilməsi, girişin idarə edilməsi, kod icmalı və CI/CD sistemləri ilə inteqrasiya üçün veb interfeys təqdim edir.
Git-də bir layihə üçün bir neçə uzaq repozitori konfiqurasiya etmək olar. Varsayılan olaraq əsas remote origin adlanır. git remote add əmri yeni remote əlavə edir, git fetch birləşdirmədən dəyişiklikləri götürür, git pull isə git fetch + git merge üçün qısaltmadır. Pull Request vasitəsilə kodla işləmək üçün tərtibatçı repozitorinin fork-unu yaradır, onu klonlayır, feature-filialda işləyir və orijinal repozitoriyə birləşdirmə sorğusu göndərir.
# Uzaq repozitorinin əlavə edilməsi
git remote add origin https://github.com/user/repo.git
# Uzaq repozitorilərə baxış
git remote -v
# Filialın serverə göndərilməsi
git push -u origin feature-auth
# Uzaq filialdan dəyişikliklərin götürülməsi
git pull origin main
Uzaq repozitorilər buraxılış versiyalarının markalanması üçün teqləməni dəstəkləyir. Teqlər yüngül (sadəcə commitə göstərici) və anotasiyalı (metadata: müəllif, tarix, mesaj) ola bilər. Anotasiyalı teqlərin buraxılış versiyaları üçün istifadəsi tövsiyə olunur, çünki onlar versiya haqqında tam məlumat ötürür və müəllifliyin doğrulanması üçün GPG açarı ilə imzalana bilər.
Git Worktree onlar arasında keçid etmədən müxtəlif qovluqlarda eyni anda bir neçə filialla işləməyə imkan verir. git worktree add ../feature-auth feature-auth əmri feature-auth adlı yeni işçi qovluğu yaradır, burada əsas qovluqda filialı dəyişmədən kod yazmaq olar. Worktree əsas qovluq uzunmüddətli inkişafla məşğul olduqda release filialında sürətli düzəlişlər üçün faydalıdır.
Git Submodules — bir Git repozitorisinin digərinə daxil edilməsi mexanizmidir. Submodule xarici repozitorinin sabit commitinə istinad saxlayır ki, bu da qurulmanın təkrarlanmasını təmin edir. git submodule add https://github.com/example/lib.git əmri xarici kitabxananı alt modul kimi əlavə edir. Alt modulları olan layihəni klonlayarkən bütün asılılıqları yükləmək üçün git submodule update --init --recursive yerinə yetirilməlidir.
Tez-tez verilən suallar
Git — yerli tarixçəsi və oflayn işləmək imkanı olan paylanmış VCS. SVN — fayllara baxmaqdan başqa bütün əməliyyatlar üçün serverə daimi qoşulma tələb edən mərkəzləşdirilmiş sistem.
Təhlükəsiz ləğv üçün git revert HEAD istifadə edin (yeni commit yaradılır). Commit hələ serverə göndərilməyibsə, git reset --soft HEAD~1 istifadə edə bilərsiniz.
.gitignore — Git-in görməməli olduğu fayl və qovluq nümunələrinin siyahısı olan fayldır. Müvəqqəti faylları, qurulmaları və IDE konfiqurasiyalarını repozitoridən xaric etmək üçün istifadə olunur.
git fetch dəyişiklikləri serverdən endirir, lakin onları cari filialla birləşdirmir. git pull fetch edir və dərhal merge yerinə yetirir. Nəzarət üçün fetch + diff-ə baxma, sonra əl ilə merge istifadə edin.
git commit --amend istifadə edin — bu əmr commit mesajını dəyişdirmək üçün redaktoru açır. Commit artıq serverdədirsə, git push --force tələb olunacaq ki, bu da ümumi filiallar üçün təhlükəlidir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun