Sobes.tech
Middle

Kā jūsu uzņēmumā notiek zarojumu apvienošana (merge) vai vēstures pārrakstīšana (rebase) versiju kontroles sistēmā?

sobes.tech AI

Atbilde no AI

Mūsu komandā mēs ievērojam workflows, kas balstīti uz Git. Lai integrētu izmaiņas, mēs izmantojam divas galvenās pieejas: merge un rebase, izvēloties tās atkarībā no situācijas un zara veida.

Merge:

  • Parasti tiek izmantots ilgstošu zaru apvienošanai, piemēram, dev ar main vai funkciju zaru integrācijai dev.
  • Izveido apvienošanas commit, kas skaidri rāda, kad notika izmaiņu apvienošana no citiem zariem.
  • Saglabā visu commit vēsturi, ieskaitot visas zarojumus.
git checkout dev  // Pāreja uz mērķa zaru
git merge feature/new-feature  // Funkcijas zara apvienošana

Rebase:

  • Tiek izmantots tīras un taisnas vēstures saglabāšanai funkciju zaros līdz to integrācijai (parasti dev).
  • Pārvieto pašreizējā zara commit'us uz mērķa (dev) zara virsotni, efektīvi "pārrakstot" vēsturi.
  • Vienkāršo vēsturi, izvairoties no merge commit'iem katrai mazai funkcijai vai labojumam.
  • Svarīgi: Nekad neveiciet rebase publiskajos zaros, kuros strādā citi izstrādātāji, jo tas var radīt konfliktus.
git checkout feature/new-feature  // Pāreja uz funkcijas zaru
git rebase dev  // Pārvieto funkcijas zara commit'us uz dev virsotni
// Ja rodas konflikti, tos atrisinām
git push --force-with-lease  // Drošam push pēc rebase izmanto --force-with-lease

Mūsu standarta workflows:

  1. Jauna funkcija vai labojums tiek izstrādāts atsevišķā zarā (feature/..., fix/...).
  2. Laiku pa laikam (pirms pull request vai sinhronizācijai ar dev) funkcijas zars tiek rebase'ēts uz aktuālo dev. Tas palīdz atrisināt konfliktus agrīni.
  3. Pēc izstrādes pabeigšanas un koda pārskatīšanas, funkcijas zars apvienojas ar dev ar no-ff (non-fast-forward), lai saglabātu apvienošanas informāciju. Vai arī, retāk, saspiež vienā commit'ā pirms mērķa zara apvienošanas, ja tas ir ļoti mazs vai labojums.
  4. No dev periodiski tiek veikti izlaišanas uz main (ražošanas) zaru, vienmēr ar merge.

Tādējādi mēs līdzsvarojam commit vēstures saglabāšanu (merge) ar tīras izstrādes zara uzturēšanu (rebase).