Hər bir developer gec-tez bu suallarla üzləşir: "dünən nəyi dəyişdim ki, hər şey sındı?", "keçən həftə işləyən versiyanı necə geri qaytarım?", "iki nəfər eyni layihə üzərində necə işləsin ki, bir-birinin işini silməsin?". Bu suallara versiya nəzarəti sistemi (Version Control System, VCS) cavab verir — layihədəki bütün dəyişikliklərin tarixçəsini saxlayan proqram. Bu gün sənayenin standartı Git-dir: onu demək olar ki, bütün şirkətlər istifadə edir və onunla işləmək bacarığı istənilən müsahibədə yoxlanılır.
"final_v2_final" problemi
Versiya nəzarəti olmadan layihə qovluğu zaman keçdikcə belə görünməyə başlayır:
my-site/
├── index.html
├── index_old.html
├── index_backup_12_09.html
├── index_final.html
├── index_final_v2.html
├── index_final_v2_FINAL.html
└── index_final_v2_FINAL_Murad_fixes.htmlHansı versiyanın aktual olduğu, nüsxələrin bir-birindən nə ilə fərqləndiyi, dəyişikliyi kimin və nə üçün etdiyi bəlli deyil. Yalnız vaxtında çıxarmağı unutmadığınız nüsxəyə qayıtmaq olar, iki nəfər işləyəndə isə arxivləri bir-birinə göndərmək və başqasının dəyişikliklərini əl ilə köçürmək lazım gəlir.
Versiya nəzarəti sistemi bu problemi başqa cür həll edir: qovluqda tək bir index.html qalır, tarixçə isə ayrıca saxlanılır. Tarixçədə saxlanmış hər nöqtə commit adlanır. Commit faylların vəziyyətini, müəllifi, tarixi və mesajı — nəyin və nə üçün dəyişdirildiyini saxlayır:
Commit 3 Aysel 12.09 "Əlaqə formasını əlavə et"
Commit 2 Murad 10.09 "Mobil menyunu düzəlt"
Commit 1 Aysel 08.09 "Saytın strukturunu yarat"Layihə bütün tarixçəsinin bazası ilə birlikdə repozitori (repository, "repo") adlanır.
Lokal, mərkəzləşdirilmiş və paylanmış sistemlər
Lokal VCS-lər (məsələn, RCS, 1982-ci il) tarixçəni bir kompüterdə saxlayırdı: birgə işləmək çətin idi, diskin sıradan çıxması isə hər şeyi məhv edirdi.
Mərkəzləşdirilmiş sistemlər (CVS, SVN, Perforce) bütün tarixçəni bir serverdə saxlayır, developerlər isə oradan faylların yalnız cari versiyasını alırlar. Şəbəkə olmadan nə dəyişikliyi tarixçəyə yazmaq, nə də ona baxmaq olur; server əlçatan deyilsə, bütün komanda dayanır. SVN (Subversion) hələ də köhnə korporativ layihələrdə və oyun sənayesində rast gəlinir.
Paylanmış sistemlər (Git, Mercurial) hər developerə bütün tarixçə ilə birlikdə repozitorinin tam nüsxəsini verir. Commit etmək, tarixçəyə baxmaq və branch yaratmaq internetsiz mümkündür, server isə yalnız dəyişiklikləri mübadilə etmək üçün lazımdır. Server itərsə, tarixçəni komandanın istənilən üzvünün kompüterindən bərpa etmək olar.
Mərkəzləşdirilmiş (SVN) Paylanmış (Git)
[ Server ] [ Server ]
(tarixçə) (tarixçə)
/ | \ / | \
[Aysel] [Murad] [Leyla] [Aysel] [Murad] [Leyla]
fayllar fayllar fayllar tarixçə tarixçə tarixçə
+fayllar +fayllar +fayllarFərqlər siyahısı əvəzinə snapshot-lar
Bir çox köhnə sistemlər faylın ilk versiyasını və sonra ona edilən dəyişikliklər zəncirini saxlayır. Git isə snapshot-larla (anlıq görüntülərlə) düşünür: hər commit zamanı bütün layihənin necə göründüyünü yadda saxlayır. Yer itirməmək üçün dəyişməmiş fayllar kopyalanmır — yeni snapshot sadəcə artıq saxlanmış versiyaya istinad edir.
index.html style.css app.js
Commit 1 → index v1 style v1 app v1
Commit 2 → index v2 style v1 ↺ app v1 ↺
Commit 3 → index v2 ↺ style v2 app v1 ↺
↺ — fayl dəyişməyib: Git onu kopyalamır, saxlanmış versiyaya istinad edirBuna görə layihənin istənilən versiyasını tam və sürətlə əldə etmək olar, hər snapshot isə 9d03f5a… kimi yoxlama cəmi — hash ilə qorunur: məlumat zədələnərsə, Git bunu görəcək. Təfərrüatlar "Git daxildən" bölməsindədir.
Git GitHub deyil
Git sizin kompüterinizdə işləyən proqramdır. Onu 2005-ci ildə Linus Torvalds Linux nüvəsinin hazırlanması üçün yaradıb. Git pulsuz və açıq mənbəlidir, internetsiz və hesabsız işləyir.
GitHub, GitLab və Bitbucket Git repozitorilərinin nüsxələrinin saxlandığı onlayn servislərdir (hostinqlər). Onlar komandalar üçün alətlər əlavə edir: pull request-lər, code review, tapşırıqlar (issues), CI/CD.
| Alət | Nədir | Əsas təyinatı |
|---|---|---|
| Git | kompüterinizdəki proqram | tarixçə, commit-lər, branch-lar |
| GitHub | veb-servis (Microsoft-a məxsusdur) | hostinq, pull request-lər, GitHub Actions, open source |
| GitLab | veb-servis, öz serverinizdə də qurmaq olar | hostinq, daxili CI/CD |
| Bitbucket | Atlassian şirkətinin veb-servisi | hostinq, Jira ilə inteqrasiya |
Bənzətmə: Git layihənin şəklini çəkən fotoaparatdır, GitHub isə bu şəkillərin komanda ilə müzakirə olunduğu bulud albomudur. Şəkil çəkmək albomsuz da mümkündür.
💡 "Git-in GitHub-dan fərqi nədir?" sualı müsahibələrdə tez-tez verilir. Qısa cavab: Git versiya nəzarəti alətidir, GitHub isə repozitorilərin saxlanması və Git əsasında birgə iş üçün servisdir.
Zaman maşını kimi layihə tarixçəsi
Kiçik real layihənin tarixçəsi terminalda belə görünür (əmrləri sonra öyrənəcəyik, hələlik sadəcə nəticəyə baxın):
git log --onelinee41b7c2 (HEAD -> main, origin/main) Merge pull request #12 from aysel/contact-form
9d03f5a Validate contact form fields
6ab2e18 Add contact form
3c7f9e0 Fix mobile menu overlap
b58d41a Add course cards section
71e2c9d Add header and navigation
0f3a6b4 Initial commit: project structureHər sətir bir commit-dir, yeniləri yuxarıdadır. Solda qısa hash (unikal identifikator), sağda mesaj yazılıb. HEAD -> main hazırda harada olduğunuzu, origin/main isə serverdə hansı vəziyyətin olduğunu göstərir. İstənilən commit-i açıb orada məhz nəyin dəyişdiyini görmək olar:
<nav class="menu">
- <a href="#about">About</a>
+ <a href="#about">About us</a>
+ <a href="#contact">Contact</a>
</nav>- ilə başlayan sətirlər silinib, + ilə başlayanlar əlavə olunub — bu görünüş diff adlanır. Tarixçə sayəsində faylı istənilən vəziyyətə qaytarmaq və xətanın hansı commit-də yarandığını tapmaq olar.
Dəyişikliyin yolu: redaktədən main-ə qədər
Komandada hər dəyişiklik eyni yolu keçir (hər addıma kursda ayrıca mövzular həsr olunub):
1. Redaktə faylları redaktorda dəyişirsiniz
↓
2. Commit snapshot-u lokal repozitorinizdə qeydə alırsınız
↓
3. Push commit-ləri serverə göndərirsiniz (məsələn, GitHub-a)
↓
4. Pull request komandadan dəyişiklikləri yoxlamağı xahiş edirsiniz
↓
5. Merge code review-dan sonra dəyişikliklər əsas main branch-ına düşür1–2-ci addımlar yalnız sizin kompüterinizdə baş verir: push-a qədər həmkarlarınız commit-lərinizi görmür. Pull request Git-in özünün deyil, hostinqin funksiyasıdır (GitLab-da — merge request): orada həmkarlar kodu müzakirə edir və birləşdirmə düyməsini basırlar.
Tipik səhvlər
- "Git və GitHub eyni şeydir". Git tamamilə lokal, hesabsız və internetsiz işləyir. GitHub repozitorinin nüsxəsini göndərmək mümkün olan yerlərdən sadəcə biridir.
- "Versiya nəzarəti yalnız komandalara lazımdır". Tək işləyəndə də Git təhlükəsiz eksperiment etməyə və uğursuz dəyişiklikləri geri qaytarmağa imkan verir, açıq repozitorilər isə portfolionun bir hissəsidir.
- "Commit etdim — deməli, kod təhlükəsizdir". Serverə göndərilənə qədər commit yalnız sizin diskinizdə saxlanılır. Noutbuk push-dan əvvəl xarab olsa, commit-lər də itəcək.
- Repozitoridə hər şeyi saxlamaq. Parollar,
.env,node_modulesvə böyük videolar Git-ə qoyulmur: tarixçə hər şeyi əbədi yadda saxlayır (ətraflı —.gitignoremövzusunda). - Həftədə bir nəhəng commit. Zaman maşını yalnız tarixçədə dayanacaqlar olduqda işləyir. Kiçik, məntiqli addımlarla commit edin.
Xülasə
- Versiya nəzarəti sistemi dəyişikliklərin tarixçəsini saxlayır: kim, nə vaxt, nəyi və nə üçün dəyişib.
- Commit müəllifi, tarixi və mesajı olan saxlanmış layihə snapshot-udur; repozitori bütün tarixçəsi ilə birlikdə layihədir.
- Mərkəzləşdirilmiş sistemlər (SVN) tarixçəni serverdə, paylanmış sistemlər (Git) isə hər developerdə saxlayır.
- Git bütün layihənin snapshot-larını saxlayır, dəyişməmiş faylları isə təkrarlamır.
- Git kompüterinizdəki proqramdır; GitHub, GitLab və Bitbucket komandalar üçün alətləri olan hostinqlərdir.
- Dəyişikliyin tipik yolu: redaktə → commit → push → pull request → main-ə merge.
Praktika
- Kompüterinizdə "final", "kopiya", "old" kimi faylları olan qovluq tapın. Bu mövzudakı problemlərdən hansılarla artıq qarşılaşdığınızı yazın.
- GitHub-da məşhur açıq layihəni açın (məsələn, vuejs/core) və commit-lər siyahısına keçin. Son commit-in müəllifini, tarixini və mesajını tapın, onu açıb diff-ə baxın.
- Üç developerdən ibarət komanda üçün mərkəzləşdirilmiş və paylanmış sistemin sxemini çəkin. Yazılı cavab verin: server bir sutkalıq sıradan çıxsa, hər halda nə baş verəcək?
- Dostunuzla Bakıdakı kafe üçün lendinq hazırlayırsınız. "Menyu blokunu əlavə et" dəyişikliyinin redaktorunuzdan main branch-ına necə çatdığını 5–7 addımda təsvir edin və bu sözlərdən istifadə edin: commit, push, pull request, code review, merge.
💡 Git-in rəsmi saytındakı pulsuz Pro Git kitabı bütün kurs boyu əla məlumat mənbəyidir.