Jakie są dobre strategie kontroli źródła w przypadku dużych zadań?

9

Ogólną zasadą jest, aby zameldowanie było małe, a zameldowanie często. Ale czasami zadanie wymaga dużych zmian w podstawowych ramach. Następnie odprawa przed wykonaniem zadania spowoduje przerwanie projektu do momentu sprawdzenia ukończonej pracy.

Więc jakie strategie stosują ludzie, aby zmniejszyć ryzyko utraty pracy lub decydowania o tym, co robisz, to niewłaściwe podejście, a następnie zmiana zdania po usunięciu kodu i wypróbowaniu innego podejścia?

Kiedy będę mógł, zamelduję się, połowa wykonanych prac została zakomentowana, lub jeśli się kompiluje i nic nie używa nowych plików, to je zarejestruję. Im większa zmiana, tym większe prawdopodobieństwo, że rozwiążę projekt, a następnie scalę z powrotem kiedy wszystko znowu działa. Inną opcją, jeśli pozwala na to system kontroli źródła, są zestawy półek, które są w zasadzie małymi gałęziami. Więc kiedy skończę dzień lub dojdę do punktu decyzyjnego, odłożę swoje zmiany, a następnie, jeśli wydarzy się coś katastrofalnego lub chcę wrócić do tego punktu, mogę.

Dominique McDonnell
źródło
Jakie znasz systemy kontroli źródła?
@Thorbjorn: Svn, Perforce i Team Foundation Server. Wszyscy mają swoje plusy i minusy
Dominique McDonnell,

Odpowiedzi:

13

Używam git, więc moja odpowiedź brzmi „gałąź”. Rozgałęź się i popełniaj kawałek posiłku, wykonując różne części.

Przekaż swoje zobowiązania pod prąd, tak jak jesteś zadowolony, aby Twoi koledzy mogli przejrzeć zmiany bez zakłócania pnia.

Gdy wszyscy będą zadowoleni z kodu, połącz i gotowe!

(To, co zwykle robię dla stosunkowo długo działających gałęzi, to okresowe łączenie pnia (master, terminologia git) z moją gałęzią, więc te dwie gałęzie nie rozchodzą się zbyt radykalnie.)

Frank Shearar
źródło
1
Nie musisz się kwalifikować za pomocą „I use git” - sugerowałbym, że odpowiedzią jest rozgałęzienie kropki. Kluczem jest jednak upewnienie się, że gałąź funkcji jest na bieżąco z linią główną, co oznacza, że ​​łączenie zmian z linii głównej jest tak częste i rozsądne.
Murph
Nie korzystałem z rozgałęzień z subwersją, ale powiedziano mi, że znacznie łatwiej jest rozgałęzić się w git. Rozgałęziam się, gdy tylko mam funkcję, która nie jest trywialna. Najwyraźniej nie jest to praktyczne w przypadku wywrotu, stąd moje kwalifikacje. Cieszę się, że tak naprawdę nie musiałem się kwalifikować.
Frank Shearar
Zasadniczo najlepszą strategią jest rozgałęzienie, gdy tylko wielkość zadania nie będzie trywialna, i połączenie pnia z gałęzią tak długo, jak to konieczne, aby zachować go jak normalne pobranie pnia, z korzyścią kontroli źródła etapy pośrednie.
Dominique McDonnell,
1
@Dominic Zasadniczo tak, ale uważam, że „rozmiar nie jest trywialny”, co oznacza, że ​​„coś więcej niż jedna linia, którą rówieśnik może natychmiast zobaczyć, jest dobre lub złe”.
Frank Shearar,
3

Myślę, że odpowiedź będzie się różnić w zależności od używanego systemu kontroli wersji: scentralizowanego (np. Subversion) lub rozproszonego (np. Git). Nie mam żadnych rzeczywistych doświadczeń z używaniem rozproszonego systemu kontroli źródła, więc moja odpowiedź opiera się na tym, co robimy z subversion.

Jeśli dojdzie do dużej zmiany, która z czasem zepsuje naszą kompilację tułowia lub naprawdę zakłóci resztę zespołu w inny sposób, utworzymy oddział. Powiedziałbym jednak, że powinieneś zrobić tyle, ile możesz, aby tego uniknąć - większość zmian może być umieszczona obok reszty kodu przy niewielkim wysiłku. Na przykład, możesz uruchomić ścieżki kodu do nowego kodu (za pomocą prostych instrukcji if lub możesz wstrzyknąć nowe wersje w oparciu o ustawienia konfiguracji, jeśli używasz frameworku DI). Następnie, po zakończeniu, po prostu zmień konfigurację na nową wersję, przetestuj wszystko, usuń nieużywany kod, przetestuj ponownie i na koniec usuń ustawienie konfiguracji. Nie zawsze możesz to zrobić, ale ze względu na koszty utrzymania oddziału uważam, że zawsze powinieneś sprawdzić, czy jest to możliwe.

Jeśli robisz rozgałęzienie, myślę, że błędem, który często widzę, jest nieadekwatność gałęzi do pnia. Powinieneś ciągle łączyć zmiany z pnia do swojej gałęzi, podczas gdy ona istnieje, aby po zakończeniu odwrotnego scalania wszystkiego z powrotem było dość trywialne.

FinnNk
źródło
2

W naszym zespole używamy subversion i zwykle dokonujemy niewielkich zmian bezpośrednio w bagażniku. W przypadku większych zadań pracujący nad nim programista zazwyczaj tworzy gałąź prywatną, która po zakończeniu jest łączona z pniem. Następnie prywatny oddział zostaje usunięty. Oczywiście, podczas gdy prywatny oddział istnieje, jego właściciel powinien często się w nim sprawdzać.

Staramy się unikać długotrwałych połączeń między gałęziami i pniami, ponieważ wymaga to starannej księgowości. Zamiast tego mamy relatywnie krótkotrwałe gałęzie, które są scalane z powrotem do pnia tylko raz, a wkrótce potem usuwane.

I mamy zasadę, że nic nie może zostać zatwierdzone ani połączone do pnia, dopóki przynajmniej jedna inna osoba nie przejrzy zmian i nie zatwierdzi ich.

Dima
źródło
0

Podobnie jak zwykły komentarz osób SQL Server „zależy”

Jeśli możesz, sugeruję utworzenie gałęzi w kodzie, abyś mógł nadal stosować małe kontrole swojej pracy. Po zakończeniu wykonaj scalenie z powrotem do głównego pnia.

Tak, istnieje pewna szansa na powtórzenie tego wysiłku. ale przynajmniej zachowasz ślad pracy, który możesz cofnąć, okaże się to ślepym zaułkiem.

GrumpyMonkey
źródło