Wypróbowałem obie metody w dużej aplikacji komercyjnej.
Odpowiedź na to, która metoda jest lepsza, zależy w dużym stopniu od twojej dokładnej sytuacji, ale napiszę, co pokazało moje ogólne doświadczenie do tej pory.
Ogólnie lepsza metoda (z mojego doświadczenia): Pień powinien być zawsze stabilny.
Oto kilka wskazówek i zalet tej metody:
- Zakoduj każde zadanie (lub powiązany zestaw zadań) w jego własnej gałęzi, a będziesz mieć elastyczność, kiedy chcesz scalić te zadania i wykonać wydanie.
- Kontrola jakości powinna zostać przeprowadzona na każdej gałęzi, zanim zostanie ona połączona z linią główną.
- Wykonując kontrolę jakości w każdej gałęzi, będziesz dokładnie wiedzieć, co spowodowało błąd.
- To rozwiązanie jest dostępne dla dowolnej liczby programistów.
- Ta metoda działa, ponieważ rozgałęzianie jest prawie natychmiastową operacją w SVN.
- Oznacz każde wydanie, które wykonujesz.
- Możesz opracować funkcje, których nie planujesz udostępniać przez jakiś czas, i zdecydować, kiedy dokładnie je scalić.
- W przypadku każdej wykonywanej pracy możesz skorzystać z zatwierdzenia swojego kodu. Jeśli pracujesz tylko z linii głównej, prawdopodobnie będziesz często utrzymywać swój kod niezaangażowany, a zatem niezabezpieczony i bez automatycznej historii.
Jeśli spróbujesz zrobić coś odwrotnego i wykonasz cały swój rozwój w bagażniku, będziesz mieć następujące problemy:
- Ciągłe problemy z kompilacją dla codziennych kompilacji
- Strata produktywności, gdy programista popełni problem dla wszystkich innych osób w projekcie
- Dłuższe cykle wydawnicze, ponieważ musisz wreszcie uzyskać stabilną wersję
- Mniej stabilne wersje
Po prostu nie będziesz mieć takiej elastyczności, jakiej potrzebujesz, jeśli spróbujesz utrzymać gałąź stabilną, a linię główną jako piaskownicę rozwoju. Powodem jest to, że nie możesz wybierać z pnia tego, co chcesz umieścić w tej stabilnej wersji. Wszystko byłoby już zmieszane razem w bagażniku.
W szczególności jeden przypadek, o którym powiedziałbym, aby wykonać wszystkie prace rozwojowe w bagażniku, to rozpoczęcie nowego projektu. W zależności od sytuacji mogą istnieć również inne przypadki.
Nawiasem mówiąc, rozproszone systemy kontroli wersji zapewniają znacznie większą elastyczność i zdecydowanie polecam przejście na hg lub git.