Próbuję wybrać przepływ pracy Git, który jest najbardziej odpowiedni dla naszego produktu. Oto parametry:
- Wydajemy kilka głównych wydań rocznie, powiedzmy najwyżej 10
- Mamy wiele wersji naszego produktu aktywnych jednocześnie (niektóre osoby korzystają z wersji 10.1, niektóre z wersji 11.2 itd.)
- Musimy być w stanie pracować nad wieloma wydaniami jednocześnie (abyśmy mogli pracować nad wersją 12.1, ale gdy zbliżamy się do końca wydania, zaczynamy pracować nad wersją 12.2 w tym samym czasie)
- Musimy mieć możliwość poprawiania wydań, gdy zostaną znalezione krytyczne błędy
Jak dotąd, myślę, że może to działać:
- Wykorzystywane jest pojedyncze zdalne repo
- Utwórz gałąź 12.1 z poziomu głównego
- Twórz gałęzie funkcji na podstawie 12.1, zatwierdzaj je i łącz z powrotem w 12.1, push
- Gdy będziemy musieli rozpocząć pracę nad przyszłym wydaniem, utwórz nowy oddział 12.2 w oparciu o 12.1
- Odtąd, pracując nad funkcją dla 12.1, utwórz gałąź z 12.1, zatwierdzaj zmiany i scalaj w 12.1 i 12.2, wypychaj
- Jeśli pracujesz nad funkcją dla 12.2, utwórz gałąź z 12.2, zatwierdź zmiany i scal tylko w 12.2, push
- Po zakończeniu wydania 12.1 połącz je w master i oznacz gałąź master za pomocą 12.1
- Jeśli potrzebna jest poprawka, utwórz gałąź poprawki z najstarszej gałęzi wydania, która jej potrzebuje, zatwierdź zmiany i ponownie połącz ze wszystkimi gałęziami wydania dla tego wydania i przyszłych wydań, na które może mieć to wpływ; jeśli dotyczy to najnowszej gałęzi stabilnego wydania, połącz ją w master.
Mam kilka obaw:
- Nie jestem pewien, czy scalanie poprawek ze starych gałęzi do nowych gałęzi będzie płynnym procesem, zwłaszcza jeśli wprowadzono wiele nakładających się zmian; czy mądrzej byłoby po prostu ręcznie wprowadzić poprawkę w każdej gałęzi w przypadkach, gdy wygląda na to, że wystąpią konflikty
- Modele przepływu pracy, które widziałem, wydają się nie utrzymywać gałęzi wydania przy życiu, po wykonaniu wydanie zostaje scalone w master, oznaczone i usunięte. Mój problem polega na tym, że nie mam dobrego pomysłu na zarządzanie stanem wydania, jeśli wszystko, co mam, to znaczniki w systemie głównym, wydaje się, że łatwiej jest je naprawić w gałęzi, a następnie mam wydanie, do którego zawsze mogę wrócić który ma najnowszą poprawkę (mogę nawet oznaczyć poprawki w wydaniu). Nie jestem pewien, czy istnieje sposób, aby wrócić do programu master i jakoś mieć kopię wydania z zastosowanymi poprawkami i zaktualizować ten tag.
Doceniam komentarze na temat rzeczy, które mogłem przeoczyć, lub lepszych sposobów realizacji rzeczy, biorąc pod uwagę określone wymagania.