Sobes.tech
Middle

როგორ ხერხდება თქვენი კომპანიის ვერსიების კონტროლის სისტემაში ფილიალების გაერთიანება (merge) ან ისტორიის გადახედვა (rebase)?

sobes.tech AI

პასუხი AI-სგან

ჩვენი გუნდის workflow-ები ეფუძნება Git-ს. ცვლილებების ინტეგრაციისთვის ჩვენ ვიყენებთ ორ ძირითად მიდგომას: merge და rebase, რომლებიც არჩევანს აკეთებენ სიტუაციიდან და ფილიალის ტიპიდან გამომდინარე.

Merge:

  • ჩვეულებრივ გამოიყენება ხანგრძლივი ფილიალების გაერთიანებისთვის, მაგალითად dev-ს main-ში ან ფიჩერ-ფილიალების ინტეგრაციისთვის dev-ში.
  • ქმნის გაერთიანების commit-ს, რომელიც მკაფიოდ აჩვენებს, როდის მოხდა სხვა ფილიალებიდან ცვლილებების გაერთიანება.
  • ინახავს ყველა commit-ის ისტორიას, მათ შორის ყველა ფილიალირებას.
git checkout dev  // გადართვა მიზნობრივ ფილიალზე
git merge feature/new-feature  // ფიჩერ-ფილიალის გაერთიანება

Rebase:

  • გამოიყენება სუფთა და სწორი ისტორიის შენარჩუნებისთვის ფიჩერ-ფილიალებში მათი ინტეგრაციისამდე (საშუალოდ dev-ში).
  • გადადის მიმდინარე ფილიალის commit-ებს მიზნობრივ (dev) ფილიალის თავზე, რაც ეფექტურად "rewrite"-ს ისტორია.
  • ამარტივებს ისტორიას, თავიდან აცილებს merge-კომიტებს თითოეული პატარა ფიჩერის ან გამოსწორებისთვის.
  • მნიშვნელოვანია: არასოდეს გააკეთოთ rebase საჯარო ფილიალებზე, რომელზეც მუშაობენ სხვა დეველოპერები, რადგან ეს ქმნის კონფლიქტებს.
git checkout feature/new-feature  // გადართვა ფიჩერ-ფილიალზე
git rebase dev  // გადადის ფიჩერის commit-ებს dev-ის თავზე
// თუ კონფლიქტები წარმოიშვება, მათ გადაჭრით
git push --force-with-lease  // უსაფრთხო push-ისთვის rebase-ის შემდეგ --force-with-lease-ს ვიყენებთ

ჩვენი სტანდარტული workflow:

  1. ახალი ფიჩერი ან გამოსწორება ვითარდება ცალკე ფილიალში (feature/..., fix/...).
  2. დროდადრო (pull request-ის წინ ან სინქრონიზაციისთვის dev-ისთან) ფიჩერი rebase-დება აქტუალურ dev-ზე. ეს ეხმარება early კონფლიქტების გადაჭრაში.
  3. დასრულების და კოდის მიმოხილვის შემდეგ, ფიჩერი მეგება dev-თან no-ff (non-fast-forward) რეჟიმში, რათა შეინარჩუნოს გაერთიანების ინფორმაცია.
  4. პერიოდულად, dev-დან ხდება რელიზები main-ში, ყოველთვის merge-ის მეშვეობით.

ასე რომ, ჩვენ ვიპოვით ბალანსს commit-ების ისტორიას შენარჩუნებას (merge) და სუფთა განვითარებული ფილიალის შენარჩუნებას (rebase).