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:
- ახალი ფიჩერი ან გამოსწორება ვითარდება ცალკე ფილიალში (feature/..., fix/...).
- დროდადრო (pull request-ის წინ ან სინქრონიზაციისთვის dev-ისთან) ფიჩერი rebase-დება აქტუალურ dev-ზე. ეს ეხმარება early კონფლიქტების გადაჭრაში.
- დასრულების და კოდის მიმოხილვის შემდეგ, ფიჩერი მეგება
dev-თანno-ff(non-fast-forward) რეჟიმში, რათა შეინარჩუნოს გაერთიანების ინფორმაცია. - პერიოდულად,
dev-დან ხდება რელიზებიmain-ში, ყოველთვის merge-ის მეშვეობით.
ასე რომ, ჩვენ ვიპოვით ბალანსს commit-ების ისტორიას შენარჩუნებას (merge) და სუფთა განვითარებული ფილიალის შენარჩუნებას (rebase).