Jak uzywac gita przy rozwijaniu kilku różnych funkjonalności aplikacji przez różnych programistów.
Mamy główną gałąź master i pojawiają się następujące sytuacje
- programista 1 tworzy sobie branch A w którym będzie rozwijał jakąś funkcjonalność
- programista 2 tworzy sobie branch B w którym będzie rozwijał jakąś funkcjonalność
- trochę później programista 3 tworzy sobie branch C w którym będzie dodawał swoją funkcjonalność
Tak to ma wyglądać? Po prsotu tworzyć sobie branche dla różnych funkcjonalności?
Co w przypadku, gdy np programista 3 zmerguje swój kod do mastera a następnie programist a1 będzie też chciał zmergować swoją pracę. Czy wtedy to co napisał programista 3 nie zostanie nadpisane tym co miał u siebie w branchu programista 1 (czyli zostaną cofnięte zmiany wprowadzone przez 3 bo programista 1 ma wcześniejszą wersję kodu)?
Wszystko rozchodzi się o to, do której gałęzi będą się łączyć feature branche tych 3 programistów.
Załóżmy hipotetyczny, prosty przypadek, trzech pisarzy (programistów), pisze inwokacje.
Pisarz 1 ma treść:
Litwo Ojczyzno moja.
Pisarz 2 ma treść:
Polsko Ojczyzno moja.
Pisarz 3 ma treść:
Litwo Ojczyzno moja.
Ty jesteś jak zdrowie.
Na potrzeby tego prostego przykładu zakładamy, że są na swoich własnych branchach, ale finalnie chcą zrobić "dołączenie" - merge, do głównego - mastera. Zasadniczo Pisarz 1 i Pisarz 3 będą mieć najprościej, gdyż git za pomocą swoich algorytmów, z łatwością rozpozna, że jeśli Pisarz 3 zmergował pierwszy, a więc jego wersja jest tą "referencyjną" na masterze, to Pisarz 1 nie musi się fatygować, bo jego zmiana już jest na masterze - nie ma problemu.
Gdyby to Pisarz 1 był "pierwszy", wówczas, git dla tak prostego przypadku będzie potrafił "pogodzić" ze sobą te zmiany, bo polegają one tylko na dopisaniu dodatkowej linijki pod spodem. Celowo dałem ten przykład taki prosty.
Problem zacznie się dopiero, gdy Pisarz 2 zechce mergować, albo będzie pierwszy na masterze. Wtedy git już nie będzie tak łatwo mógł ocenić, jak taką zmianę "połączyć" i dojdzie do merge conflict - wówczas na użytkownika, który konflikt spowodował, zostanie zrzucona konieczność rozwiązania tego konfliktu.
To jest bardzo uproszczony przykład tego, o co pytasz, możliwych flow, jak i wad i zalet z nimi związanych jest trochę i nie sposób tutaj ich wszystkich wymienić.