W ciągle rozwijanym projekcie internetowym (nie produkt) mamy obecnie następującą strategię rozgałęziania, w przybliżeniu opartą na git flow :
- gałąź rozwoju: najnowsza działająca wersja
- oddział główny: wersja do wydania / wersja do wydania
- gałęzie funkcji: funkcje w fazie rozwoju
- gałęzie poprawek: pilne poprawki błędów w wydanej wersji
Mistrz jest tylko do odczytu, poprzez zaktualizowane wnioski pobiera z rozwijania lub poprawek oddziałów . Każda aktualizacja powoduje, że kandydat do wydania jest budowany i wdrażany w systemie pomostowym. Kandydaci do wydania są wdrażani do produkcji po ręcznym zatwierdzeniu.
Gałęzie operacji są tworzone w oparciu o wywoływanie lub od ostatniego zatwierdzenia, które zostało scalone w master. Żądanie ściągnięcia z gałęzi funkcji do opracowania jest budowane i wdrażane w bezpłatnym systemie testowym, w którym przeprowadzane są testy integracyjne i testy akceptacyjne (automatyczne i ręczne). Po pomyślnym przetestowaniu i przejrzeniu PR zostaje scalony, dzięki czemu staje się częścią następnej wersji (tj. Scala od dewelopera do mistrza).
Mój cel
Chciałbym to uprościć i pozbyć się gałęzi deweloperskiej. Gałąź deweloperska ma głównie przyczyny historyczne, a ponieważ jest to zawsze wersja pomyślnie przetestowana, myślę, że nie jest konieczne oddzielanie jej od master. Usunięcie go również uprości proces wydania, ponieważ nie ma już dodatkowego scalania.
Mam następujące ograniczenia:
- wydania są zaplanowane i nie powinny być w pełni zautomatyzowane
- choć gałęzie funkcji są zazwyczaj krótkotrwałe, niektóre pozostają nierozłączone przez kilka tygodni (np. przeprojektowanie), ale również muszą zostać przetestowane (obecnie w celu opracowania)
- czasami jedna funkcja powinna zostać wydana poza zwykłą wersją, skutecznie zmieniając ją w poprawkę. Przy obecnej strategii mogę zmienić gałąź funkcji i połączyć ją bezpośrednio w master
- zdarza się również, że musimy wstrzymywać funkcje po niepowodzeniu testów akceptacyjnych z systemami zewnętrznymi
Gdzie nie jestem pewien przejścia:
- obecnie tworzę żądania ściągania do testowania i scalania zatwierdzeń dla wydań. Czy mogę to ujednolicić?
- jak radzić sobie z poprawkami, kiedy master wyprzedza najnowszą wersję. Czy powinienem budować i wdrażać wersje bezpośrednio z oddziałów poprawek?
- czy istnieje rozsądny sposób radzenia sobie z funkcjami, które powinny zostać wykluczone z wydania po ich połączeniu? Czy oddzielna gałąź programistyczna naprawdę jest zaletą w tych przypadkach? W większości przypadków i tak przywracam i przywracam zatwierdzenia ręcznie.