Jeśli pracujemy tylko z jednym oddziałem w Subversion, czy powinniśmy się tym przejmować? Czy nie możemy po prostu pracować na bagażniku, aby przyspieszyć?
Oto jak rozwijamy się z Subversion:
- Jest tu bagażnik
- Tworzymy nową gałąź rozwoju
- W tej branży opracowujemy nową funkcję
- Po zakończeniu tej operacji jest ona łączona w pniu, gałąź jest usuwana, a z pnia tworzona jest nowa gałąź programistyczna
Kiedy chcemy wprowadzić do produkcji, tworzymy etykietę z bagażnika. Poprawki błędów są wprowadzane do gałęzi na podstawie tego znacznika. Ta poprawka jest następnie scalana w pniu.
Dlatego tworzymy nową gałąź programistyczną po zakończeniu funkcji. W ten sposób poprawka zostanie wkrótce uwzględniona w naszym nowym kodzie.
Poniżej znajduje się schemat, który powinien wyjaśnić:
Teraz wydaje się, że nie jest to najbardziej efektywny sposób pracy. Budujemy lokalnie przed zatwierdzeniem, co zajmuje około 5-10 minut. Możesz zrozumieć, że odczuwa się to jako dość długi czas oczekiwania.
Idea gałęzi programistycznej polega na tym, że bagażnik jest zawsze gotowy do wydania. Ale nie jest to już prawdą w naszej sytuacji. Czasami funkcja jest prawie gotowa, a niektórzy programiści już zaczynają kodować następną funkcję (w przeciwnym razie siedzieliby i czekali, aż jeden lub dwóch programistów zakończy i połączy).
Następnie, gdy funkcja 1 jest zakończona, jest scalana w pień, ale zawiera pewne zatwierdzenia funkcji 2.
Czy więc powinniśmy zawracać sobie głowę gałęzią rozwoju, ponieważ mamy tylko jeden oddział? Czytałem o rozwoju opartym na pniu i gałęzi po abstrakcji, ale większość artykułów znalazłem skupienie się na części po gałęzi. Mam wrażenie, że dotyczą dużych zmian, które obejmą kilka wydań. Nie mamy z tym problemu.
Co myślisz? Czy możemy po prostu pracować na bagażniku? Najgorszym scenariuszem jest (myślę), że musielibyśmy zrobić tag z pnia i wybrać niezbędne zmiany, ponieważ niektóre zmiany / funkcje nie są jeszcze gotowe do produkcji.
Odpowiedzi:
Praca z IMHO bezpośrednio na pniu jest w porządku, jeśli możesz dokonywać małych przyrostów i masz ciągłą integrację, dzięki czemu możesz zapewnić (w rozsądnym zakresie), że twoje zobowiązania nie zepsują istniejącej funkcjonalności. Robimy to również w naszym bieżącym projekcie (w rzeczywistości nie pracowałem w żadnym projekcie, używając domyślnie gałęzi specyficznych dla zadania).
Tworzymy gałąź tylko przed wydaniem lub jeśli implementacja zajmuje dużo czasu (tzn. Obejmuje wiele iteracji / wydań). Szorstki rozmiar zadania można prawie zawsze oszacować wystarczająco dobrze, abyśmy z góry wiedzieli, czy potrzebujemy do tego osobnej gałęzi. Wiemy także, ile czasu pozostało do następnej wersji (publikujemy wersje co około 2 miesiące), więc łatwo jest sprawdzić, czy zadanie pasuje do czasu dostępnego przed następną wersją. W razie wątpliwości odraczamy go do momentu utworzenia gałęzi wydania, więc można rozpocząć pracę nad nim na linii głównej. Do tej pory musieliśmy utworzyć oddział specyficzny dla zadania tylko raz (za około 3 lata). Oczywiście twój projekt może być inny.
źródło
To, co opisujesz wraz z rozwojem funkcji, to równoległe opracowywanie (jednoczesne opracowywanie ukierunkowane na różne wersje produktów) i wymaga to odpowiednich gałęzi. Możesz mieć jedną gałąź dla każdej wersji lub dla każdej funkcji, jeśli często będziesz musiał ponownie skomponować funkcje, które utworzą określoną wersję.
Innym sposobem, aby to zrobić, byłoby domyślnie pracować z pnia, ale utworzyć gałąź, jeśli spodziewasz się, że twoje zadanie wykroczy poza kolejną wersję. Oczywiście zawsze oznaczasz wydanie.
To, jakie podejście wybierzesz, zależy od tego, ile zarządzania możesz zrobić z góry. Jeśli typowa wersja nie ma tak naprawdę równoległego rozwoju, wybrałbym drugie podejście.
źródło