Aktualizacja 2019:
Te dni, sprawa byłaby postrzegana w kontekście używając Git i 10 lat stosowania, które dystrybuowane rozwoju przepływu pracy (współpracujący głównie poprzez GitHub ) przedstawia ogólne najlepsze praktyki:
master
to gałąź gotowa do wdrożenia w dowolnym momencie: następna wersja z wybranym zestawem gałęzi funkcji scalonych master
.
dev
(lub gałąź integracji lub „ next
”) to ta, w której gałąź funkcji wybrana do następnego wydania jest testowana razem
maintenance
(lub hot-fix
) gałąź to ta, w której znajduje się ewolucja bieżącego wydania / poprawki błędów, z możliwymi połączeniami z powrotem do dev
i lubmaster
Tego rodzaju przepływu pracy (gdzie nie połączyć dev
się master
, ale gdzie można połączyć tylko do funkcji oddział dev
, a następnie, jeśli wybrany, aby master
, aby móc łatwo spaść wyposażone oddziały nie są gotowe do następnego wydania) jest realizowany w Git repo, z gitworkflow (jedno słowo, zilustrowane tutaj ).
Zobacz więcej na rocketraman/gitworkflow
. Historia robienia tego w porównaniu z rozwojem opartym na ruchu jest odnotowana w komentarzach i dyskusjach do tego artykułu autorstwa Adama Dymitruka .
(źródło: Gitworkflow: A Task-Oriented Primer )
Uwaga: w tym rozproszonym przepływie pracy możesz zatwierdzać, kiedy tylko chcesz i przesyłać do gałęzi osobistej niektóre WIP (Work In Progress) bez problemu: będziesz w stanie zreorganizować (git rebase) swoje commity przed uczynieniem ich częścią gałęzi funkcji.
Oryginalna odpowiedź (październik 2008, ponad 10 lat temu)
Wszystko zależy od sekwencyjnego charakteru zarządzania wydaniami
Po pierwsze, czy wszystko w twoim bagażniku jest naprawdę potrzebne do następnego wydania ? Może się okazać, że niektóre z obecnie rozwijanych funkcji to:
- zbyt skomplikowane i nadal wymagają dopracowania
- nie gotowy na czas
- interesujące, ale nie do następnego wydania
W takim przypadku linia główna powinna zawierać wszystkie bieżące prace programistyczne, ale gałąź wydania zdefiniowana wcześniej przed następną wersją może służyć jako gałąź konsolidacyjna w której tylko odpowiedni kod (sprawdzony pod kątem następnego wydania) jest łączony, a następnie naprawiany w fazie homologacji, i ostatecznie zamrożone, gdy trafiają do produkcji.
Jeśli chodzi o kod produkcyjny, musisz również zarządzać gałęziami łatek , pamiętając, że:
- pierwszy zestaw łat może faktycznie rozpocząć się przed pierwszym wydaniem do produkcji (co oznacza, że wiesz, że wejdziesz do produkcji z kilkoma błędami, których nie możesz naprawić na czas, ale możesz rozpocząć pracę nad tymi błędami w osobnej gałęzi)
- inne gałęzie łat będą miały luksus, aby rozpocząć od dobrze zdefiniowanej etykiety produkcyjnej
Jeśli chodzi o gałąź deweloperską, możesz mieć jedną linię główną, chyba że masz inne działania programistyczne, które musisz wykonać równolegle, takie jak:
- masowa refaktoryzacja
- testowanie nowej biblioteki technicznej, która może zmienić sposób wywoływania rzeczy w innych klasach
- początek nowego cyklu wydawniczego, w którym należy wprowadzić ważne zmiany architektoniczne.
Teraz, jeśli twój cykl rozwoju i wydania jest bardzo sekwencyjny, możesz po prostu postępować tak, jak sugerują inne odpowiedzi: jeden główny i kilka gałęzi wydania. Działa to w przypadku małych projektów, w których cały rozwój z pewnością przejdzie do następnej wersji i może zostać po prostu zamrożony i służyć jako punkt wyjścia dla gałęzi wydania, w której mogą mieć miejsce poprawki. To jest nominalny proces, ale gdy masz bardziej złożony projekt ... to już nie wystarcza.
Aby odpowiedzieć na komentarz Ville M.:
- pamiętaj, że gałąź deweloperska nie oznacza `` jednej gałęzi na programistę '' (co spowodowałoby `` szaleństwo scalania '', w którym każdy programista musiałby łączyć prace innych, aby zobaczyć / pobrać swoją pracę), ale jedną gałąź deweloperską na rozwój wysiłek.
- Kiedy te wysiłki muszą zostać połączone z powrotem w trunk (lub jakąkolwiek inną "główną" lub inną gałąź wydania, którą zdefiniujesz), jest to praca programisty, a nie - powtarzam NIE - menedżera SC (który nie wiedziałby, jak rozwiązać wszelkie sprzeczne scalanie). Lider projektu może nadzorować połączenie, co oznacza, że powinno się ono rozpocząć / zakończyć na czas.
- kogokolwiek wybierzesz, aby dokonać scalenia, najważniejsze jest:
- mieć testy jednostkowe i / lub środowisko montażowe, w którym można wdrożyć / przetestować wynik scalania.
- zdefiniowanie znacznika przed rozpoczęciem scalania, aby móc wrócić do poprzedniego stanu, jeśli wspomniane scalanie okaże się zbyt złożone lub zbyt długie, aby można było je rozwiązać.