Sobes.tech
Middle

Kako u vašoj kompaniji dolazi do spajanja grana (merge) ili prepisivanja istorije (rebase) u sistemu kontrole verzija?

sobes.tech АИ

Одговор од АИ

U našem timu sledimo radni tok zasnovan na Git-u. Za integraciju promena koristimo dva glavna pristupa: merge i rebase, birajući ih u zavisnosti od situacije i tipa grane.

Merge:

  • Obično se koristi za spajanje dugotrajnih grana, na primer dev u main, ili za integraciju funkcionalnih grana u dev.
  • Kreira commit spajanja koji jasno pokazuje kada je došlo do integracije promena iz drugih grana.
  • Čuva celokupnu istoriju commit-ova, uključujući sve raskršće.
git checkout dev  // Prebacivanje na ciljnu granu
git merge feature/nova-funkcija  // Spajanje funkcionalne grane

Rebase:

  • Koristi se za održavanje čiste i linearnog istorije commit-ova u funkcionalnim granama do njihove integracije (obično u dev).
  • Prebacuje commit-ove trenutne grane na vrh ciljne grane (dev), efektivno "prepisujući" istoriju.
  • Pojednostavljuje istoriju, izbegavajući commit-ove spajanja za svaku malu funkciju ili ispravku.
  • Važno: Nikada ne radite rebase na javnim granama na kojima rade drugi programeri, jer to može izazvati konflikte pri povlačenju promena.
git checkout feature/nova-funkcija  // Prebacivanje na funkcionalnu granu
git rebase dev  // Prebacivanje commit-ova funkcionalne grane na vrh dev
// Ako je potrebno, rešavamo konflikte
git push --force-with-lease  // Koristimo --force-with-lease za siguran push nakon rebase-a

Naš standardni radni tok:

  1. Nova funkcija ili ispravka se razvija u posebnoj grani (feature/..., fix/...).
  2. Periodično (pre pull request-a ili za sinhronizaciju sa dev-om) funkcionalna grana se rebase-uje na aktuelnu verziju dev-a. Ovo pomaže da se konflikti reše u ranoj fazi.
  3. Nakon završetka razvoja i pregleda koda, funkcionalna grana se spaja u dev sa no-ff (non-fast-forward), da bi se sačuvale informacije o spajanju. Ili, ređe, se squash-uje u jedan commit pre spajanja u dev za veoma male funkcije ili ispravke.
  4. Iz dev se periodično prave verzije u main (produkcijska grana), uvek pomoću merge-a.

Na ovaj način, balansiramo očuvanje istorije commit-ova (merge) sa održavanjem čiste razvojne grane (rebase funkcionalnih grana).