Middle
Şirkətinizdə versiya nəzarət sistemində filialların birləşdirilməsi (merge) və ya tarixçənin yenidən yazılması (rebase) necə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
Komandamızda, Git-ə əsaslanan iş axışını qəbul edirik. Dəyişiklikləri inteqrasiya etmək üçün iki əsas yanaşma istifadə edirik: merge və rebase, onları vəziyyət və filial növünə görə seçirik.
Merge:
- Ümumiyyətlə, uzunmüddətli filiaları birləşdirmək üçün istifadə olunur, məsələn, dev və main, və ya xüsusiyyət filiallarını dev-ə inteqrasiya etmək üçün.
- Digər filiallardan dəyişikliklərin nə zaman birləşdirildiyini açıq şəkildə göstərən merge commit yaradır.
- Bütün commit tarixçəsini, bütün ayrılmaları daxil olmaqla saxlayır.
git checkout dev // Hədəf filialına keçirik
git merge feature/yeni-ozellik // Xüsusiyyət filialını birləşdiririk
Rebase:
- Xüsusiyyət filiallarında təmiz və xətasız commit tarixçəsini saxlamaq üçün istifadə olunur, adətən dev-ə inteqrasiya edilmədən əvvəl.
- Mövcud filialın commitlərini hədəf filialın ən üstünə köçürür, tarixçəni "yenidən yazır".
- Tarixçəni sadələşdirir, hər kiçik xüsusiyyət və ya düzəliş üçün merge commitlərini qarşısını alır.
- Vacib: Digər inkişaf etdiricilərin işlədiyi ictimai filiallarda rebase etməyin, çünki bu, dəyişiklikləri çəkməkdə konfliktlərə səbəb ola bilər.
git checkout feature/yeni-ozellik // Xüsusiyyət filialına keçirik
git rebase dev // Xüsusiyyət filialının commitlərini dev-ə köçürürük
// Lazım gələrsə, konfliktləri həll edirik
git push --force-with-lease // Rebase-dən sonra təhlükəsiz push üçün --force-with-lease istifadə edirik
Bizim standart iş axışımız:
- Yeni xüsusiyyət və ya düzəliş ayrı bir filialda (feature/..., fix/...) hazırlanır.
- Dövri (pull request-dən əvvəl və ya dev ilə sinxronlaşdırmaq üçün) xüsusiyyət filialı mövcud dev-ə rebase edilir. Bu, erkən mərhələdə konfliktləri həll etməyə kömək edir.
- İnkişaf və kodun nəzərdən keçirilməsi tamamlandıqdan sonra, xüsusiyyət filialı
no-ff(fast-forward olmayan) ilədev-ə birləşdirilir, bu, birləşmə haqqında məlumatı saxlayır. Yaxud, daha az hallarda, çox kiçik xüsusiyyət və ya düzəliş üçün,dev-ə merge edilmədən əvvəl bir commit-ə squash edilir. dev-dən müntəzəm olaraqmain-ə buraxılışlar edilir (istehsal filialı), həmişə merge ilə.
Beləliklə, biz commit tarixçəsinin qorunması (merge) ilə təmiz inkişaf filialının saxlanması (rebase xüsusiyyət filialları) arasında balans yaradırıq.