Kolega powiedział mi, że on myśli w tworzeniu naszego serwera CI zobowiązuje do zawróconych że nieudanych kompilacji, więc HEADw masterjest zawsze stabilny (jak w zdaniu zbudować co najmniej).
Czy jest to najlepsza praktyka, czy może być bardziej problematyczna niż pozostawienie masterzepsucia, 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 masterstabilnego, to przywrócenie błędów nie przekonuje mnie.
edycja: Nie ma znaczenia, czy to jest, masterczy 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 gitw 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 mastertego, 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?
mastersię 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.