Jaki jest zalecany sposób oddzielenia bieżącego rozwoju od prac konserwacyjnych w oprogramowaniu do kontroli wersji?

10

Mam aplikację zarządzaną za pomocą Git. Właśnie wydałem nową wersję 2.x, którą planuję utrzymać na dłuższą metę (głównie poprawki błędów). W międzyczasie chciałbym rozpocząć pracę nad wersją 3.x. Jaki jest zalecany sposób zarządzania tym? Czy powinienem utworzyć gałąź dla wersji 2.x i mieć wersję 3.x w systemie głównym? czy w inny sposób?

Laurent
źródło
Mają różne gałęzie rozwoju i stabilne.
Oded
Więc co zwykle wchodzi w gałąź główną? (do tej pory zawsze tam wszystko robię)
laurent,
Musisz zdecydować, co chcesz przez masterto rozumieć. To tylko etykieta.
Oded

Odpowiedzi:

13

Opisano tutaj bardzo interesujący sposób: udany model rozgałęziania Git

Uważam to za bardzo intrygujące, ale jeszcze go nie wykorzystałem.

Bardzo dobrze, zgodnie z prośbą o (bardzo) krótkie podsumowanie tego, co mówi artykuł:

  • Tylko gałąź Master reprezentuje ukończone kamienie milowe (tj. Wersja 1.0, 1.1, 1.2 itd.)
  • Rozwój odbywa się we własnym oddziale (dogodnie nazwanym „rozwijaj”, kto by pomyślał?). Gałąź rozwoju jest ponownie łączona z gałęzią Master za każdym razem, gdy wykonywana jest pełna wersja funkcji.
  • Oddziały rozwojowe to gałęzie funkcji. Są to pojedyncze funkcje dla następnej (lub przyszłej) wersji. Łączą się z gałęzią rozwijającą się.
  • Kolejną gałęzią pochodzącą z rozwoju jest gałąź „release”. Jest to gałąź, która reprezentuje prawie pełną wersję wydania, w której trzeba usunąć tylko drobne szczegóły. Łączy się z gałęzią rozwoju, a ostatecznie z gałęzią Master
  • „Poprawka” rozgałęzia gałąź głównego, jeśli znajdziesz poważny błąd w jednym ze swoich wydań (tj. „Jeśli użycie wejdzie w kod konami, nasz program sformatuje główny dysk twardy ...”). Rozgałęzia się od wydania buggy, a po zakończeniu naprawy jest ponownie łączona z gałęzią master ORAZ gałęzią rozwoju.

To krótko, ale uwierzcie mi, że artykuł opisuje go bardziej szczegółowo, a dzięki pomocnej grafice wizualizacyjnej jest o wiele łatwiejszy do zrozumienia.

Sorcy
źródło
2
W odpowiedzi powinieneś podać wyjaśnienie swojej sugestii, najlepiej ludzie nie będą musieli podążać za linkiem, aby uzyskać ogólne wyobrażenie o modelu. Linki mają zły nawyk chodzenia, a odpowiedzi powinny stać same ...
yannis
+1 Prawie to, czego używamy w pracy i to naprawdę działa.
Ed James
1
Uważam, że jest to powszechnie nazywane modelem „stabilnego pnia” lub „gałęzi cech”.
sleske,
„Tylko gałąź główna reprezentuje ukończone kamienie milowe (tj. Wersja 1.0, 1.1, 1.2 itd.)” Nie chciałbym, aby gałąź główna z wersjami 1.0, 1.1, 1.2, 2.0, 1.3, 2.1, 1.4, 2.2, 3.0, 1.5 w ta kolejność byłaby naprawdę myląca. Domyślam się, że istnieje domniemane założenie, że istnieje co najwyżej jeden strumień, w którym wydawane są wydania, tak nie jest w mojej praktyce. Są wcześni użytkownicy i ludzie chcą czegoś bardziej stabilnego.
AProgrammer
Na dłuższą metę gałąź nie jest niczym więcej niż etykietą, aby ułatwić ci zrozumienie, co się tam dzieje. Jeśli więc nie podoba ci się w ten sposób, nic nie stoi na przeszkodzie, aby używać gałęzi Master tylko dla stabilnych wersji burmistrza i posiadania gałęzi „Trial” (lub jakkolwiek chcesz to nazwać) dla mniejszych wersji przyrostowych.
Sorcy,
5

Moją zasadą jest to, że im krótsza jest gałąź, tym głębiej powinna ona znajdować się w strukturze gałęzi i bardziej konkretna będzie jej nazwa. W dłuższym okresie gałąź będzie płytsza, będzie w strukturze gałęzi i bardziej ogólna będzie jej nazwa.

Więc zachowujesz swojego mistrza dla wersji długoterminowej (3.X) i wciąż nazywasz tę gałąź ogólną nazwą (master, trunk, devel, ...), a nie określoną (nazwa kodowa wydania lub jeszcze gorsze numery wydania) które w zbyt dużym stopniu zależą w praktyce od późnej decyzji marketingowej)

Nie ma to większego znaczenia w systemie takim jak git, który ma płaską przestrzeń nazw dla gałęzi i gdzie gałęzie są równoważne. Ma to większe znaczenie w przypadku systemu takiego jak clearcase, który ma hierarchiczną przestrzeń nazw dla gałęzi (pełna nazwa gałęzi V4 kończy się na głównej / v1 / v2 / v3 / v4 ...)

AProgrammer
źródło
+1, z wyjątkiem tego, że nie wiem, co tak naprawdę głębokie i płytkie oznacza w tym kontekście, być może mógłbyś trochę rozszerzyć na tych warunkach?
Michael Durrant
Myśli o gałęziach tworzących drzewo. Mogą wyjść z pnia lub innej gałęzi. Płytka oznacza, że ​​liczba kroków rozgałęzienia między gałęzią a pniem jest niewielka, głęboka oznacza, że ​​liczba kroków rozgałęzienia jest ważna. To, co małe i ważne, jest w większości względne, ale widziałem schematy, w których każde nowe wydanie było o krok dalej niż poprzednie z pnia. Jeśli używasz płaskiej przestrzeni nazw, nie jest tak źle. Jeśli przestrzeń nazw jest hierarchiczna (clearcase, CVS, RCS, Perforce mogą być również używane w taki sposób), otrzymujesz coraz dłuższe nazwy.
AProgrammer