Sobes.tech
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:

  1. Yeni xüsusiyyət və ya düzəliş ayrı bir filialda (feature/..., fix/...) hazırlanır.
  2. 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.
  3. İ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.
  4. dev-dən müntəzəm olaraq main-ə 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.