Kolega powiedział mi, że on myśli w tworzeniu naszego serwera CI zobowiązuje do zawróconych że nieudanych kompilacji, więc HEAD
w master
jest zawsze stabilny (jak w zdaniu zbudować co najmniej).
Czy jest to najlepsza praktyka, czy może być bardziej problematyczna niż pozostawienie master
zepsucia, dopóki programista go nie naprawi?
Uważam, że cofnięcie zatwierdzenia skomplikuje zadanie odczytania zatwierdzenia i poprawki (programista będzie musiał cofnąć przywrócenie, a następnie zatwierdzić poprawkę, co również zaśmieci git log
) i powinniśmy po prostu zostawić zatwierdzenie, a następnie zatwierdzić naprawić. Chociaż widzę pewne zalety posiadania master
stabilnego, to przywrócenie błędów nie przekonuje mnie.
edycja: Nie ma znaczenia, czy to jest, master
czy jakakolwiek inna gałąź programistyczna, ale pytanie pozostaje takie samo: czy system CI powinien przywrócić zatwierdzenie, które nie powiodło się w kompilacji?
kolejna (długa) edycja: Ok, używamy git
w dziwny sposób. Uważamy, że koncepcja oddziałów jest sprzeczna z rzeczywistym CI, ponieważ zobowiązanie do oddziału izoluje cię od innych programistów i ich zmian, a także dodaje czasu na konieczność ponownej integracji oddziału i radzenia sobie z możliwymi konfliktami. Jeśli wszyscy zobowiązują się do master
tego, konflikty zostają zredukowane do minimum, a każde zatwierdzenie przechodzi wszystkie testy.
Oczywiście, to zmusza cię do pchania tylko stabilnego (lub psujesz kompilację) i programowania z większą ostrożnością, aby nie zerwać wstecznej kompatybilności lub przełączać funkcje podczas wprowadzania nowych funkcji.
Istnieją pewne kompromisy podczas wykonywania CI w ten lub inny sposób, ale to nie wchodzi w zakres pytania (patrz powiązane pytanie na ten temat). Jeśli wolisz, mogę przeredagować pytanie: mały zespół programistów pracuje razem w gałęzi funkcji. Jeśli jeden programista popełnia coś, co psuje kompilację dla tej gałęzi, czy system CI powinien cofnąć zatwierdzenie, czy nie?
master
się zaczynać. Do tego służą gałęzie programowania i funkcji. Zmiany te przechodzą następnie w coś w rodzaju gałęzi integracji, w której można przetestować, czy wszystkie nowe funkcje kilku programistów będą ze sobą współpracować i tylko wtedy, gdy zostanie to przetestowane, może przejść w tryb master. Lub przynajmniej jeden z możliwych przepływów pracy.