Całe zamieszanie wynika z innej semantyki stosowanej przez MS w odniesieniu do „numeru kompilacji”, a zwłaszcza „rewizji”. Terminy po prostu oznaczają różne rzeczy.
Większość ludzi (w tym ja) używa semantycznego schematu numeracji wersji, w którym po prostu dostajesz wyższy numer BUILD, ilekroć musisz stworzyć nową kompilację z jakiegokolwiek powodu. Dla nas poprawka jest uważana za kolejną zmianę kodu, a część BUILD rośnie automatycznie przy każdym uruchomieniu CI. Moduły z tym samym MAJ.MIN.REV są uważane za wymienne, a BUILD informuje, który z nich jest najnowszy.
Zwiększenie REWIZJI wskazuje jednak na nową gałąź stałego wydania, dlatego umieszczamy ją przed BUDOWANIE. Minusem tego podejścia jest to, że możemy uzyskać następującą sekwencję zdarzeń:
- zatwierdzić numer 4711: Alice dodała funkcję A
- CI tworzy kompilację 1.2.3.100
- zatwierdzić numer 4712: zmodyfikowana funkcja B Boba
- zatwierdzić numer 4713: Alice naprawiła funkcję A („poprawkę”)
- CI tworzy kompilację 1.2.3.101
Jak widać, poprawka nie jest jedyną zmianą zawartą w następnej kompilacji, również modyfikacja Boba staje się częścią tej kompilacji. Jeśli chcesz ustabilizować obecną gałąź, możesz wpaść w kłopoty, ponieważ nigdy nie możesz być pewien, czy Bob właśnie dodał kilka błędów.
MS stosuje oba terminy w różny sposób. Numer BUILD nie jest automatycznie zwiększany, zamiast tego można go uznać za rodzaj gałęzi wydania, w celu zamrożenia kodu używanego dla konkretnej wersji kodu. REWIZJA wskazuje dodatkowe „gorące” zmiany zastosowane do tego oddziału BUILD. Sekwencja byłaby zatem następująca:
- zatwierdzić numer 4711: Alice dodała funkcję A do trunk / master
- Carl tworzy gałąź kompilacji
1.2.100
- CI tworzy kompilację 1.2.100.0
- zatwierdzić numer 4712: Bob zmodyfikował cechę B w trunk / master
- zatwierdzić numer 4713: Alice naprawiła funkcję A w
1.2.100
gałęzi
- CI tworzy kompilację 1.2.100.1
Termin REWIZJA może odnosić się do
- produkt rewizja (tak jak większość ludzi go używać)
- rewizja konkretnej codziennej wersji (właśnie to robi MS)
Kluczowa różnica między tymi dwoma procesami polega na tym, czy chcesz mieć możliwość zastosowania poprawek do kompilacji CI, a tym samym, w którym momencie procesu tworzona jest gałąź. Ten aspekt staje się ważny, gdy chcesz wybrać konkretną kompilację w dowolnym momencie po pomyślnym zakończeniu wszystkich testów i promować dokładnie tę wersję do następnej oficjalnej wersji Twojego produktu.
W naszym przypadku narzędzie CI tworzy znacznik repozytorium, więc zawsze mamy niezbędne informacje gotowe do użycia w razie potrzeby. Dzięki SVN staje się to jeszcze prostsze, ponieważ tagi i gałęzie są implementowane dokładnie w ten sam sposób - tag jest niczym więcej niż gałęzią znajdującą się pod /tags
.
Zobacz też
W sekcji FAQ strategii rozgałęziania TFS :
W jakiej gałęzi powinienem naprawić bilet P1 (poprawka)?
P1 powinien zostać ustalony w gałęzi najbliższej bazie kodu działającej w dziale produkcyjnym. W takim przypadku P1 należy naprawić w gałęzi Prod. Stosując poprawkę w dowolnym innym oddziale i wdrażając zmiany w produkcji, ryzykujesz zwolnieniem niedokończonego lub nieprzetestowanego kodu z kolejnych iteracji.
Teraz możesz spierać się, czy można bezpiecznie pracować bezpośrednio przeciwko gałęzi Prod, pomyśl jeszcze raz, P1, który wymaga natychmiastowej uwagi, nie powinien być podstawowym problemem w systemie. Jeśli jest to podstawowy problem, należy go dodać do rejestru produktu, ponieważ może on wymagać dalszej analizy i dyskusji z klientem.
Kolejną dobrą lekturą jest przewodnik rozgałęziający TFS