To trudny problem, z którym boryka się wiele osób. Wolę używać konfiguracji Gitflow jako punktu wyjścia.
Rozwój -> Nowe prace nad
Master -> Gotowe rzeczy wymagające testowania Produkcja -> Rzeczy, które zostały opublikowane do produkcji.
Przy mniejszych (krótszych) funkcjach tworzę gałąź od programowania, pracuję tam, a następnie łączę gałąź z powrotem z programowaniem.
Przy głównych (długoterminowych) funkcjach tworzę gałąź z rozwoju, tworzę mniejsze gałęzie z tej gałęzi, a następnie łączę z powrotem do pierwszej gałęzi. Po zakończeniu głównej funkcji wraca ona do gałęzi programistycznej.
W regularnych odstępach czasu (w zależności od projektu) łączę programowanie z powrotem w master i rozpoczyna się cykl testowania. Jeśli jakieś poprawki pojawią się w trakcie testowania, zostaną wykonane w gałęzi master (gałąź sub, a następnie scalona). Podczas testów można kontynuować rozwój gałęzi master.
W dowolnym momencie master powinien zostać włączony do rozwoju, a rozwój powinien zostać połączony z dowolnym z jego długoterminowych oddziałów.
mistrz powinien zawsze (teoretycznie) być gotowy do produkcji. Rozwój powinien zawsze (teoretycznie) być gotowy do produkcji. Jedyny powód, dla którego istnieje różnica, to zapewnienie solidnego zestawu funkcji do testowania przez testerów.
Gdy jest gotowy, testowane zatwierdzenie w wzorcu jest łączone z produkcją, a wdrażanie w produkcji odbywa się z tej gałęzi. Poprawki, które należy wykonać w nagłych wypadkach, mogą następnie odbywać się w oddziale produkcyjnym bez konieczności łączenia się w trybie głównym (który może zawierać wiele niesprawdzonych zmian).
Moje normalne Drzewo wygląda
LongTerm -> Development -> Master -> Production
LongTerm <- Development | |
| Development -> Master |
LongTerm <- Development -> Master |
Development <- Master |
Master -> Production
Zasadą ogólną jest, że żadna zmiana nie powinna zająć więcej niż kilka godzin. Jeśli tak, należy wprowadzić mniejsze zmiany. Jeśli jest to ogromna funkcja (jak ponowne pisanie interfejsu użytkownika), to dzieje się to w dłuższej perspektywie, aby normalny rozwój mógł być kontynuowany w tym samym czasie. Oddziały LongTerm są zwykle tylko oddziałami lokalnymi, podczas gdy Programowanie, Master i Produkcja to oddziały zdalne. Wszelkie odgałęzienia są również tylko lokalne. Utrzymuje to repozytorium w czystości dla innych, bez utraty przydatności git na długoterminowym zestawie funkcji.
Chciałbym jednak zauważyć, że istnienie gałęzi długoterminowej jest rzadkością. Zwykle cała moja praca jest w fazie rozwoju. Tylko wtedy, gdy mam funkcję (zestaw), która zajmie tak długo, że muszę być w stanie pracować także nad normalnymi programami, korzystam z gałęzi LongTerm. Jeśli to tylko zestaw zmian, które powinny być razem, po prostu nie łączę się z mistrzem, dopóki wszystko się nie skończy.